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

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('所有元素都测试完啦!')

关键部分解释

  1. 元素字典elements:把每个编号对应的元素名和正确原子量都存在这里,替代了原来几十行的if判断,想修改或添加元素时直接改字典就行。
  2. 可用元素列表available_elements:一开始包含所有1-20的编号,每次选完一个就移除,确保不会重复。
  3. random.choice():用来从可用列表里随机选一个元素,比randint更适合这种从列表取随机项的场景。
  4. 循环逻辑:用while available_elements判断,只要列表不为空就继续测试,直到所有元素都被选过。

这样修改后,不仅解决了重复抽取的问题,代码也变得更简洁易读啦!

内容的提问来源于stack exchange,提问作者Hồ Quang Vinh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:07:47