Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在if语句中设置变量_Python_Bioinformatics - Fatal编程技术网

Python 在if语句中设置变量

Python 在if语句中设置变量,python,bioinformatics,Python,Bioinformatics,我已经启动了Roaslind,生物信息学教学平台。我正试着做第一道题。这是我最终得到的代码: #!/usr/bin/python -tt def count_nuc(): '''Usage: count_nuc()''' s = raw_input('Enter nucleotide string: ') if s.isalpha(): if len(s) < 1000: for letter in s:

我已经启动了Roaslind,生物信息学教学平台。我正试着做第一道题。这是我最终得到的代码:

#!/usr/bin/python -tt

def count_nuc():

    '''Usage: count_nuc()'''

    s = raw_input('Enter nucleotide string: ')
    if s.isalpha():        
        if len(s) < 1000:
            for letter in s:
                if letter.upper() == 'A':
                    a =  s.count('A')
                elif letter.upper() == 'C':
                    c =  s.count('C')
                elif letter.upper() == 'G':
                    g = s.count('G')
                elif letter.upper() == 'T':
                    t = s.count('T')
                else:
                    print('Error')
            print '%d %d %d %d' % (a, c, g, t)
        else:
            print('String must be 1000 nucleotides or less.')
            count_nuc()
    else:
        print('String must of nucleotides must only contain alphabetic characters.')
        count_nuc()
#/usr/bin/python-tt
def count_nuc():
''用法:count_nuc()''
s=原始输入('输入核苷酸字符串:')
如果s.isalpha():
如果长度小于1000:
对于字母s:
如果字母.upper()==“A”:
a=s.count('a')
elif letter.upper()=“C”:
c=s.count('c')
elif letter.upper()==“G”:
g=s.count('g')
elif letter.upper()=“T”:
t=s.count('t')
其他:
打印('错误')
打印“%d%d%d%d%”(a、c、g、t)
其他:
打印('字符串必须小于等于1000个核苷酸')
count_nuc()
其他:
print('核苷酸的字符串必须仅包含字母字符')
count_nuc()

它很好用。大部分。我遇到的问题有点傻。我使用字符串的计数方法来计算特定类型的核苷酸的数量,然后将该数量分配给我的变量。然而,如果不存在这样的核苷酸(也就是说,我给它一个类似于“ATGTTT”的字符串,然后我的变量“c”就永远不会被定义,print语句会发条。我已经考虑过这个问题,我想不出什么办法可以解决这个问题。我曾想在打印变量之前尝试检查它是否存在,但这对我来说似乎有点笨拙,不确定这是否是错误的。)考虑正确的编码礼仪。

一种解决方案可能是在循环之前将所有变量赋值为零

例如:


a=c=g=t=0

一种解决方案可能是在循环之前将所有变量赋值为零

例如:

a=c=g=t=0

您也可以这样做

a = s.count('A') if letter.upper() == 'A' else 0
要将逻辑“内联”移动,也可以执行以下操作

a = s.count('A') if letter.upper() == 'A' else 0

要将逻辑“内联”移动,您的计数算法所做的工作远远超出了需要。在迭代过程中,每次看到
“a”
时,您都要对序列中的所有
“a”
进行计数。相反,您可以跳过迭代,只需无条件地进行一次计数(如果您计算字符串中未出现的内容,您将得到一个
0
):

或者,更好的办法是:

从集合导入计数器
如果长度小于1000:
计数=计数器
打印“{A}{C}{G}{T}”。格式(计数)

您的计数算法所做的工作远远超出了需要。在迭代过程中,每次看到
“a”
时,您都会对序列中的所有
“a”
进行计数。相反,您可以跳过迭代,只需无条件地进行一次计数(如果您计算字符串中未出现的内容,您将得到一个
0
):

或者,更好的办法是:

从集合导入计数器
如果长度小于1000:
计数=计数器
打印“{A}{C}{G}{T}”。格式(计数)

它们是计数,所以
0
而不是
,但是初始化是好的。欢迎:)接受答案是感激的!;)它们是计数,所以
0
而不是
,但是初始化是好的。欢迎:)接受答案是感激的!;)请注意,您正在为字符串中的每个A计算所有A,这是相当浪费的。请注意,您正在为字符串中的每个A计算所有A,这是相当浪费的。感谢您富有洞察力的批评。到目前为止,我只做了大约一个星期,从来没有听说过收集或计数器,但您的解决方案似乎确实节省了大量的打字。非常感谢您对初学者问题的友好输入。感谢您富有洞察力的评论。到目前为止,我只做了大约一个星期,从来没有听说过收集或计数器,但您的解决方案似乎确实节省了大量的打字。非常感谢您对初学者查询的友好输入。
if len(s) < 1000:
    a = c = g = t = 0
    for letter in s:
        if letter.upper() == 'A':
            a += 1
        elif letter.upper() == 'C':
            c += 1
        elif letter.upper() == 'G':
            g += 1
        elif letter.upper() == 'T':
            t += 1
        else:
            print('Error')
    print '%d %d %d %d' % (a, c, g, t)
from collections import Counter

if len(s) < 1000:
    counts = Counter(s)
    print "{A} {C} {G} {T}".format(counts)