2016-02-27 81 views
1

我遇到了一個關於我的Rock,Paper,Scissors for Python編程的問題。我的問題發生在有平局的時候。當出現平局時,我的節目應該在領帶的if語句中進入一個while循環,並再次向玩家重新提出同樣的問題,搖滾,紙張或剪刀,直到它退出領帶。我附上的鏈接問題的圖像:Python:Rock Paper剪刀While Loop問題

在第5輪:你可以看到這個問題。

我正在編程類的介紹,所以我仍然是一個初學者,我不知道我做錯了什麼。

Rock,Paper,Scissors遊戲的Python程序。

import random 

def rock_paper_scissors(): 
playerscore = 0 
computerscore = 0 
rounds = input('\nHow many points does it take to win?: ') 
count = 1 
while playerscore or computerscore != int(rounds): 
    print('\n********************* ROUND #',count,'*********************') 
    player = input('\nPick your throw: [r]ock, [p]aper, or [s]cissors?: ') 
    computerthrow = random.randint(0,2) 
    if (computerthrow == 0): 
     computer = "rock" 
     computer = 'r' 
    elif (computerthrow == 1): 
     computer = "paper" 
     computer = 'p' 
    elif (computerthrow == 2): 
     computer = "scissors" 
     computer = 's' 
    if (player == computer): 
     print('Tie!') 
     while (player == computer): 
      player = input('\nPick your throw: [r]ock, [p]aper, or [s]cissors?: ') 
      computerthrow = random.randint(0,2) 
      if (computerthrow == 0): 
       computer = "rock" 
       computer = 'r' 
      elif (computerthrow == 1): 
       computer = "paper" 
       computer = 'p' 
      elif (computerthrow == 2): 
       computer = "scissors" 
       computer = 's'  
      print(computer) 
    elif (player == 'r'): 
     if (computer == "p"): 
      print('Computer threw paper, you lose!') 
      computerscore=computerscore+1 
     else: 
      print('Computer threw scissors, you win!') 
      playerscore = playerscore+1 
     #count = count + 1 
    elif (player == 'p'): 
     if (computer == "r"): 
      print('Computer threw rock, you win!') 
      playerscore = playerscore+1 
     else: 
      print('Computer threw scissors, you lose!') 
      computerscore=computerscore+1 
     #count = count + 1 
    elif (player == 's'): 
     if (computer == "p"): 
      print('Computer threw paper, you win!') 
      playerscore = playerscore+1 
     else: 
      print('Computer threw rock, you lose!') 
      computerscore=computerscore+1 
    count = count + 1 
    print('\nYour score: ',playerscore) 
    print('Computer''s score: ',computerscore,'\n') 
print('********************* GAME OVER ********************') 

def main(): 
print('ROCK PAPER SCISSORS in Python') 
print() 
print('Rules: 1) Rock wins over Scissors.') 
print('  2) Scissors wins over Paper.') 
print('  3) Paper wins over Rock.') 

rock_paper_scissors() 

main() 
+0

http://imgur.com/GNKJiNY 對不起,這裏是鏈接問題 – CoTaNgO

回答

1

你的問題來自於你構造你的控制語句的方式(if,elif,else)。當你在同時循環中輸入你的領帶時,你會不斷運行它,直到有人獲勝,而且看起來它沒有問題。問題是,一旦你這樣做,python解釋器會跳過該控制塊中的所有elif和else語句(如果我說如果x == 3:執行此操作:這樣做)我不希望python跟隨否則條件如果x確實== 3)。對不起,如果這是令人困惑的,長話短說,你需要確保即使當你的領帶塊被執行時,你仍然繼續進行得分輪,並開始一個新的。簡單的做法是將elif(player ==「r」)更改爲if語句。這樣,解釋者將得分控制序列視爲自己的區塊,並且一旦你分配了每個球員的投球,它就會被執行。

例子:

def f(x): 
    if (x == 0): 
     print("1") 
     x += 1 
    elif (x == 1): 
     print("2") 
    print("Done!") 

def g(x): 
    if (x == 0): 
     print("1") 
     x += 1 
    if (x == 1): 
     print("2") 
    print("Done!") 

如果你調用F(0): Python會打印出1,然後完成!

如果你打電話給g(0): Python會打印出1然後2然後完成!

+1

因此,我應該只是擺脫我作爲一個整體的領帶塊while循環?我只是因爲你說的話而感到困惑,因爲我對編程真的很陌生,對於我來說這是一種令人困惑的理解。我知道問題在於while循環沒有退出。無論如何,我可以挽救和編輯領帶區內的while循環,讓它留下來嗎?已經感謝您的幫助! – CoTaNgO

+0

JK LOL。你對你的解釋很有幫助。我的閱讀不好。 – CoTaNgO

0

你的直接問題是,你有一個處理代碼,在同一個if/elif鏈中與其他評分處理相同。

你這樣說:

if tied 
    stuff 
elif player == r 
    ... 

其結果是,當有扳平比分正確循環,直到有沒有打領帶。但是,跳過更新分數的代碼,因爲這是/ elif/else的工作原理!

立即解決將打破,如果/ elif的鏈條,並把領帶處理到一個單獨的,如果塊:

if tied: 
    loop until not tied 

# now do scoring 
if player == 'r': 
    ... etc 

雖這麼說,讓我補充一些事情:

  1. 你是同一個變量分配兩個值,按順序:

    computer = 'rock' 
    computer = 'r' 
    

    這不起作用,因爲第二個會覆蓋第一個。您應該刪除每對中的第一行。

  2. 你應該寫一個函數,反覆要求用戶選擇一個,直到它得到岩石,紙張或剪刀。使用一個while循環。

  3. random module中有一個函數會從列表,元組或字符串中選取一個項目並將其返回。你可以用它來讓電腦直接選擇r,p,s。

  4. 您可以通過提前確定結果來簡化您的代碼。假設你先選擇電腦。那麼如果電腦選擇'r',你就知道'p'是勝利而's'是輸。存放贏/一對變量失去選秀權,以及您所有的測試都可以歸結到一個測試:

    computer = computer_pick() 
    if computer == 'r': 
        winner = 'p' 
        computer = 'rock' 
    elif computer == 'p': 
    ... 
    
    player = player_pick() 
    if tied ... 
    
    if player == winner: 
        print("Computer picked", computer, "- you win!") 
    else: 
        ... 
    
+0

我的while循環仍然存在問題。當我提交r,s或p的回覆時,它不會提交我輸了,贏了還是並列。它看起來像我原來的帖子中的圖片中的第5輪。你看到我的循環有什麼問題嗎? – CoTaNgO

+0

你編輯了你的代碼嗎?它看起來一樣。 –

+0

我懂了!謝謝你的幫助。我沒有編輯它。我在這裏相當新。 :d – CoTaNgO