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}")
核心修改说明
- 用
dict(zip())直接生成国家和首都的映射字典,替代原有的列表套字典结构,查询对应关系更高效 - 提前打乱所有国家的顺序,逐个弹出提问,天然保证每个国家只会被问到一次,所有国家问完自动结束循环
- 校验逻辑改为直接比对用户输入和当前提问国家对应的正确首都,不会出现误判
- 补充了答题结束后的得分统计,也可以根据需求修改为循环无限出题、答错就停止的逻辑
内容的提问来源于stack exchange,提问作者Fazli Berisha
相关产品推荐
相关产品推荐

