我正在编写我的第一个节目,这是一个'琐事'风格的游戏。根据您选择的轮次提出问题,因此选择第1轮可以提供列表1中的问题,列表2中的第2轮问题等。
我写了一段代码,允许你在游戏中间更换回合,但如果你这样做,只有第一个问题来自新一轮,任何后续问题都会回复到上一回合。
所以:
我不知道为什么,我似乎无法找到任何理由应该这样做。
带有问题的代码的精简版本是:
round = raw_input ("Round?: ")
def turn(round):
print "Current Round = " + round
if round == "1":
print (choice (ssq1))
play_again = raw_input("Again?: ")
repeat(play_again)
elif round == "2":
print (choice (ssq2))
play_again = raw_input("Again?: ")
repeat(play_again)
def repeat(play_again):
if play_again == "Yes" or play_again == "Y":
turn(round)
elif play_again == "New":
new_round = True
new_turn(new_round)
def new_turn(new_round):
round = raw_input("Okay, Which round?: ")
turn(round)
from random import choice
ssq1 = ["Round1Q1", "Round1Q2", "Round1Q3"]
ssq2 = ["Round2Q1", "Round2Q2", "Round2Q3"]
turn(round)
答案 0 :(得分:2)
round
中的 repeat()
是全局变量,一开始就设置了该变量。您需要传入当前轮; round
中使用的本地名称turn()
:
repeat(play_again, round)
并在repeat()
函数中使用它作为附加参数:
def repeat(play_again, round):
if play_again == "Yes" or play_again == "Y":
turn(round)
elif play_again == "New":
new_round = True
new_turn(new_round)
你的递归函数相当复杂。请考虑使用while
循环:
def turn(round):
print "Current Round = " + round
if round == "1":
print (choice (ssq1))
elif round == "2":
print (choice (ssq2))
round = None
while True:
if round is None:
round = raw_input ("Round?: ")
turn(round)
play_again = raw_input("Again?: ")
if play_again == 'New':
# clear round so you are asked again
round = None
elif play_again not in ('Yes', 'Y'):
# end the game
break
现在turn()
功能仅处理游戏的转变。重复,要求进行什么回合和结束游戏都是在一个无尽的while
循环中处理的。 break
语句用于结束该循环。
您可以考虑的另一项改进是使用字典或列表来保存您的回合,而不是按顺序命名变量:
round_questions = {
"1": ["Round1Q1", "Round1Q2", "Round1Q3"],
"2": ["Round2Q1", "Round2Q2", "Round2Q3"],
}
这消除了使用大量条件的需要;您只需按键检索正确的列表:
def turn(round):
if round in round_questions:
print "Current Round = " + round
ssq = round_questions[round]
print choice(ssq)
else:
print "No such round", round
这使得处理错误输入也更容易;如果拾取的回合不是字典中的键,则第一个if
语句将为false,您可以改为输出错误消息。
请注意,使用round
作为变量名称, 屏蔽built-in function by the same name。在这里没问题,你没有使用任何需要舍入的数学,但如果你确实需要使用该函数,请考虑到这一点。