【问题标题】:How to create list of 15-digit numbers with condition?如何创建有条件的 15 位数字列表?
【发布时间】:2020-10-14 16:28:30
【问题描述】:

我想创建随机 20 个 15 位数字的列表,每个 15 位数字必须遵循 1 条规则。

规则是我希望这个 15 位数字由 5 个 3 位数字组成,其中 第一个数字 + 第二个数字 = 第三个数字 或者如果前两个数字的总和更大大于 10 则 第三位必须为,等于前两位数字之和的 第二位 例如,如果第一位为 5,第二位为 8,则第三位必须为 3因为 5 + 8 = 13。

我编写的代码使用相同的规则用 15 位数字填充列表,但它只适用于前三位。

import random as rd
def numchoose(start, end):
arr=[]
num=0
while num<20:
   a=(rd.randint(start, end))
   if int(str(a)[0]) + int(str(a)[1]) == int(str(a)[2]):
       arr.append(a)
       num+=1
   elif int(str(a)[0]) + int(str(a)[1]) > 10 and int(str(a)[2]) == int(str(int(str(a)[0]) +
int(str(a)[1]))[1])  :
      arr.append(a)
      num+=1
   else: continue


print(numchoose(100000000000000, 999999999999999))

如何编写此代码,以使整个 15 位数字由遵循规定规则的 3 位数字组成,并且前三位数字不是唯一遵循规则的数字?

【问题讨论】:

  • 更多地使用字符串。创建一个函数,根据转换为字符串的规则返回 3 位数字。调用这些函数 5 次,连接字符串,最后将其转换为 int。
  • 这对我来说似乎不是很随机。您也许可以列出所有符合规则的 3 位数组合,并使用random.choice 从中挑选。

标签: python list random numbers


【解决方案1】:

这似乎可行,但我将大数字替换为您希望数字的长度。

import random as rd

def numchoose(len):
    number = ""
    for i in range(int(len/3)):
        a = rd.randint(0, 9)

        while i == 0 and a == 0:
            a = rd.randint(0, 9)

        b = rd.randint(0, 9)
        c = a + b

        if c >= 10:
            c -= 10

        number += str(a) + str(b) + str(c)

    return int(number)

print(numchoose(15))

【讨论】:

  • 如果i == 1 and a == 0 是为了什么?
  • 代码似乎运行良好。我只是不完全了解它是如何工作的。你能再深入一点解释一下吗?
  • 这可以防止第一个数字为 0,但可能有更好的方法来做到这一点
  • @Evorage 的答案更紧凑,但我认为如果你想让 0 成为数字,它也不会起作用。不能在他的帖子上写这个,没有足够的声誉:)
  • @eav28 “如果有部分代码不清楚,就写witch part,我可以尽量解释清楚。”这就是为什么不鼓励仅使用代码的答案。虽然仅代码的答案可能会回答问题,但您可以通过为代码提供上下文、此代码有效的原因以及对文档的一些参考以供进一步阅读,从而显着提高答案的质量。来自How to Answer“简洁是可以接受的,但更全面的解释更好。”
【解决方案2】:

比@eav28 更紧凑,但感谢他们首先回答:

import random

def NumberGen(Length):
    Number = ""
    for X in range(int(Length // 3)):
        A = random.randint(0, 9)
##      To drop leading zero's:
##      if X == 0 and A == 0:
##          A = random.randint(1, 9)
        B = random.randint(0, 9)
        C = A + B
        if C > 9:
            C -= 10
        Number += str(A) + str(B) + str(C)
    return Number

print(NumberGen(15))

我希望这能回答你的问题

【讨论】:

  • 如果你想避免前导零,你可以做一个简单的修改:A = random.randint(0 if Number else 1, 9)
  • @MarkRansom 前导 0 有什么问题?他们肯定想要正确的随机数
  • 他们还希望数字具有特定的长度,并且通常会删除前导零。另一个答案有这个假设,我只是想指出,如果这真的成为一个要求,那么修改你的答案是多么容易。
  • @MarkRansom 我修改了答案,希望你喜欢?
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 2021-01-27
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多