gpt4 book ai didi

python - 新值(value)未被保留

转载 作者:行者123 更新时间:2023-12-01 05:11:43 24 4
gpt4 key购买 nike

我正在编写我的第一个程序,它是一个“琐事”风格的游戏。问题是根据您选择的轮次提出的,因此选择第 1 轮将为您提供列表 1 中的问题,第 2 轮为您提供列表 2 中的问题,等等。

我编写了一段代码,允许您在游戏中更改回合,但如果您这样做,则只有新回合提出的第一个问题来自新回合,任何后续提出的问题都会恢复到上一轮。

所以:

  1. 我选择第 1 轮。
  2. 获取第一轮的提问。
  3. 切换到第 2 轮。
  4. 在第二轮中被问到一个问题。
  5. 此后的所有问题都回到第一轮。

我不确定为什么,而且我似乎找不到任何理由应该这样做。

有问题的代码的精简版本是:

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)

最佳答案

repeat() 中的

round全局变量,即在开始时设置的变量。您需要传递当前轮次; turn() 中使用的本地名称 round:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com