如何生成 3 位数字的列表?
how to generate a list of 3-digit numbers?
如何生成一个 3 位数字的列表,其中数字的总和等于 17?
例如假设数字 XYZ
,我们将有 X+Y+Z=17
这是我得到的结果:
numbers = list(range(1, 1000))
免责声明:
此方法将是随机的,您可以重复使用。如果您想要一个详尽的唯一编号列表,它不会起作用,您可能更喜欢 Ev。 Kounis 的 解决方案。
来,挑2个和在8到17之间的数字,然后计算需要的第3个加起来等于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)
输出如下:
[773, 746, 980, 179, 269, 179, 755, 485, 755, 476]
您似乎希望位数的总和为17,而不是位数的总和为"but I want the first number + the second number + the third number = 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]
如果您需要更多评论,and/or 如果我所做的不是您要求的(不知何故),请告诉我。 :)
# All numbers having 3 digits.
numbers = [x for x in range(100, 1000)]
newList = []
for number in numbers:
# Integer to string.
str_number = str(number)
# Separating digits using strings, and casting result to int.
real_a = int(str_number[0])
real_b = int(str_number[1])
real_c = int(str_number[2])
# Summing, and checking result.
digitsSum = real_a + real_b + real_c
if digitsSum == 17:
newList.append(number)
print newList
## Sum of digits of individual number
def sum_digits(n):
s = 0
while n:
s += n % 10
n //= 10
return s
if __name__ == '__main__':
## Declare a list
alist = list()
## Iterate from 100 - 1000
for x in range(100,1000):
tmp = sum_digits(x)
## Add to list once its sum is equal to 17
if tmp == 17:
alist.append(x)
print alist
您可以先生成一个符合您条件的数字列表,例如,
test_list = [value for value in range(100, 1000, 1) if sum(int(a) for a in str(value)) is 17]
因此,要使其成为随机列表,您可以使用 random
包。
random.shuffle(test_list)
因此 test_list
将是一个完全随机的列表,其中包含所有可能的三位数。所以这可能是生成符合您条件的随机列表的最快方法。 (shuffle)
希望对您有所帮助!
如何生成一个 3 位数字的列表,其中数字的总和等于 17?
例如假设数字 XYZ
,我们将有 X+Y+Z=17
这是我得到的结果:
numbers = list(range(1, 1000))
免责声明: 此方法将是随机的,您可以重复使用。如果您想要一个详尽的唯一编号列表,它不会起作用,您可能更喜欢 Ev。 Kounis 的 解决方案。
来,挑2个和在8到17之间的数字,然后计算需要的第3个加起来等于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)
输出如下:
[773, 746, 980, 179, 269, 179, 755, 485, 755, 476]
您似乎希望位数的总和为17,而不是位数的总和为"but I want the first number + the second number + the third number = 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]
如果您需要更多评论,and/or 如果我所做的不是您要求的(不知何故),请告诉我。 :)
# All numbers having 3 digits.
numbers = [x for x in range(100, 1000)]
newList = []
for number in numbers:
# Integer to string.
str_number = str(number)
# Separating digits using strings, and casting result to int.
real_a = int(str_number[0])
real_b = int(str_number[1])
real_c = int(str_number[2])
# Summing, and checking result.
digitsSum = real_a + real_b + real_c
if digitsSum == 17:
newList.append(number)
print newList
## Sum of digits of individual number def sum_digits(n): s = 0 while n: s += n % 10 n //= 10 return s if __name__ == '__main__': ## Declare a list alist = list() ## Iterate from 100 - 1000 for x in range(100,1000): tmp = sum_digits(x) ## Add to list once its sum is equal to 17 if tmp == 17: alist.append(x) print alist
您可以先生成一个符合您条件的数字列表,例如,
test_list = [value for value in range(100, 1000, 1) if sum(int(a) for a in str(value)) is 17]
因此,要使其成为随机列表,您可以使用 random
包。
random.shuffle(test_list)
因此 test_list
将是一个完全随机的列表,其中包含所有可能的三位数。所以这可能是生成符合您条件的随机列表的最快方法。 (shuffle)
希望对您有所帮助!