【问题标题】:how to generate a list of 3-digit numbers?如何生成 3 位数字列表?
【发布时间】:2018-07-23 23:20:52
【问题描述】:

如何生成三位数字之和等于 17 的数字列表?

例如假设号码XYZ,我们将有X+Y+Z=17

这是我走了多远:

numbers = list(range(1, 1000))

【问题讨论】:

  • 三个3位正数之和怎么可能是17?
  • 001, 002, 003, 004. 等
  • 像 197 和 188 和....
  • @AmmarMohammed 那是数字的总和;不是您在问题中所说的数字之和。
  • @Ev.Kounis 这个问题很清楚。我不知道你为什么认为它模棱两可。

标签: python math random numbers probability


【解决方案1】:

您似乎希望 digits 的总和为 17,而不是 numbers 的总和为 “但我想要第一个数字 +第二个数字 + 第三个数字 = 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]

【讨论】:

  • 你缺少像098这样的东西
  • @Bentaye 这不是 3 位数字。因为如果是这样,通过添加适当的填充,它也将同时是一个 n 位数字。那不可能。
  • 在我看来,098 可以简化为 98,这是一个 2 位数字。由于 OP 的错误开始 (numbers = list(range(1, 1000))),您的方向很糟糕。
【解决方案2】:

您可以先生成一个符合您的条件的数字列表,例如,

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】:

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

    #   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
    

    【讨论】:

      【解决方案4】:
      ##单个号码的数字总和 def sum_digits(n): s = 0 而n: s += n % 10 n //= 10 返回 如果 __name__ == '__main__': ## 声明一个列表 列表 = 列表() ## 迭代 100 - 1000 对于范围内的 x(100,1000): tmp = sum_digits(x) ## 总和等于 17 时添加到列表 如果 tmp == 17: alist.append(x) 打印列表

      【讨论】:

        【解决方案5】:

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

        我们开始,选择总和在 8 到 17 之间的 2 个数字,然后计算所需的第 3 个数字加起来为 17。

        前2位数字的和需要是:

        • 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]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多