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

如何修复随机整数生成函数并构建随机名称与整数映射的Python字典

问题修复与实现方案

一、第二个随机整数生成函数的问题修复

你写的numbers函数运行异常的核心原因有4个:

  • 变量名冲突:函数参数n代表整数位数,但循环内部又把生成的数字字符串赋值给了n,第一次循环后原始的位数参数就被覆盖了,后续循环的位数会完全错误
  • 方法调用错误:randint是random模块下的方法,你没有直接导入randint,直接调用会触发NameError
  • 无法保证生成足够的唯一值:用for循环生成k次的逻辑,遇到重复随机数时集合会自动去重,最终返回的元素数量会小于k
  • 类型不符合需求:当前返回的是字符串类型的数字,你的需求要求值为整数类型

修复后的代码如下:

import random
def numbers(k: int, n: int) -> set:
    """
    生成k个唯一的n位随机整数
    k: 生成的整数个数
    n: 每个整数的位数
    """
    seen = set()
    join = ''.join
    add = seen.add
    while len(seen) < k:
        # 变量名改成num_str避免覆盖参数n
        num_str = join([str(random.randint(0,9)) for _ in range(n)])
        # 转成int再存入集合
        add(int(num_str))
    return seen

二、结合两个函数生成目标字典

你可以分别调用名称生成函数和数字生成函数,得到长度一致的两个集合后,直接用zip打包转为字典即可。注意需要提前导入string模块供名称生成函数使用,完整可运行代码如下:

import string
import random

def unique_names(k: int, ntokens: int,
               pool: str=string.ascii_letters) -> set:
    """
    Generate a set of unique string tokens.
    k: Length of each token
    ntokens: Number of tokens
    pool: Iterable of characters to choose from
    
    """
    seen = set()
    join = ''.join
    add = seen.add
    while len(seen) < ntokens:
        token = join(random.choices(pool, k=k))
        add(token)
    return seen

def numbers(k: int, n: int) -> set:
    """
    生成k个唯一的n位随机整数
    k: 生成的整数个数
    n: 每个整数的位数
    """
    seen = set()
    join = ''.join
    add = seen.add
    while len(seen) < k:
        num_str = join([str(random.randint(0,9)) for _ in range(n)])
        add(int(num_str))
    return seen

# 调用示例:生成4个键值对,键长度为5,值为6位整数
name_count = 4
key_length = 5
num_length = 6
names = unique_names(key_length, name_count)
nums = numbers(name_count, num_length)
result_dict = dict(zip(names, nums))
print(result_dict)

运行输出示例:

{'XnJxQ': 872031, 'bRpGq': 129457, 'TtmYz': 398406, 'KsRvH': 572910}

内容的提问来源于stack exchange,提问作者pouchewar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:18:04