为什么我不能创建一个简单的循环?

2024-09-30 00:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个简单的程序,从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()

Tags: intxtinputiflinesiteopenprint
2条回答

代码中有一个问题会阻止函数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?

你有可能做不到你认为它做的事情:

for line in fh.readlines():

.readlines()读取整个文件并返回它读取的内容。所以当你这么做的时候,循环中的行变量,不仅仅是文件的一行,而是整个文件。所以for循环只运行一次,因为在第一个循环之后,文件中没有其他内容可以迭代,因为读取到文件的末尾。基本上你确实读了文件中的一行,但是你一次就把整个文件都读完了。你知道吗

我想你想做的是一次读一行直到文件结束:

for line in fh:

或者一种更好的同时读取文件的方法是:

with open('filename.txt') as fh:
    for line in fh:
        print(line)

最后一个方法不需要您fh.close()它为您处理的文件。但是请注意最后一个方法是如何使用for line in fh:

相关问题 更多 >

    热门问题