我正在写我的第一个程序,这是一个“琐事”风格的游戏。根据您选择的回合来询问问题,因此选择第一回合将为您提供列表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)
最佳答案
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。在这里很好,您没有使用任何需要四舍五入的数学,但是如果您确实需要使用该函数,请考虑到这一点。关于python - 新值(value)未保留,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24099673/