簡體   English   中英

你如何輸入一個字符串然后給它分配一個數字

[英]How do you input a string then assign a number to it

您好,我正在做一些個人 python 學習,我有一個練習問題,我正在努力解決。 主要目標是用電腦玩剪刀石頭布。 您應該輸入“paper”“rock”或“Scissors”作為用戶答案,計算機將隨機生成一個 1-3 的數字,對應於特定的選擇。 如果用戶輸入 1-3 的數字,我可以讓程序正常工作,但這不是問題所要問的。 我覺得我已經嘗試了所有方法,例如將每個名稱分配給相應的數字,創建一個 if then 語句,然后將選擇重新分配給數值,但它總是在輸入提示后卡住並且不會繼續使用代碼. 我知道問題很可能出在第 6 行,因為那是它執行的最后一個位置。不知道如何解決它。 另外,如果有人可以給我一些關於這如何看起來更清潔的指示,或者這是否大致是在效率和清潔度方面應該看起來的樣子。 請記住,我沒有學到任何像字典列表等太高級的東西。 現在應該使用基本的東西來解決問題。 謝謝!

import random

def main():
    global user_answer
    print('lets play paper rock scissors')
    number = comp_answer()
    user_answer = int(input('What do you choose?')) <--- # i know the change would be 
    while number = comp_answer():                        # here.... maybe str(input(' ')) 
        tie(number)                                      # then define the choices? tried 
    paper_rock_scissors(number)                          # that and failed not sure if i'm 
                                                         # doing it wrong.

def comp_answer():
    number = random.randint(1,4)
    return number

def tie(number):
    print("its a tie!")
    print ("tie breaker")
    user_answer = input('What do you choose?')

def paper_rock_scissors(number):

    if number == 3 and user_answer == 1:
        print("computer: scissors")
        print("you: ",user_answer )
        print("you won!")
        print("rocks smashes scissors")

    elif number == 3 and user_answer == 2:
        print("computer: scissors")
        print("you: ",user_answer )
        print("Game over")
        print("scissors cuts paper")

    elif number == 1 and user_answer == 3:
        print("computer: rock")
        print("you: ",user_answer )
        print("Game over")
        print("rocks smashes scissors")
    elif number == 2 and user_answer == 3:
        print("computer: paper")
        print("you: ",user_answer )
        print("you won!")
        print("scissors cuts paper")

    elif number == 1 and user_answer == 2:
        print("computer: rock")
        print("you: ",user_answer )
        print("you won!")
        print("paper covers rock")
    elif user_answer == 1 and number == 2:
        print("computer: paper")
        print("you: ",user_answer )
        print("Game over")
        print("paper covers rock")
main()

在 while 循環條件中,您不會將用戶的選擇與程序的選擇進行比較。

def main():
    global user_answer
    print('lets play paper rock scissors')
    number = comp_answer()
    user_answer = int(input('What do you choose?'))
    while user_answer == number:
        tie(number)
        number = comp_answer()
    paper_rock_scissors(number)

通過比較user_answernumber來解決此問題。 您還需要在tie中指定user_answer是全局的。 在 while 條件下重新計算comp_answer的事實將使得number在傳遞給rock_paper_scissors時具有不正確的值。 這三個更改應該可以解決問題。

至於清潔度,全局變量通常是不好的做法。 您可以通過將tie(number)更改為user_answer = tie(number)並將user_answer作為參數添加到rock_paper_scissors來更改此設置。 tie function 也沒有使用它的參數,因此很容易將其刪除。

您的程序中的問題在於

"while number = comp_answer():"

它應該是一個“==”進行比較。 “=”用於賦值,這里我們需要的是等於求值。 還,

while number == comp_answer(): 

並不真正等同於領帶。 它只是檢查存儲的值編號是否等於來自 comp_answer() 的 output。 您可能想將“user_input”等同於“number”來檢查是否相同。 PS comp_answer() 應該在 tie function 中再次調用

試試這個:我已經把打印語句放到一個新的 function 中,這使得程序更容易閱讀和更短。

import random

def main():
    global user_answer
    print('lets play paper rock scissors')
    number = comp_answer()
    user_answer = int(input('What do you choose?'))  
    while number == user_answer:                        
        tie()                                       
    paper_rock_scissors(number)                          

def comp_answer():
    number = random.randint(1,4)
    return number

def tie():
    global number
    print("its a tie!")
    print ("tie breaker")
    number = comp_answer()
    user_answer = input('What do you choose?')

def print_ans(computer, user, explanation, win):
    print("computer: ", computer)
    print("you: ", user)
    print(explanation)
    if win:
        print("you won!")
    else:
        print("Game over")

def paper_rock_scissors(number):
    if number == 3:
        if user_answer == 1:
            print_ans("scissors", "rock", "rocks smashes scissors", win=True)
        else:
            print_ans("scissors", "paper", "scissors cut paper", win=False)
    elif number == 1:
        if user_answer == 3:
            print_ans("rock", "scissors", "rocks smashes scissors", win=False)
        else:
            print_ans("rock", "paper", "paper covers rock", win=True)
    else:
        if user_answer == 1:
            print_ans("paper", "rock", "paper covers rock", win=False)
        else:
            print_ans("paper", "scissors", "scissors cut paper", win=True)


main()

如果您希望用戶輸入字符串而不是整數,代碼將看起來像這樣(請注意,我將使用字典,因為它使事情變得更容易,而且我認為每個人都了解它們很重要,所以請閱讀一下在他們):

import random

num_mappings = {"rock":1 , "paper":2 , "scissors":3}

def main():
    global user_answer
    print('lets play paper rock scissors')
    number = comp_answer()
    user = input('What do you choose?') 
    user_answer = num_mappings[user] 
    while number == user_answer:                        
        tie()                                       
    paper_rock_scissors(number)                          

def comp_answer():
    number = random.randint(1,4)
    return number

def tie():
    global number
    print("its a tie!")
    print ("tie breaker")
    number = comp_answer()
    user = input('What do you choose?') 
    user_answer = num_mappings[user]

def print_ans(computer, user, explanation, win):
    print("computer: ", computer)
    print("you: ", user)
    print(explanation)
    if win:
        print("you won!")
    else:
        print("Game over")

def paper_rock_scissors(number):
    if number == 3:
        if user_answer == 1:
            print_ans("scissors", "rock", "rocks smashes scissors", win=True)
        else:
            print_ans("scissors", "paper", "scissors cut paper", win=False)
    elif number == 1:
        if user_answer == 3:
            print_ans("rock", "scissors", "rocks smashes scissors", win=False)
        else:
            print_ans("rock", "paper", "paper covers rock", win=True)
    else:
        if user_answer == 1:
            print_ans("paper", "rock", "paper covers rock", win=False)
        else:
            print_ans("paper", "scissors", "scissors cut paper", win=True)


main()

但是,請記住,如果用戶鍵入“rock”、“paper”或“scissors”以外的任何內容,您的代碼將失敗。 我建議您研究異常處理以更好地掌握和改進這些方面。

暫無
暫無

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

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