Python 生成不包含某些值的随机整数

Python 生成不包含某些值的随机整数,python,random,Python,Random,我制作了一个简单的代码来生成1111111和999997之间的随机7位数 import random key = random.randint(1111111, 9999997) print(key) 我需要这个数字不包含0、8或9作为最后一位数字。它还需要被21整除。我怎样才能做到这一点?您循环直到您的号码符合您的条件,然后中断: import random while True: key = random.randint(1111111, 9999997)

我制作了一个简单的代码来生成1111111和999997之间的随机7位数

import random

key = random.randint(1111111, 9999997)

print(key)

我需要这个数字不包含0、8或9作为最后一位数字。它还需要被21整除。我怎样才能做到这一点?

您循环直到您的号码符合您的条件,然后中断:

import random

while True:     
    key = random.randint(1111111, 9999997)
    if key % 21 == 0 and str(key)[-1] not in "089":
        break

print(key)
第一行使用带条件的
if
的列表理解来生成符合条件的所有数字的列表。请注意,
range
的第二个参数必须比所需的最后一个数字大一个。要获取数字的最后一位数字,可以使用模运算符
%
和10:
i%10
给出
i
的最后一位小数。同样地,
i%21==0
告诉您这个数字是否被21平均除


一旦你有了这份清单,你只需从清单中挑选一个数字。

你试图解决的实际目标是什么?您知道如何测试一个数字是否“不包含0、8或9作为最后一位数字”并且“可被21整除”?在较小范围内生成一个随机数,然后与21相乘并检查是否满足限制条件。如果没有,请重复。请解释您的代码以及它是如何解决问题的question@OphirCarmi具有适当命名的简单代码不需要太多解释。第一行使用问题中发布的标准生成可接受数字的列表。第二行随机选择这些数字中的一个。回答“只需要一行简单的代码”,通常需要一个解释,对于初学者,甚至是被问过的人。此外,虽然我们很容易阅读,“simple”行实际上是由复合语句组成的&如果不滚动,甚至无法阅读。阅读英语几乎总是比将代码翻译成英语容易。最后,它从一个非常高的代表性用户那里树立了一个如此傲慢和敌对的糟糕榜样。简单的句子是友好的,有助于理解。如果Q是如此简单,它是否已经有了一个现有的答案?或者最好留下评论。@SherylHohman不必对回答者那么苛刻。毕竟,他是自愿给出正确、优雅解决方案的人,并且在具体要求时也提供了解释。然而,在我看来,对所采取的方法缺乏一点讨论。计算1800万div不是免费的,在phyton中更是如此。另一方面,这是一种确保保存分发的简单方法。这种关于正反两方面的讨论有利于回答。@L.Riemer感谢你的辩护,但评论者有一个观点。我曾希望代码能为自己说话,但事实显然并非如此。我认为,正是出于这个原因,指南特别不鼓励只使用代码的答案。我还没有讨论这种方法与其他方法之间的权衡。
valid_numbers = [i for i in range(1111111, 9999997+1) if (i % 10 != 0) and (i % 10 != 8) and (i % 10 != 9) and (i % 21 == 0)]
key = random.choice(valid_numbers)