python 带中断的嵌套循环

python nested loop with break

很好,我正在学习 python,我正在尝试制作这种文字游戏,但我卡住了 在 while 循环中......我想做的是列出可以使用的东西,并将用户的 raw_input 与此列表进行比较,如果他们在 5 次尝试中选择了正确的一个,则继续,否则会死于消息。 这是我的代码:

def die(why):
    print why
    exit(0)

#this is the list user's input is compared to
tools = ["paper", "gas", "lighter", "glass", "fuel"]
#empty list that users input is appended to
yrs = []
choice = None
print "You need to make fire"

while choice not in tools:
    print "Enter what you would use:"
    choice = raw_input("> ")
    yrs.append(choice)
    while yrs < 5:
        print yrs
        die("you tried too many times")
    if choice in tools:
        print "Well done, %s was what you needeed" % choice
        break

但选择没有被添加到列表 yrs,它只使用一个 while 循环 但它会永远持续下去,或者直到用户输入工具列表中的一项, 但是我喜欢将它限制为 5 次尝试,然后输入:die("You tried too many times") 但它在第一次尝试后立即给了我死亡信息...... 我在这个论坛上搜索,没有找到满意的答案,请帮助我

尝试

if len(yrs) < 5: 
   print yrs
else:
   die("you tried many times")

而不是一会儿。条件

yrs < 5

总是返回 false,因为 yrs 是一个列表,而您正在将它与一个整数进行比较。这意味着 while yrs < 5 循环永远不会执行,因为条件 yrs < 5 永远不会为真。您的程序跳过此循环并调用 die() 函数,这使其立即退出。这就是为什么你应该把 die 放在条件语句中,就像上面的代码片段一样。

请注意,如果您改为:

 while len(yrs) < 5:
     print yrs

这也是不正确的,因为条件 len(yrs) < 5 会在第一次检查时评估为 True,因此您最终会陷入无限循环,用户不会能够提供任何输入,条件 len(yrs) < 5 所依赖的长度。

您可能希望将 yrslengthif 语句(如上所述)中的 5 进行比较,以查看用户的尝试是否正确超过 5。如果它们不超过 5,代码流应该在重复外部 while 循环之前继续进行最终检查(if choice in tools...),以使用户能够再试一次。

    from sys import exit

    def die(why):
        print why
        exit()

    tools = ["paper", "gas", "lighter", "glass", "fuel"]
    choice = ''
    tries = 0  

    print 'You have to make fire'

    while choice not in tools:
        choice = raw_input('What do you want to do?-->')
        tries += 1
        if tries == 5:
            die('You tried too many times')

     print 'Well done you made a fire!'