编辑:谢谢你的帮助
所以我在一个初级班,没有太多经验,我遇到了这个问题: 我试图让比赛重复五次,我想发生的是
Player inputs choice
Game spits out result
Move onto round 2
Ask for choice again
Game spits out result... etc
但最终发生的是
Player inputs choice
Game spits out result
Move onto round 2
Program asks for choice (I think)
The if/elif is completely disregarded after round 1 as in whatever I input spits no result
Can hit enter five times before program ends
我在这里的挑战是在尽可能简洁的同时做到这一点,因为我可以做到,但最终的程序会非常长,非常难看
无论如何,要问一个特定的问题,是否有可能像这样重复使用同一个变量五次?为什么在第一轮之后完全忽略了if/else
import random
cpu_choice = ["rock","paper","scissors","dynamite"]
for i in range(5):
choice = input().lower().strip("!.?")
cpu_choice = random.choice(cpu_choice)
if "rock" in choice:
if cpu_choice == "rock":
print("It's a tie!")
elif cpu_choice == "scissors":
print("Dang, I lost!")
elif cpu_choice == "paper" or cpu_choice == "dynamite":
print("Haha! I won!")
elif "paper" in choice:
if cpu_choice == "rock":
print("Dang, I lost!")
elif cpu_choice == "paper":
print("It's a tie!")
elif cpu_choice == "scissors" or cpu_choice == "dynamite":
print("Haha! I won!")
elif "scissors" in choice:
if cpu_choice == "rock":
print("Haha! I won!")
elif cpu_choice == "scissors":
print("It's a tie!")
elif cpu_choice == "paper" or cpu_choice == "dynamite":
print("Dang, I lost!")
elif "dynamite" in choice:
if cpu_choice == "scissors":
print("Dang, I lost!")
elif cpu_choice == "dynamite":
print("It's a tie!")
elif cpu_choice == "paper" or cpu_choice == "rock":
print("Haha! I won!")
else:
print("Please use rock, paper, scissors, or dynamite!")
```
代码的问题是这一行:
cpu_choice = random.choice(cpu_choice)
。从列表中选择一个对象,然后将其保存在cpu_选项中换句话说,在第一轮之后,您无法访问cpu_选项本身,因为您在上一轮中覆盖了它。诀窍很简单;更改变量名:
我刚刚在您的cpu列表名称中添加了一个
2
我最初发布了一个答案。几分钟后,有4个答案,都说了同样的话。我曾想过删除我的答案,或者干脆留下它,但我认为最好通过提供一个增强的答案来为提问者和社区提供更多的东西
正如其他答案所指出的那样,您的问题在于使用
cpu_choice
变量有两个目的,这破坏了程序的逻辑。你可以从其他答案中获得更多细节当你成为一名更好的程序员时,你会学到一件事,那就是认识到你什么时候有可以消除的重复。我们称之为“干燥”或“不要重复自己”原则。这是代码的一个明显特征…有四个几乎相同的代码块,唯一的区别是某些字符串常量的特定值
在这种情况下,您将了解到您想要参数化重复的代码,以便只需要该代码的一个副本。这不仅可以节省屏幕上的时间和空间,还可以生成更易于维护的代码。如果您想更改处理用户输入值与计算机选择值比较的逻辑,您必须在四个位置进行更改。如果您将代码缩减为一个块,那么您只需进行一次更改
下面是一个版本的代码,它根据DRY原则将四个代码块减少为一个。它还有一些其他的增强功能。它会提示用户,以便他们知道要输入什么。它将根据用户需要进行任意多轮游戏,用户可以按Return退出游戏,而无需输入任何字母:
以下是示例运行的情况:
我希望这能通过教你干燥原理来帮助你
您将cpu_选项用于两种不同的事情。第一次,它是cpu拥有的潜在选择列表。但随后,您将其重新定义为cpu实际选择的结果。这意味着(假设cpu在第一次迭代中选择了rock),在第二次迭代中,您有“cpu_choice=random.choice(“rock”)”,因为python将字符串视为列表,所以它将输出“r”、“o”、“c”或“k”。您不会因此收到错误消息,因为您的内部if语句中没有else语句
只需将第二行重命名为潜在的_选项,就可以了
相关问题 更多 >
编程相关推荐