Python 如何生成3位数字的列表?

Python 如何生成3位数字的列表?,python,math,random,numbers,probability,Python,Math,Random,Numbers,Probability,我如何生成一个3位数字的列表,其数字之和等于17 例如,假设numberXYZ,我们将得到X+Y+Z=17 这就是我取得的成绩: numbers = list(range(1, 1000)) 免责声明: 此方法将是随机的,您可以有重复的。如果您想要一个完整的唯一数字列表,它将不起作用,您可能更喜欢Ev。Kounis'解决方案 在这里,我们选择2位数字,其总和介于8和17之间,然后计算所需的第三位数字,相加为17 前两位数字之和必须为: 8或更多,因为最后一个数字最多可以有9个 17或更少,因

我如何生成一个3位数字的列表,其数字之和等于17

例如,假设number
XYZ
,我们将得到
X+Y+Z=17

这就是我取得的成绩:

numbers = list(range(1, 1000))

免责声明: 此方法将是随机的,您可以有重复的。如果您想要一个完整的唯一数字列表,它将不起作用,您可能更喜欢Ev。Kounis'解决方案

在这里,我们选择2位数字,其总和介于8和17之间,然后计算所需的第三位数字,相加为17

前两位数字之和必须为:

  • 8或更多,因为最后一个数字最多可以有9个

  • 17或更少,因为最后一位数字不能为负数

这样:

import random 

def getAnotherNumber():
    d1 = 0
    d2 = 0
    while 17 < d1 + d2 or  d1 + d2 < 8:
        d1 = random.randrange(1, 10)
        d2 = random.randrange(1, 10)
    d3 = 17-d1-d2
    return  100*d1 + 10* d2 + d3

# Make a list of 10 numbers    
list = [getAnotherNumber() for x in range(10)]

print(list)

免责声明: 此方法将是随机的,您可以有重复的。如果您想要一个完整的唯一数字列表,它将不起作用,您可能更喜欢Ev。Kounis'解决方案

在这里,我们选择2位数字,其总和介于8和17之间,然后计算所需的第三位数字,相加为17

前两位数字之和必须为:

  • 8或更多,因为最后一个数字最多可以有9个

  • 17或更少,因为最后一位数字不能为负数

这样:

import random 

def getAnotherNumber():
    d1 = 0
    d2 = 0
    while 17 < d1 + d2 or  d1 + d2 < 8:
        d1 = random.randrange(1, 10)
        d2 = random.randrange(1, 10)
    d3 = 17-d1-d2
    return  100*d1 + 10* d2 + d3

# Make a list of 10 numbers    
list = [getAnotherNumber() for x in range(10)]

print(list)

似乎您希望数字之和为17,而不是数字之和,正如“但我希望第一个数字+第二个数字+第三个数字=17”所暗示的那样

那么,看看这个:

result = [x for x in range(100, 1000) if sum(int(y) for y in str(x))==17]
print(result)  # [179, 188, 197, 269, ..., 962, 971, 980]

似乎您希望数字之和为17,而不是数字之和,正如“但我希望第一个数字+第二个数字+第三个数字=17”所暗示的那样

那么,看看这个:

result = [x for x in range(100, 1000) if sum(int(y) for y in str(x))==17]
print(result)  # [179, 188, 197, 269, ..., 962, 971, 980]

如果你需要更多的评论,和/或如果我所做的不是你要求的(不知何故),告诉我。:)


如果你需要更多的评论,和/或如果我所做的不是你要求的(不知何故),告诉我。:)

##单个数字的位数之和 定义和数字(n): s=0 而n: s+=n%10 n/=10 返回s 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': ##申报清单 alist=list() ##从100到1000迭代 对于范围内的x(1001000): tmp=数字总和(x) ##一旦其总和等于17,则添加到列表中 如果tmp==17: alist.append(x) 印刷主义者 ##单个数字的位数之和 定义和数字(n): s=0 而n: s+=n%10 n/=10 返回s 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': ##申报清单 alist=list() ##从100到1000迭代 对于范围内的x(1001000): tmp=数字总和(x) ##一旦其总和等于17,则添加到列表中 如果tmp==17: alist.append(x) 印刷主义者
您可以首先生成一个与您的条件匹配的数字列表,如

test_list = [value for value in range(100, 1000, 1) if sum(int(a) for a in str(value)) is 17]
因此,要使其成为随机列表,可以使用
random
package

random.shuffle(test_list)
因此,
test\u list
将是一个完全随机的列表,其中包含所有可能的三位数。因此,这可能是生成符合您的条件的随机列表的最快方法。()


希望这有帮助

您可以首先生成与您的条件匹配的数字列表,如

test_list = [value for value in range(100, 1000, 1) if sum(int(a) for a in str(value)) is 17]
因此,要使其成为随机列表,可以使用
random
package

random.shuffle(test_list)
因此,
test\u list
将是一个完全随机的列表,其中包含所有可能的三位数。因此,这可能是生成符合您的条件的随机列表的最快方法。()


希望这有帮助

三位三位数的正数之和怎么可能是17?001、002、003、004。等,如197和188以及……@AmmarMohammed,即数字的总和;不是你在问题中所说的数字总和。@Ev.Kounis这个问题很清楚。我不知道你为什么认为它模棱两可。三位三位数的正数之和怎么可能是17?001,002,003,004。等,如197和188以及……@AmmarMohammed,即数字的总和;不是你在问题中所说的数字总和。@Ev.Kounis这个问题很清楚。我不知道你为什么认为它模棱两可。你缺少了像
098
@Bentaye这样的不是三位数的数字。因为如果是,通过添加适当的填充,它同时也是一个n位数字。这是不可能的。在我看来,
098
可以减少到
98
,这是一个两位数的数字。由于OP的错误开始(
numbers=list(范围(1000))
),您的方向性变差了。您缺少的不是3位数字的
098
@Bentaye之类的东西。因为如果是,通过添加适当的填充,它同时也是一个n位数字。这是不可能的。在我看来,
098
可以减少到
98
,这是一个两位数的数字。由于OP的错误开始(
numbers=list(范围(1000))
,您的方向变得不正确。