You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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(无限循环)模拟:

  1. 先执行循环体内的操作(比如获取输入)
  2. 判断是否满足退出条件,满足则用break跳出循环,不满足就继续循环
    上面的写法二就是标准实现方式,逻辑上和Repeat Until完全一致:先执行一次操作,直到条件满足才停止。

内容的提问来源于stack exchange,提问作者Fathomable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:07:47