簡體   English   中英

如何使我的Rock,Paper和剪刀游戲的代碼不那么多余?

[英]How can I make my code for a game of Rock, Paper, and scissors less redundant?

我必須在搖滾,紙張和剪刀游戲上做一個項目,到目前為止我的代碼是游戲的完整代碼,但我的教授不喜歡它,因為它太冗余了。 反正有沒有縮短它或使它更簡單?

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()

有時當我輸入紙張作為我的輸入時,我沒有得到輸出,代碼只是循環回到開頭,有沒有人知道為什么會發生這種情況?

示例:選擇Rock,Paper和Scissors或-1退出:

岩石

你贏了! 我選擇了剪刀,你選擇了搖滾樂,搖滾樂剪刀!

選擇Rock,Paper和Scissors或-1退出:

我們並列! 我選擇紙張而你選擇紙張

選擇Rock,Paper和Scissors或-1退出:

選擇Rock,Paper和Scissors或-1退出:^無輸出

剪刀

你輸了! 我選擇了搖滾,你選擇了剪刀,Rock beats剪刀

選擇Rock,Paper和Scissors或-1退出:

選擇Rock,Paper和Scissors或-1退出:

^ theres沒有輸出

我建議使用模數運算符並枚舉您的選擇。 (rock(0)=>論文(1)=>剪刀(2))

獲勝條件是user_choice - 機器人選擇%3 == 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:":

一種可以減少冗余的方法是,不是使用所有if else語句,而是創建一個函數,該函數將響應發送給誰,而不是為每個組合鍵入每個方案。

您可以參數化打印文本:

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子句。 我只是給你一個提示,但如果你把選擇“搖滾”,“紙”,“剪刀”看作0,1和2,並總結機器人和玩家的選擇,你會發現一個模式。 模運算符起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM