python - 如何使用不可停止的循环修复此代码?
问题描述
我将随机进行 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)
,什么都不做;该random.choice()
函数从列表中返回一个随机项。如果你没有对返回的值做任何事情,比如打印它,那么什么都不会发生。
您喜欢的原始行if quizzes == q1 and asking == 'A cold':
不起作用,因为quizzes
您的测验列表是,所以检查quizzes == q1
将始终是False
. 在我的代码中,由于我正在循环通过quizzes
via for quiz in quizzes
,这意味着quiz
在我的代码中是一个来自 的测验字符串quizzes
,所以当我这样做时quiz == q1
,它会正确地将当前quiz
与q1
或q2
进行比较q3
。
我注意到您在 和 中定义了您的答案,a1
因此您可以简化代码并将其用于比较,例如而不是。a2
a3
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.")
推荐阅读
- java - 获取R2DBC连接Java Spring失败
- flutter - 使用 Flutter for Mediawiki 进行客户端登录
- python - 如何检测价格何时高于先前的高点
- c# - Serilog 属性解构不能始终如一地工作?
- pandas - 向列添加唯一 id 并在来自同一 pandas 数据帧的唯一 id 中包含一个值
- javascript - 查找行数组中最后一列的最后一个值
- css - 如何使svg文本响应
- python - 使用字符串和 int 错误从一年创建日期 - PYTHON
- laravel - Laravel 模型函数最佳价格
- c++ - 有没有办法显示正在使用的未初始化变量?