作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个可以找到 multiplicative persistence 的程序在随机的数字中。然而,这个程序必须处理大数(>10233)。但是,当我使用 random.randint(10**233, 10**400)
时,我不禁注意到绝大多数数字都包含零,这将导致 0 乘法持久性。在我的算法中,我试图通过以下方法摆脱这些数字:
def find_new_i():
i = 10
while "0" in str(i):
i = random.randint(10**233,10**400)
return i
但是,这种方法真的很慢,并且不能很快地生成数字。
最佳答案
在这么大的数字中出现 0 的几率非常高,这就是 while
的原因。循环很可能会重复很多次。
最好用 1 到 9 之间的随机数字替换任何零。
def find_new_i():
i = random.randint(10 ** 233, 10 ** 400)
i = int(''.join(str(random.randint(1, 9)) if d == '0' else d for d in str(i)))
return i
或者如果您不介意将所有零替换为相同的随机数字:
i = int(str(i).replace('0', str(random.randint(1, 9))))
在这个阶段,简单地“手动”构建数字可能更有意义(但是这种方法比上述方法慢约 4 倍,请参阅评论):
def find_new_i():
return int(''.join(str(random.randint(1, 9))
for _ in range(random.randint(233, 400))))
关于python - 如何生成不包含零的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63960554/
我是一名优秀的程序员,十分优秀!