Python化学知识测试程序优化:实现已使用随机数不重复的方法
解决化学元素测试程序的重复随机问题并优化代码
嘿,我看到你这个化学知识测试程序的问题啦——现在每次随机选元素会重复,而且代码里一堆if判断也有点冗余,我来帮你搞定这两个问题!
核心思路:避免重复抽取的方法
要让每个元素只出现一次,我们可以先把所有要测试的元素编号(1-20)放到一个列表里,每次从这个列表里随机选择一个元素,然后把它从列表中移除,这样后续就不会再抽到它了。直到列表为空,所有元素就都测试过一遍啦。
额外优化:用字典简化冗余的if判断
你原来的代码里用了大量if来映射编号到元素名、判断原子量,这太繁琐了。我们可以用Python的字典来存储元素的编号、名称和原子量的对应关系,这样代码会简洁很多,后续维护也方便。
修改后的完整代码
from random import choice # 用字典存储元素信息:键是编号,值是(元素名称, 原子量) elements = { 1: ('Hidro', '1'), 2: ('Heli', '4'), 3: ('Liti', '7'), 4: ('Beri', '9'), 5: ('Bo', '11'), 6: ('Cacbon', '12'), 7: ('Nitơ', '14'), 8: ('Oxi', '16'), 9: ('Flo', '19'), 10: ('Neon', '20'), 11: ('Natri', '23'), 12: ('Magie', '24'), 13: ('Nhôm', '27'), 14: ('Silic', '28'), 15: ('Photpho', '31'), 16: ('Lưu Huỳnh', '32'), 17: ('Clo', '35,5'), 18: ('Agon', '39,9'), 19: ('Kali', '39'), 20: ('Canxi', '40') } # 创建可用元素编号的列表,初始包含1-20 available_elements = list(elements.keys()) while available_elements: # 只要还有未测试的元素就继续循环 # 从可用列表中随机选一个编号 selected_num = choice(available_elements) # 从可用列表中移除这个编号,避免重复 available_elements.remove(selected_num) element_name, correct_weight = elements[selected_num] print(f'Nguyên tố: {element_name}') choose = input('Nguyên Tử Khối: ') if choose == 'End': exit() if choose == correct_weight: print('Đúng!') else: print('Học lại đi mày') print('所有元素都测试完啦!')
关键部分解释
- 元素字典
elements:把每个编号对应的元素名和正确原子量都存在这里,替代了原来几十行的if判断,想修改或添加元素时直接改字典就行。 - 可用元素列表
available_elements:一开始包含所有1-20的编号,每次选完一个就移除,确保不会重复。 random.choice():用来从可用列表里随机选一个元素,比randint更适合这种从列表取随机项的场景。- 循环逻辑:用
while available_elements判断,只要列表不为空就继续测试,直到所有元素都被选过。
这样修改后,不仅解决了重复抽取的问题,代码也变得更简洁易读啦!
内容的提问来源于stack exchange,提问作者Hồ Quang Vinh
相关产品推荐
相关产品推荐

