Python 在if语句中设置变量
我已经启动了Roaslind,生物信息学教学平台。我正试着做第一道题。这是我最终得到的代码: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:
#!/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)