如何仅使用randint()生成指定数量的对应倍数随机数?
原有代码的问题
- Python 中
for i in range(aantal)是迭代预先生成的固定整数序列,循环过程中手动修改i的值不会影响下一次迭代的i取值,你写的i -= 1不会生效,循环只会固定执行aantal次。如果这aantal次生成的随机数都不满足倍数条件,最终输出的列表自然为空,极端情况下甚至会出现长度不足要求的问题。 - 不要用
list作为变量名,它是Python内置的列表类型关键字,覆盖后会影响后续列表相关操作的正常使用。
正确实现方案
方案1:保持原筛选逻辑,改用while循环控制数量
如果要求必须保持“从1-100随机抽数、符合条件才保留”的逻辑,把循环替换为while,通过判断结果列表的长度来控制是否继续生成即可:
from random import randint result_list = [] aantal = int(input("请问你需要多少个随机数? ")) veelvoud = int(input("请问需要是哪个整数的倍数? ")) # 提前判断合法性,避免死循环 if veelvoud > 100: print("1-100范围内不存在该数的倍数,请输入更小的数值") else: while len(result_list) < aantal: getal = randint(1, 100) if getal % veelvoud == 0: result_list.append(getal) print(result_list)
方案2:直接生成符合条件的随机数(效率更高)
如果允许优化逻辑,可以直接生成随机乘数再乘以目标倍数,每次生成的数天然符合要求,完全不需要无效筛选,也仅用到了要求的randint()函数:
from random import randint result_list = [] aantal = int(input("请问你需要多少个随机数? ")) veelvoud = int(input("请问需要是哪个整数的倍数? ")) max_multiplier = 100 // veelvoud if max_multiplier < 1: print("1-100范围内不存在该数的倍数,请输入更小的数值") else: for _ in range(aantal): # 先生成随机乘数,乘以目标倍数得到1-100范围内的符合要求的随机数 getal = randint(1, max_multiplier) * veelvoud result_list.append(getal) print(result_list)
内容的提问来源于stack exchange,提问作者Xattics
相关产品推荐
相关产品推荐

