当用户输入可能为假时,为什么我的 while 循环会重复为真?

Why does my while loop repeat true when the user's input can be false?

我有 2 个包含国家及其首都的列表,我使用 zip 函数将它们分配给彼此。我的程序从列表中随机选择一个国家,我要求用户输入显示的国家/地区的首都。

import random
x = random.randrange(5)

country_names = ['Germany', 'Italy', 'Netherlands', 'France', 'Albania', 'Canada'] 
capital_list = ['Berlin', 'Rome', 'Amsterdam', 'Paris', 'Tirana', 'Ottawa'] 

dictionary_list = [ {"COUNTRY": country, "CAPITAL": capital,} for country, capital in 
zip(country_names, capital_list, )]

item = random.choice(list(country_names))
print(item)

score = 0
while True:

    user_input = input('Name ' + item + "'s" + ' Capital:')
    user_input = str(user_input)

    answer = False
    for i in capital_list:
        if user_input == i:
            answer = True

    if answer:
        print("Correct")
        score = score + 1
    else:
        print("Incorrect")

这是一个示例输出:

Albania
Name Albania's Capital: Tirana
Correct
Name Albania's Capital:

阿尔巴尼亚的首都确实是地拉那,但问题是我的程序总是说 'correct' 即使我输入错误的首都。

我的 while 循环如何实际检查我的 dictionary_list 并给出正确或错误的答案?如果我的程序不再说“命名阿尔巴尼亚的首都”,我该如何重复该过程?

这里有多个问题。最重要的是,你有

    answer = False
    for i in capital_list:
        if user_input == i:
            answer = True

此代码只查看大写字母列表中的每个大写字母,returns如果用户键入的内容在该列表中,则为真。你不用努力去看看它是否是正确的国家。

更好的数据结构可能是字典,其中键是国家,值是首都:

dictionary_list = [ country: capital for country, capital in zip(...)]

那你可以写

item = random.choice(list(country_names))
expected_answer = dictionary_list[item]

只有 正确答案是 expected_answer

这会满足您的要求:

import random

country_names = ['Germany', 'Italy', 'Netherlands', 'France', 'Albania', 'Canada'] 
capital_list = ['Berlin', 'Rome', 'Amsterdam', 'Paris', 'Tirana', 'Ottawa'] 

dictionary = dict(zip(country_names, capital_list))

score = 0

while True:
    item = random.choice(list(country_names))
    print(item)

    user_input = input('Name ' + item + "'s capital:")

    if dictionary[item] == user_input:
        print("Correct")
        score = score + 1
    else:
        print("Incorrect")