如何解决二进制学习程序中随机整数重复出题的问题
问题排查:二进制训练程序重复出题的原因及修复
核心问题分析
你程序里重复出题的根源在于判断逻辑和存储内容的类型不匹配:
- 用
random.randint(0,15)生成的是整数类型的十进制数字(比如5) - 但调用
conversion(binaire[number])得到的是字符串类型的数字(比如"5"),并将这个字符串存入binaire_deja_fait列表 - 检查重复时,用整数
number去字符串列表里查找,自然找不到已存在的项,导致重复生成同一个数字
修复方案
保持判断和存储的类型一致即可,两种简单修复方式:
方式一:直接存储整数
无需调用conversion函数,直接把生成的整数number添加到已完成列表:
# 替换原代码中add=conversion(...)和append的两行 binaire_deja_fait.append(number)
方式二:检查时统一为字符串类型
如果一定要存储字符串,就在检查重复时把整数number转为字符串:
# 修改existe函数的调用行 test = existe(binaire_deja_fait, str(number))
可选优化建议
你的代码可以进一步简化,提升效率和可读性:
- 用字典替代冗长的
conversion函数:bin_to_dec = {"0000": "0", "0001": "1", ..., "1111": "15"},直接通过键值对映射 - 用
random.shuffle打乱数字列表,避免循环生成随机数的低效写法:
def apprendre_binaire(): numbers = list(range(16)) random.shuffle(numbers) binaire = ["0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"] print("Début du programme d'entrainement\n") for number in numbers: print("Convertir", number, "en binaire :\n") answer = input() if answer == binaire[number]: print("Juste\n") else: print("Faux, seconde chance :\n") answer = input() if answer == binaire[number]: print("Juste\n") else: print("Faux, la bonne réponse était", binaire[number], "\n") print("Fin du programme d'entrainement")
内容的提问来源于stack exchange,提问作者Martin Fisher
相关产品推荐
相关产品推荐

