我必须在一个石头,纸和剪刀的游戏上做一个项目,到目前为止,我的代码是游戏的完整代码,但是我的教授不喜欢它,因为它太多余了。是否有任何方法可以缩短它或使其变得更简单?
import random
while True:
bot = random.choice(["Rock", "Paper", "Scissors"]).lower()
user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: \n ").lower()
if user_choice == bot:
print("We tied! I chose", bot," and you chose", user_choice)
elif user_choice == "rock":
if bot == "paper":
print("You lose! I chose", bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors":
print("You win! I chose", bot," and you chose", user_choice , ", Rock beat scissors!")
elif user_choice == "paper":
if bot == "rock":
print("You win! I chose",bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors:":
print("You lose! I chose", bot," and you chose", user_choice , ", Scissors beats paper")
elif user_choice == "scissors":
if bot == "paper":
print("You win! I chose", bot," and you chose",user_choice, ", Scissors beats paper")
elif bot == "rock":
print("You Lose! I chose", bot," and you chose", user_choice , ", Rock beats scissors")
else:
print("Invalid Entry, you typed:", user_choice, ", Please try again: ")
if user_choice == '-1':
print("You selected -1 to exit, Goodbye!")
exit()
有时当我输入纸张作为输入时,我也没有得到输出,代码只是循环回到开头,有人知道为什么会这样吗?
示例: 在“石头”,“纸张”和“剪刀”之间选择,或选择-1退出:
岩石
您赢了!我选择了剪刀,然后您选择了Rock,Rock beat剪刀!
在石头,纸张和剪刀之间选择,或选择-1退出:
纸
我们并列!我选择了纸张,而您选择了纸张
在石头,纸张和剪刀之间选择,或选择-1退出:
纸
在岩石,纸张和剪刀之间选择,或选择-1退出: ^没有输出
剪刀
您输了!我选择了岩石,而您选择了剪刀,岩石击败了剪刀
在石头,纸张和剪刀之间选择,或选择-1退出:
纸
在石头,纸张和剪刀之间选择,或选择-1退出:
^没有输出
答案 0 :(得分:1)
我建议使用模运算符并列举您的选择。 (rock(0)=>纸张(1)=>剪刀(2))
获胜条件是user_choice-机器人选择%3 ==1。
答案 1 :(得分:1)
如何使我的Rock,Paper和剪刀游戏代码减少冗余?
首先,我们只能枚举用户获胜或平局的选择,并隐含用户失去的情况。例如
if user_choice == bot:
result = "draw"
elif (user_choice == "rock") and (bot == "scissors"):
result = "win";
elif (user_choice == "paper") and (bot == "rock"):
result = "win";
elif (user_choice == "scissors") and (bot == "paper"):
result = "win";
else:
result = "lose";
第二,由于所有消息都是基于论坛的,因此通过替换选择,我们可以将消息生成与逻辑分离。我没有为此编写代码,因为我没有为您完成所有工作。
第三,我们可以使用字典来表示给定用户选择的获胜条件。像
if user_choice == bot:
result = "draw"
elif wincondition[user_choice] == bot:
result = "win";
else:
result = "lose";
有时当我输入纸张作为输入时,我也没有得到输出,代码只是循环回到开头,有人知道为什么会这样吗?
您的代码elif bot == "scissors:":
中有一个冒号冒号
答案 2 :(得分:0)
可以减少冗余的一种方法是,不使用所有if else语句,而是创建一个对获胜者进行响应的函数,而不是针对每个组合键入每种情况。
答案 3 :(得分:0)
您可以参数化打印的文本:
player_wins = "You win! I chose {bot_choice} and you chose {player_choice}. {player_choice} beats {bot_choice}!"
player_looses = "You lose! I chose {bot_choice} and you chose {player_choice}. {bot_choice} beats {player_choice}!"
print(player_wins.format(bot_choice="Paper", player_choice="scissors")
您也可以缩短if-else
子句。我只是给你一个提示,但是如果您将“ rock”,“ paper”,“ scissorss”的选择分别视为0、1和2,并将机器人和玩家的选择总和相加,就会发现一种模式。模运算符起作用。