如何实现字典元素随机无重复遍历,避免重复提问?
实现无重复随机提问字典中的国家首都问题
你的代码出现重复提问的核心原因:每次循环都通过random.choice(list(capitals.keys()))从全部国家列表里随机选,没有排除已提问过的国家,再加上循环次数等于字典的长度,必然会出现重复提问,甚至可能有国家被多次选中、部分国家从未被问到的情况。
要实现无重复的随机提问,正确思路是先把所有国家的列表打乱,再按打乱后的顺序逐个提问,确保每个国家仅被问到一次。
修改后的代码如下:
import random capitals = { "Canada": "Toronto", "Spain": "Madrid", "Germany": "Berlin", "Belgium": "Brussels", "Australia": "Sydney", } # 提取所有国家转为列表并打乱顺序 countries = list(capitals.keys()) random.shuffle(countries) # 遍历打乱后的列表逐个提问 for country in countries: capital = capitals[country] question = input(f"What is the capital of {country}? : ") if question == capital: print("Congratulations!\n") else: print(f"Wrong! The correct answer: {capital}\n")
关键修改说明
- 先用
list(capitals.keys())提取所有国家到列表,再通过random.shuffle()直接打乱列表顺序,保证每个国家仅出现一次。 - 遍历打乱后的列表而非原字典的items,彻底避免了每次循环随机选国家导致的重复问题。
这样每次运行程序时,所有国家都会被问到一次,且提问顺序完全随机,不会出现重复。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

