首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个随机生成器有时返回3位数而不是4位?

为什么这个随机生成器有时返回3位数而不是4位?
EN

Stack Overflow用户
提问于 2020-07-20 02:40:43
回答 3查看 85关注 0票数 2
代码语言:javascript
运行
复制
if choice == '1':
    print('Your card has been created')
card = create_card()
print(f'Your card number:\n{card}')
pin = int(''.join(f'{random.randint(0, 9)}' for _ in range(4)))
print(f'Your card PIN:\n{pin}\n')
cards.append([card, pin])

请有人解释一下,为什么上面的代码有时会生成一个3位数字,而不是4位数字?例如:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-20 02:50:16

在您的逻辑中,可以生成一个以0开头的字符串。如果将前导0数字字符串传递给int(),则忽略前导0:

代码语言:javascript
运行
复制
print(int("0999"))

输出

代码语言:javascript
运行
复制
999

要解决这个问题,只需更改范围开始值即可。

代码语言:javascript
运行
复制
pin = int(''.join(f'{random.randint(1, 9)}' for _ in range(4)))

编辑:为了向自己证明这一点,请打印生成的字符串和int()函数的结果,如下所示。

代码语言:javascript
运行
复制
for i in range(100):
    st = ''.join(f'{random.randint(0, 9)}' for _ in range(4))
    print(st, int(st))
票数 1
EN

Stack Overflow用户

发布于 2020-07-20 03:02:14

其他人解释了为什么你有时会得到三位数(甚至两位数甚至一位数)的结果。您可以将此视为格式问题--打印带前导零到指定宽度的数字。Python确实有支持这一功能的特性。

但我敦促大家认识到,问题确实在于,数据实际上并不是一个数字。相反,它是一串数字,所有这些数字都是重要的。那么,最简单和最好的方法就是简单地将保持为字符串,而不是将其转换为数字。

票数 3
EN

Stack Overflow用户

发布于 2020-07-20 02:48:39

随机生成器有时不会返回四位数,因为它将零作为第一个数字。像0322这样的数字是由随机生成器创建的,并且它正在被转换为322。由于前面的零,这个生成器还可以生成两位数和一位数.如果你想要四位数的数字,只使用pin = random.randint(1000, 9999)。如果您想要带前导零的数字,请使用pin = ''.join(f'{random.randint(0, 1)}' for _ in range(4))。这就保持了前导零。保持引脚为字符串阻止前导零被移除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62987871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档