3 回答

TA貢獻1752條經驗 獲得超4個贊
一些旁注建議:
要檢查變量是否是一系列字符串之一,您可以通過執(zhí)行以下操作使其更加緊湊:
if user_pick.lower() in ["rock", "r"]:
無需將 int 轉換為 int :)
int(1) == 1
endgame
充當旗幟 - 游戲是否結束。True
因此,使用布爾值 - /False
- 比使用 int更有意義。
現(xiàn)在您的主要問題是您的代碼endgame
根據player_wins
和設置變量comp_wins
。當您開始新游戲時,這些值會保留舊值,因此一輪游戲結束后立即再次結束。只需重置代碼最后部分中的所有關鍵變量:
endgame = False
...
if player_wins >= 3:
endgame = True
...
if comp_wins >= 3:
endgame = True
...
if endgame:
user_pick = input("Do you want to play again (y/n)?")
if user_pick.lower() in ["y", "yes"]:
endgame = False
player_wins = 0
comp_wins = 0
else:
break
附注建議:
通常重復的if//樹結構elif可以else被減少。在其他語言中,您有這樣的switch語句 - 這有點讓代碼看起來相同,只是與if/else. 在 Python 中,您通常可以將大多數if樹轉換為字典中的選擇。所以你的comp_option可以改為:
def comp_option():
comp_pick = randint(1,5)
options = {1: 'r', 2: 'p', 3: 'sc', 4: 'l', 5: 'sp'}
return options[comp_pick]

TA貢獻1831條經驗 獲得超4個贊
我認為您必須添加一些額外的語句,以便在用戶選擇重新啟動游戲時重置游戲內的統(tǒng)計數據。就像是:
if int(endgame) == int(1):
user_pick = input("Do you want to play again (y/n)?")
if user_pick in ["Y", "y", "yes", "Yes"]:
comp_wins = 0
player_wins = 0
endgame = 0
continue

TA貢獻1963條經驗 獲得超6個贊
你發(fā)現(xiàn)問題了!您必須重置殘局計數。為此,只需將endgame
變量放入循環(huán)中while True
(在開頭)
while True: endgame = 0
這應該有效。
添加回答
舉報