无法解决我的while和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
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循环了。有人知道我能做什么以及如何解决这个问题吗?事先谢谢。

因为answer = item[0]item = possible_answers,所以answer的值是("CRY/AT 3 A.M.", 39),所以您最终只检查玩家的答案是否等于"CRY/凌晨3点";或39。

更好的方法可能是将可能的答案及其分数存储为类似possible_answers = {"CRY/AT 3 A.M.": 39, ...)的字典。然后是CCD_ 6和CCD_。您也可以使用dict的.get()方法,如果不匹配,可以提供默认值。

https://docs.python.org/3/library/stdtypes.html#dict

你不会因为做而增加分数

item = possible_answers
answer = item[0]

在其中,您将条目更改为可能答案的列表,然后选择其中的第一个元素(("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}')
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()

这个脚本执行的似乎是示例代码的意图。它检查是否能在其中一个示例答案中找到玩家的答案,但单词不必匹配,并且当输入一个也存在于其中一个实例答案中的单个字母时,程序还会增加分数。

最新更新