我已经制作了这个代码来模拟一个石头剪刀游戏。我有一个主游戏的程序,当我自己运行它而没有if循环结束时,它的工作原理。但是,当我尝试验证用户条目是否为数字时,它不会打印正确的消息。这是完整的代码:
import random
def game(choice):
number = random.randint(1,3)
if choice == 1 and number == 2:
print("You lose.")
if choice == 1 and number ==3:
print("You win.")
if choice == 1 and number == 1:
print("It is a draw")
if choice == 2 and number == 3:
print("You lose.")
if choice == 2 and number ==1:
print("You win.")
if choice == 2 and number == 2:
print("It is a draw")
if choice == 3 and number == 1:
print("You lose.")
if choice == 3 and number ==2:
print("You win.")
if choice == 3 and number == 3:
print("It is a draw")
x = input("Choose 1 (rock), 2 (paper) or 3 (scissors).")
digit = x.isdigit()
if digit == True:
game(x)
顺便说一句,没有错误信息,程序就行不通了!
答案 0 :(得分:0)
首先,您的代码存在一些问题。如果您想忽略,请跳至错误处理以回答您的问题。你会在那里找到它。
您的变量不会告诉读取您代码的人他们是什么。如果你向某人展示number
这个词,他们就不会知道这是计算机在石头剪刀中选择的东西。与choice
(选择谁?)相同,甚至更为x
。那么为什么我们不能分别命名computer_choice
,user_choice
和choice
。我知道这些打字时间要长一些,但是为了更清晰一点,值得牺牲一些额外的击键。另请注意,我按照通常的Python标准使用了snake_case
名称格式。
game()
你的game
函数可以做一些重做。您只需要一个通用的配方'输赢。在这种情况下,失败的时间是(感谢@Brett Beatty)if computer_choice == (user_choice + 1) % 3
,绘图是computer_choice == user_choice
,获胜是else
。此外,当您的代码正在播放时,用户只知道他们是赢了还是输了,而不是计算机选择了什么,所以为了更加清晰,我添加了一个列表和另一个print()
行。此功能对测试代码也很有用。此外,使用从零开始的变量值,例如computer_choice
和user_choice
变量。将值转换为列表索引时,这非常有用。下面是我所编写的代码的修订版本,其中包含了上述所有要点(我还将其作为一个函数,如下所示 - 我认为它看起来更好):
import random
def game(user_choice):
user_choice -= 1
rps = ["Rock", "Paper", "Scissors"]
computer_choice = random.randint(0, 2)
print("You: {} Computer: {}".format(rps[user_choice], rps[computer_choice]))
if user_choice == computer_choice:
return 0
elif computer_choice == (user_choice + 1) % 3:
return -1
else:
return 1
要确保用户输入整数,您必须在输入语句周围添加int()
。但是,如果用户输入的值不是整数,那么单独返回ValueError
,这是一个问题。但是,有一种方法可以使用try: except: else:
块来解决此问题,如下所示。这是你需要决定值是否为整数,它还会打印正确的消息。我也认为这是你想要的if digit == True
(仅供参考,如果你这样做,你只需要if digit
)。
def main():
while True:
try:
value = int(input("Choose 1 (rock), 2 (paper) or 3 (scissors):"))
except ValueError: # If any part of the code in the try block raises a ValueError
print("Not an integer")
else: # If error is not raised
if not 1 <= value <= 3: # If value is not between 1 and 3
print("Must be between 1 and 3")
else:
result = game(value) # sets result to return value from game()
break
if result == 1:
print("You Win")
elif result == -1:
print("You Lose")
else:
print("It's a Draw")
if loop
&#39;?让我说清楚。没有if loop
这样的东西!如果某个条件为if
,则True
语句会运行代码 ** ONCE ** 。我想你想要的是一个while
循环。只要某个条件为True,它就会运行代码 ** REPEATEDLY ** 。在下面的代码中,我创建了一个while True
循环,每次用户输入"y"
时都会运行代码,如果没有,则会在循环中运行break
。
另外,使用if __name__ == '__main__'
。它存在于Python中,因此Python文件既可以作为可重用模块,也可以作为独立程序。如果你想看起来很聪明,它看起来也会更复杂。
if __name__ == '__main__':
while True:
main()
if input("Again? Yes(y) No(Anything else): ").lower() != 'y':
break
示例输出(忽略颜色):
Choose 1 (rock), 2 (paper) or 3 (scissors):1
You: Rock Computer: Scissors
You Win
Again? Yes(y) No(Anything else): y
Choose 1 (rock), 2 (paper) or 3 (scissors):3
You: Scissors Computer: Scissors
It's a Draw
Again? Yes(y) No(Anything else): y
Choose 1 (rock), 2 (paper) or 3 (scissors):2
You: Paper Computer: Paper
It's a Draw
Again? Yes(y) No(Anything else): n
Process finished with exit code 0
此外,对于OP,如果您还没有,我建议您下载Pycharm。它完全免费,使编码更容易。它也改善了演示。它了解了上面提到的一些事情,并保持您的代码符合PEP指南。