Python 如何生成3位数字的列表?
我如何生成一个3位数字的列表,其数字之和等于17 例如,假设numberPython 如何生成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或更少,因
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))
,您的方向变得不正确。