我要做一个有趣的测试,随机选择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
时,它会正确地将当前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.")
您的问题是猜测的位置。现在它在你的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