我正在嘗試撰寫這個問題和系統,讓您可以在正確或錯誤的時候提出多個問題,直到您沒有罷工為止。起初,我寫
question = "Name something a baby does that would be unacceptable in a roommate."
possible_answers = [("CRY/AT 3 A.M.", 39), ("POO/WET SELF", 28), ("PUKE/ON ME", 9), ("BURP", 8), ("MAKE MESS/TOSS FOOD", 5), ("FART", 4), ("PEE IN MY FACE", 3), ("NURSE/ON MY NIPS", 2)]
player_strikes_left = 3
player_score = 0
player_answer = input("player answer: ")
player_answer = player_answer.upper()
while player_strikes_left > 0:
for item in possible_answers:
points = item[1]
is_correct = (player_answer in answer)
if is_correct:
print("true")
player_score = player_score points
else:
player_strikes_left -= 1
print(f'player score: {player_score}, player strikes left: {player_strikes_left}')
但是由于“for”回圈,它會在每個可能的答案中搜索答案并減少每個錯誤答案的分數,因此我將其更改為:
question = "Name something a baby does that would be unacceptable in a roommate."
possible_answers = [("CRY/AT 3 A.M.", 39), ("POO/WET SELF", 28), ("PUKE/ON ME", 9), ("BURP", 8), ("MAKE MESS/TOSS FOOD", 5), ("FART", 4), ("PEE IN MY FACE", 3), ("NURSE/ON MY NIPS", 2)]
player_strikes_left = 3
player_score = 0
while player_strikes_left > 0:
player_answer = input("player answer: ")
player_answer = player_answer.upper()
item = possible_answers
answer = item[0]
points = item[1]
is_correct = (player_answer in answer)
if is_correct:
player_score = player_score points
else:
player_strikes_left -= 1
while player_strikes_left == 0:
break
但現在它不是加分。我可以寫 3 次我的答案,直到 player_strikes_left 達到 0 并且代碼在此之后結束,因為它不接受我的任何答案是正確的。我猜這可能是因為代碼的點和答案部分是如何搞砸的,因為那里不再有 for 回圈。有誰知道我能做什么以及如何解決這個問題?先謝謝了。
uj5u.com熱心網友回復:
因為answer = item[0]anditem = possible_answers的值answer是("CRY/AT 3 A.M.", 39),所以你最終只檢查玩家的答案是否等于“CRY/AT 3 AM”或 39。
更好的方法可能是將可能的答案及其分數存盤為像possible_answers = {"CRY/AT 3 A.M.": 39, ...). 然后is_correct = player_answer in possible_answers和score = possible_answers[player_answer]。您也可以使用.get()dict的方法,如果沒有匹配,您可以給出默認值。
https://docs.python.org/3/library/stdtypes.html#dict
uj5u.com熱心網友回復:
你不會提高分數,因為你這樣做
item = possible_answers
answer = item[0]
將 item 更改為可能答案的串列,然后選擇 this ( ("CRY/AT 3 A.M.", 39))的第一個元素。
你會想做類似的事情
question = "Name something a baby does that would be unacceptable in a roommate."
possible_answers = [("CRY/AT 3 A.M.", 39), ("POO/WET SELF", 28), ("PUKE/ON ME", 9), ("BURP", 8), ("MAKE MESS/TOSS FOOD", 5), ("FART", 4), ("PEE IN MY FACE", 3), ("NURSE/ON MY NIPS", 2)]
player_strikes_left = 3
player_score = 0
player_answer = input("player answer: ")
player_answer = player_answer.upper()
while player_strikes_left > 0:
none_correct = True
for item in possible_answers:
points = item[1]
is_correct = (player_answer in answer)
if is_correct:
print("true")
player_score = player_score points
none_correct = False
if none_correct:
player_strikes_left -= 1
print(f'player score: {player_score}, player strikes left: {player_strikes_left}')
uj5u.com熱心網友回復:
def main():
print("Name something a baby does that would be unacceptable in a roommate.")
possible_answers = [("CRY/AT 3 A.M.", 39), ("POO/WET SELF", 28), ("PUKE/ON ME", 9), ("BURP", 8),
("MAKE MESS/TOSS FOOD", 5), ("FART", 4), ("PEE IN MY FACE", 3), ("NURSE/ON MY NIPS", 2)]
player_strikes_left = 3
player_score = 0
match = False
while player_strikes_left > 0:
player_answer = input("player answer: ")
player_answer = player_answer.upper()
for item in possible_answers:
answer = item[0]
if player_answer in answer:
player_score = item[1]
match = True
break
if not match:
player_strikes_left -= 1
match = False
print(player_score)
if __name__ == "__main__":
main()
該腳本執行的似乎是您的示例代碼的意圖。它會檢查是否可以在其中一個示例答案中找到玩家的答案,但是單詞不必匹配,并且當輸入一個也出現在其中一個示例答案中的單個字母時,程式也會增加分數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352899.html
下一篇:for回圈嵌套在for回圈中
