我正在尝试创建一个简单的程序,从dna序列文件中读取酶切。我的问题是我不能让第一个块在循环中重复。我做错了什么,这样我就可以把它变成一个循环?非常感谢您的帮助,谢谢!!你知道吗
sequence = open('sequence.txt').read().replace('\n','')
enzymes = {}
fh = open('enzymes.txt')
print('Restriction Enzyme Counter')
inez = input('Enter a Restricting Enzyme: ')
def servx():
for line in fh.readlines():
(name, site, junk, junk) = line.split()
enzymes[name] = site
if inez in line:
xcr = site
print('Active Bases:', site)
for line in sequence.split():
if xcr in line:
bs = (sequence.count(xcr))
print('Enzyme', inez, 'appears', bs, 'times in Sequence.')
servx()
inez = input('Find another Enzyme? [Yes/No]:')
if inez is 'Yes':
servx()
fh.close()
代码中有一个问题会阻止函数
servx()
多次运行:if inez is 'Yes':
检查
inez
是否与文本字符串'Yes'
是同一实例。无论出于何种意图和目的,这将始终返回false。你想要的是:if inez == 'Yes'
检查字符串是否匹配,而不是对象实例本身,根据这里的问题:Why does comparing strings in Python using either '==' or 'is' sometimes produce a different result?
你有可能做不到你认为它做的事情:
.readlines()
读取整个文件并返回它读取的内容。所以当你这么做的时候,循环中的行变量,不仅仅是文件的一行,而是整个文件。所以for循环只运行一次,因为在第一个循环之后,文件中没有其他内容可以迭代,因为读取到文件的末尾。基本上你确实读了文件中的一行,但是你一次就把整个文件都读完了。你知道吗我想你想做的是一次读一行直到文件结束:
或者一种更好的同时读取文件的方法是:
最后一个方法不需要您
fh.close()
它为您处理的文件。但是请注意最后一个方法是如何使用for line in fh:
相关问题 更多 >
编程相关推荐