如何实现Repeat Until循环?Python字符选择循环异常及输入位置疑问
问题解答
问题分析
你写的代码出现无限循环,核心问题有两个:
- while循环条件写反:你用了
while character_select in character_dictionary,意思是输入正确时才进入循环,但循环内部没有重新获取新输入,所以一旦输入正确,就会反复执行角色的present方法,停不下来。 - else分支永远不会触发:因为while条件已经确保输入在字典里,所以错误提示永远不会显示。
input语句位置的影响
- 放在循环外:只会执行一次输入操作。如果输入正确,会进入无限循环(没有更新输入);如果输入错误,直接跳过循环,根本不会提示用户重新输入,完全达不到需求。
- 放在循环内:每次循环都会让用户重新输入,这样才能在输入错误时反复询问,直到输入正确为止,这才是符合需求的写法。
修复后的代码
这里提供两种可行写法:
写法一:输入错误时循环提示
class Yakuza: def __init__(self, name, clan): self.name = name self.clan = clan def present(self): print(f"Hello! I am {self.name} from the {self.clan} clan!") user1 = Yakuza("Kiryu", "Dojima") user2 = Yakuza("Nishikiyama", "Dojima") input("Welcome to Yakuza 0! Press Enter to start.") character_dictionary = {"Kiryu" : "Dojima Clan", "Nishikiyama" : "Dojima Clan"} print(character_dictionary) # 先获取初始输入 character_select = input("Select your character: ") # 输入错误时持续循环提示 while character_select not in character_dictionary: print("This character is not available. Try again") character_select = input("Select your character: ") # 输入正确后执行对应角色逻辑 if character_select == "Kiryu": user1.present() elif character_select == "Nishikiyama": user2.present()
写法二:用无限循环模拟Repeat Until逻辑
这种写法更贴合你问的Repeat Until思路:先执行输入操作,再判断是否符合条件,不符合就继续循环。
class Yakuza: def __init__(self, name, clan): self.name = name self.clan = clan def present(self): print(f"Hello! I am {self.name} from the {self.clan} clan!") user1 = Yakuza("Kiryu", "Dojima") user2 = Yakuza("Nishikiyama", "Dojima") input("Welcome to Yakuza 0! Press Enter to start.") character_dictionary = {"Kiryu" : "Dojima Clan", "Nishikiyama" : "Dojima Clan"} print(character_dictionary) while True: character_select = input("Select your character: ") if character_select in character_dictionary: # 输入正确,执行逻辑并退出循环 if character_select == "Kiryu": user1.present() elif character_select == "Nishikiyama": user2.present() break else: print("This character is not available. Try again")
关于Python实现Repeat Until循环
Python没有原生的Repeat Until语法,但可以用while True(无限循环)模拟:
- 先执行循环体内的操作(比如获取输入)
- 判断是否满足退出条件,满足则用
break跳出循环,不满足就继续循环
上面的写法二就是标准实现方式,逻辑上和Repeat Until完全一致:先执行一次操作,直到条件满足才停止。
内容的提问来源于stack exchange,提问作者Fathomable
相关产品推荐
相关产品推荐

