如何使用不可阻挡的循环修复此代码



我要做一个有趣的测试,随机选择3个问题,并给3次猜测的机会。

在我尝试执行后,我尝试了正确的答案,但一直循环,并告诉我的答案不正确,无法停止循环,我不知道为什么。。。。

有人能帮我看看吗?

q1 = 'What can one catch that is not thrown?'
a1 = 'A cold'
q2 = 'If you had only one match and entered a dark room containing an oil lamp, some kindling wood, and a newspaper, which would you light first?'
a2= 'The match'
q3 = 'Some months have 31 days, others have 30 days, but how many have 28 days?'
a3= 'All the months'
import random
quizzes = [q1, q2, q3]  #catagorise to quizzes
for answer in random.choice(quizzes):
guesses = 3  # limits to 3 guesses
random.choice(quizzes)
asking = input('Your Answer is?n')
if   quizzes == q1 and asking == 'A cold':
print( 'Bingo!!')
break
elif quizzes == q2 and asking == 'The match':
print( 'Bingo!!')
break
elif quizzes == q3 and asking == 'All the months':
print( 'Bingo!!')
break
elif guesses == 0:
print( 'Sorry, you are reached the maximum guesses. Bye~now~')
else:
guesses -= 1  #reducing the max. guesses of 3 to 2 to 1
print( "Sorry, it's incorrect.")
result = asking

for answer in random.choice(quizzes)实际上是得到一个随机测试字符串,然后迭代字符串中的每个字符;这就是为什么循环似乎没有停止,因为它迭代的项目比您预期的要多。

循环中最初的行random.choice(quizzes)不起任何作用;CCD_ 3函数从列表中返回一个随机项目。如果你没有对返回的值做任何事情,比如打印它,那么什么都不会发生。

if quizzes == q1 and asking == 'A cold':这样的原始行不起作用,因为quizzes是你的测验列表,所以检查quizzes == q1总是False。在我的代码中,由于我是通过for quiz in quizzes循环通过quizzes,这意味着我代码中的quiz是来自quizzes的测试字符串,所以当我执行quiz == q1时,它会正确地将当前quizq1q2q3进行比较。

我注意到您在a1a2a3中定义了答案,因此您可以简化代码并使用这些代码与asking进行比较,比如asking == a1而不是asking == 'A cold'

import random
quizzes = [q1, q2, q3]  #catagorise to quizzes
random.shuffle(quizzes)  # randomize the quiz order
for quiz in quizzes:  # loop through the list of quizzes
guesses = 3     # limits to 3 guesses
print(quiz)     # prompt the user with the quiz question
while True:     # keep asking for answers until guesses run out, or the user gets a correct answer
asking = input('Your Answer is?n')
if     quiz == q1 and asking == a1:
print( 'Bingo!!')
break
elif   quiz == q2 and asking == a2:
print( 'Bingo!!')
break
elif   quiz == q3 and asking == a3:
print( 'Bingo!!')
break
elif   guesses == 0:
print( 'Sorry, you are reached the maximum guesses. Bye~now~')
break
else:
guesses -= 1        #reducing the max. guesses of 3 to 2 to 1
print( "Sorry, it's incorrect.")

您的问题是猜测的位置。现在它在你的for循环中。把它放在for循环之外,它应该会起作用。

你也应该看看你的

elif guesses == 0:

现在,玩家将能够在0次猜测的情况下进行猜测。它可能应该是<1。

你的代码将按照你想要的方式运行,如下所示:

q1 = 'What can one catch that is not thrown?'
a1 = 'A cold'
q2 = 'If you had only one match and entered a dark room containing an oil lamp, some kindling wood, and a newspaper, which would you light first?'
a2= 'The match'
q3 = 'Some months have 31 days, others have 30 days, but how many have 28 days?'
a3= 'All the months'
import random
quizzes = [q1, q2, q3]  #catagorise to quizzes
guesses = 3    
for answer in random.choice(quizzes):
# limits to 3 guesses
random.choice(quizzes)
asking = input('Your Answer is?n')
if   quizzes == q1 and asking == 'A cold':
print( 'Bingo!!')
break
elif   quizzes == q2 and asking == 'The match':
print( 'Bingo!!')
break
elif   quizzes == q3 and asking == 'All the months':
print( 'Bingo!!')
break
elif   guesses <=1:
print( 'Sorry, you are reached the maximum guesses. Bye~now~')
exit()

else:
guesses -= 1        #reducing the max. guesses of 3 to 2 to 1
print( "Sorry, it's incorrect.")

result = asking

最新更新