You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python猜首都游戏while循环判断正误出错且重复提问同一国家如何解决

问题原因
  • 正误判断逻辑错误:原代码只校验用户输入是否属于全局首都列表,没有和当前提问的国家做对应绑定,只要输入任意一个存在的首都都会被判定为正确,完全没有用到你提前生成的配对字典。
  • 重复提问同一国家:随机抽取国家的代码写在了while循环外部,程序仅会在启动时抽一次国家,循环全程都用同一个国家提问。就算把抽取逻辑移到循环内,没有去重机制的话也还是有可能抽到重复的国家。
修改后完整代码
import random

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

# 直接生成国家-首都映射字典,查询匹配更方便
country_capital_dict = dict(zip(country_names, capital_list))
# 打乱国家列表顺序,逐个提问保证不重复
to_ask_countries = list(country_capital_dict.keys())
random.shuffle(to_ask_countries)

score = 0
total_questions = len(to_ask_countries)

# 列表为空时代表所有国家都问完,自动结束循环
while to_ask_countries:
    # 弹出当前要提问的国家,自动从待提问列表移除,不会重复
    current_country = to_ask_countries.pop()
    user_input = input(f"Name {current_country}'s Capital:").strip()
    
    # 直接匹配当前国家对应的正确首都
    if user_input == country_capital_dict[current_country]:
        print("Correct")
        score += 1
    else:
        print(f"Incorrect, the correct answer is {country_capital_dict[current_country]}")

# 答题结束输出得分
print(f"\nAll questions finished! Your score: {score}/{total_questions}")
核心修改说明
  1. 用dict(zip())直接生成国家和首都的映射字典,替代原有的列表套字典结构,查询对应关系更高效
  2. 提前打乱所有国家的顺序,逐个弹出提问,天然保证每个国家只会被问到一次,所有国家问完自动结束循环
  3. 校验逻辑改为直接比对用户输入和当前提问国家对应的正确首都,不会出现误判
  4. 补充了答题结束后的得分统计,也可以根据需求修改为循环无限出题、答错就停止的逻辑

内容的提问来源于stack exchange,提问作者Fazli Berisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:06