2014-10-22 36 views
0

我想添加輸入驗證,以便用戶只能輸入岩石,岩石,紙張,紙張,剪刀或剪刀。我不確定在哪裏添加它,以及如何將它作爲if語句來執行。 任何幫助,不勝感激。當然,我需要完成比賽guess = raw_input('rock, paper or scissors?: ')後後,他們修正他們的答案添加輸入驗證到我的岩石剪刀PYTHON

import random 


def main(): 
    x = random.randint(1, 3) 
    rock = "ROCK, rock" 
    paper = "PAPER, paper" 
    scissors = "SCISSORS, scissors" 
    if x == 1: 
     x = 'ROCK' 
    elif x == 2: 
     x = 'PAPER' 
    elif x == 3: 
     x = 'SCISSORS' 
    guess = raw_input('rock, paper or scissors?: ') 
    print('CPU: ', x, 'Player: ', guess) 
    result = winner(x, guess) 
    if result == 'tie': 
     print('Its a tie try again!') 
     main() 
    else: 
     print(result, 'Wins') 

def winner(x, guess): 
    if guess == 'scissors' and x == 'ROCK': 
     win = 'rock' 
     return win 
    elif guess == 'paper' and x == 'SCISSORS': 
     win = 'scissors' 
     return win 
    elif guess == 'paper' and x == 'ROCK': 
     win = 'paper' 
     return win 
    elif guess == 'rock' and x == 'PAPER': 
     win = 'paper' 
     return win 
    elif guess == 'rock' and x == 'SCISSORS': 
     win = 'rock' 
     return win 
    else: 
     win = 'tie' 
     return win 
if __name__ == '__main__': 
    main() 
+0

是http://stackoverflow.com/questions/26456215/python-3-rock-paper-scissors-issue/26456305任何幫助 – Parker 2014-10-22 00:41:02

+0

您可能要查看python字符串的'lower()'方法。這會簡化你的代碼,例如''rOcK'.lower()=='rock'' – Dan 2014-10-22 00:45:27

回答

2

正確的,你可以用一個簡單的檢查:

if guess not in ('ROCK', 'rock', 'PAPER', 'paper', 'SCISSORS', 'scissors') : ... 

注1: ,而不是處理「搖滾」和「搖滾」等,我建議你用戶輸入轉換爲大寫,而只處理大寫的字符串:

guess = raw_input('rock, paper or scissors?: ') 
guess = guess.upper() 

注2: 我SUG武功你把所有可能的答案的列表:

valid_choices = ('ROCK','PAPER','SCISSORS') 

,然後就去做:

guess = raw_input('rock, paper or scissors?: ') 
guess = guess.upper() 
if guess not in valid_choices : ... #handle error here. 
+0

謝謝,這有幫助。一旦我運行它,我在編輯器 '岩石,紙或剪刀?:貓 請輸入岩石,紙或剪刀: ('CPU:','ROCK','Player:',''貓') 它的領帶再試一次! 搖滾,紙或剪刀?:' 然後它說它是一個領帶,再試一次。我怎麼寫它,所以它不?我將我的代碼添加爲下一個回答 – 2014-10-22 13:18:25

0

如果我跑這一點,並鍵入貓,它會說「輸入石頭紙或剪刀」像它應該但它也說它是一個領帶,這是錯誤的。因此,一個錯誤的輸入之後,應該基本上回到用戶輸入

import random 


def main(): 
    x = random.randint(1, 3) 
    rock = "ROCK, rock" 
    paper = "PAPER, paper" 
    scissors = "SCISSORS, scissors" 
    if x == 1: 
     x = 'ROCK' 
    elif x == 2: 
     x = 'PAPER' 
    elif x == 3: 
     x = 'SCISSORS' 
    guess = raw_input('rock, paper or scissors?: ') 
    if guess not in ('ROCK', 'rock', 'PAPER', 'paper', 'SCISSORS', 'scissors'): 
     print"Please enter rock, paper or scissors:" 


    result = winner(x, guess) 
    print('CPU: ', x, 'Player: ', guess) 
    if result == 'tie': 
     print('Its a tie try again!') 
     main() 
    else: 
     print(result, 'Wins') 

def winner(x, guess): 
    if guess == 'scissors' and x == 'ROCK': 
     win = 'rock' 
     return win 
    elif guess == 'paper' and x == 'SCISSORS': 
     win = 'scissors' 
     return win 
    elif guess == 'paper' and x == 'ROCK': 
     win = 'paper' 
     return win 
    elif guess == 'rock' and x == 'PAPER': 
     win = 'paper' 
     return win 
    elif guess == 'rock' and x == 'SCISSORS': 
     win = 'rock' 
     return win 
    else: 
     win = 'tie' 
     return win 
if __name__ == '__main__': 
    main() 
+0

,這是因爲如果它不是一個有效的選擇,那麼您需要再次提問而不是繼續處理。你需要有一個循環,看看我的其他答案。 – 2014-10-22 17:19:41

0

這是因爲,如果它不是一個有效的選擇,那麼你要問的問題,而不是再次在繼續處理。你需要有一個循環,例如:

valid_choices = ('ROCK','PAPER','SCISSORS') 

while True: 
    guess = raw_input('rock, paper or scissors?: ') 
    guess = guess.upper() 
    if guess in valid_choices : break 

result = winner(x, guess) 
print('CPU: ', x, 'Player: ', guess)