while循环在Python 3.5重复要求输入,而不是给出分配给字典输入的值

问题描述:

我试图从Python书中复制一个示例,该示例显示如何将文本文件转换为字典并询问通过输入功能进行翻译。while循环在Python 3.5重复要求输入,而不是给出分配给字典输入的值

我的问题是,现在这个Programm不会给我翻译字典中给定的有效输入。如果我使用if True而不是while循环,但它确实如此。我尝试重新安排代码,但它仍然会重复询问我的输入。

下面是导致此问题的代码:

genetischercode={} 

    while True: 
     triplet=input("Geben sie ein basentriplet ein: ") 

    with open("C:\\Users\\Christian\\Desktop\\Python-Programme\\Genetischer Code.txt","r") as fobj: 
     for line in fobj: 

     line=line.strip() 
     Zuordnung=line.split() 
     genetischercode[Zuordnung[0]]=Zuordnung[1] 


    if triplet in genetischercode: 
    print("Die korrespondierende Aminosäure ist: ",genetischercode[triplet]) 
    else: 
     print("Bitte geben sie ein gültiges Triplet ein: ") 

现在会发生什么,与其if triplet in genetischer code:else:得到触发IST,程序会重复要求输入变量triplet

我该如何解决这个问题?

+0

你能解决这个缺口?很难猜出这应该做什么。第一个'while True'循环会产生无限循环,但我想这不是你要做的。或者这是问题吗? – martin

+0

'while True'表示继续下去,只要'True'为'True'。循环永远不会结束。如果您想要运行所有代码,请将其缩进以使其位于此循环中。 –

+0

感谢您的兴趣球员,我修正了缩进和代码现在正常工作:-) –

您必须将if triplet in…和以下几行放入循环体中,方法是将它放在正确位置并增加缩进。 (注意,缩进在Python编程非常重要,因为它是使循环使用的代码块,if解决的唯一途径等。)

genetischercode={} 

# we have to generate the dictionary only once 
with open("C:\\Users\\Christian\\Desktop\\Python-Programme\\Genetischer Code.txt","r") as fobj: 
    for line in fobj: 

     line=line.strip() 
     Zuordnung=line.split() 
     genetischercode[Zuordnung[0]]=Zuordnung[1] 
# now enter infinite loop 
while True: 
    triplet=input("Geben sie ein basentriplet ein: ") 

    # you probably want some way to exit the loop 
    if triplet == 'stop': 
     break 

    if triplet in genetischercode: 
     print("Die korrespondierende Aminosäure ist: ",genetischercode[triplet]) 
    else: 
     print("Bitte geben sie ein gültiges Triplet ein: ") 
+0

非常感谢伊利亚:-)! –

+0

如果答案回答了您的问题,您可以通过点击答案左侧的复选标记来“接受”答案。 –