[英]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_answer
和number
來解決此問題。 您還需要在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.