2013-09-27 72 views
-1

我試圖在Python中製作一個搖滾,紙張,剪刀的遊戲,我想我幾乎擁有它,但是我的代碼並沒有給我任何回報。我希望也許有人能幫助我。我的代碼將從沒有問題開始,並從用戶那裏獲得輸入,但是一旦用戶放入了一些內容,只是在幕後進行比較,並且不會返回一個聲明。誰能幫忙? (這也是一個賦值爲我的計算機科學類,所以我的老師是老生常談,並希望我們能夠運行它從Python,Ruby,Java的)Python中的岩石,紙張,剪刀3

def pythonRubyJava(): 
     Python=1 
     Ruby=2 
     Java=3 
     mylist3=[1,2,3] 
     cpu=random.choice(mylist3) 
     player1=input("Python, Ruby, or Java? ") 
     if (cpu == Python) and (player1 == Python): 
      print("The computer chose Python and you chose Python") 
      print("You tied.") 
     elif (cpu == Python) and (player1 == Ruby): 
      print("The computer chose Python and you chose Ruby") 
      print("You lost.") 
     elif (cpu == Python) and (player1 == Java): 
      print("The computer chose Python and you chose Java") 
      print("You won!") 
     elif (cpu == Ruby) and (player1 == Ruby): 
      print("The computer chose Ruby and you chose Ruby") 
      print("You tied.") 
     elif (cpu == Ruby) and (player1 == Python): 
      print("The computer chose Ruby and you chose Python") 
      print("You won!") 
     elif (cpu == Ruby) and (player1 == Java): 
      print("The computer chose Ruby and you chose Java") 
      print("you lost.") 
     elif (cpu == Java) and (player1 == Java): 
      print("The computer chose Java and you chose Java") 
      print("You tied.") 
     elif (cpu == Java) and (player1 == Python): 
      print("The computer chose Java and you chose Python") 
      print("You lost.") 
     elif (cpu == Java) and (player1 == Ruby): 
      print("The computer chose Java and you chose Ruby") 
      print("You won!") 
     while (player1 == Python,Ruby,Java): 
      print(pythonRubyJava()) 
+0

Downvote for「Python 4」 –

+0

說謊!讓我對Python 4000 –

+0

@ user2799617有點興奮已經糾正,所以downvote已經過時了。 – glglgl

回答

2

其一,用戶輸入返回要麼"Python"的字符串, "Ruby""Java"。做比較時,您將字符串與整數進行比較,因此"Python" == Python將永遠不會成立,因爲"Python" != 1

此外,你想避免像這樣遞歸調用函數。把外部的while循環放在一個不同的真值條件下。傳遞函數內部的錯誤檢查。

而且,你的代碼可能是更具可讀性,如果你只是

  • 保留用戶和CPU的選擇爲字符串
  • 測試if cpu.lower() == player1.strip().lower()
  • 如果爲真,print("Computer chose {} and you chose {}".format(cpu))以「你贏了!」
  • 如果爲false,則打印「你丟失了!」的相同內容。
0

1)將while循環移出函數。 2)也許嘗試分配值的選擇和比較他們每個人的「權重」,讓你「不重複自己」中的行

東西:

class Language: 
    def __init__(self, name, weight, choice_number) 
     self.name, self.weight, self.choice_number = name, weight, choice_number 

available_choices = [Language('python, 3, 1'), Language('ruby', 2, 2), 
        Language('java', 1, 3)] 

然後,可以比較重量(按名稱搜索)並打印正確的名稱。 此外,這是Python 3,而不是4

如果PC選擇JAVA,你選擇PYTHON,你贏了! xD

0

由於這是一個編程任務,我不打算指出確切的解決方案。但是,您似乎錯過了一些縮進問題。

在定義函數(def pythonRubyJava():)後會運行它嗎?函數的最後兩行在函數定義內部進行遞歸調用,在一段時間內。

總之,你沒有看到任何回頭,因爲目前沒有代碼正在運行(函數是定義的,是的,但從來沒有調用過)。