【问题标题】:How to create list with 3- digit numbers which first digit + second digit = third digit如何创建具有三位数字的列表,其中第一位数字+第二位数字=第三位数字
【发布时间】:2021-01-27 00:38:23
【问题描述】:

我是 Python 新手,一直在尝试解决这个问题。 我想创建 3 位数字列表,其中 first digit + second digit = third digit 并且如果前两位数字的总和大于 9,我希望该数字的第三位数字是总和的第二位数字。例如。 583,其中 5+8=13,所以最后一位数字是 3。我想要 50 个这样的 3 位数字 这就是我目前所拥有的。

import random as rd

N=50

ar1 = [rd.randint(100, 999) for i in range(N)]

【问题讨论】:

  • 从答案来看,我认为您的问题并没有说得很清楚。如果您展示了您希望的结果,将会有所帮助。
  • 只有 45 个值在 abc 中有 a!=0a+b=c

标签: python list generator


【解决方案1】:

注意

只有 45 个不同的 3 位数字 abc 你有 a!=0a+b=c

以下解决方案使用 limit fo 试图避免无限循环,以防你问太多


要生成一个符合规则的数字,您需要生成 2 位数字,然后检查它们的总和是否小于 10(为一位数字)

a, b = randrange(1, 10), randrange(10)
if a + b < 10:
    # you have the tuple (a, b, a + b)

然后使用循环直到达到极限

def generate(N=50, tries=1000):
    result = set()
    while len(result) != N and tries > 0:
        tries -= 1
        a, b = randrange(1, 10), randrange(10)
        if a + b < 10:
            result.add(int("".join(map(str, (a, b, a + b)))))
    return result

你会得到一个列表

{257, 516, 134, 268, 909, 527, 145, 404, 279, 538, 156, 415, 549, 167, 808, 426, 303, 
 178, 819, 437, 314, 189, 448, 707, 325, 202, 459, 718, 336, 213, 729, 347, 606, 224, 
 101, 358, 617, 235, 112, 369, 628, 246, 505, 123, 639}

【讨论】:

  • 你的解释很有帮助,但我希望结果是数字而不是集合
  • @ddnn5 顶部再读一遍,只有45个不同的值
  • @ddnn5 旁注:它们是元组,而不是集合。集合是无序的。
  • 我想我解释得不好。你得到的结果就是我想要的。我只是希望它们在列表中输出为 3 位数字
  • @ddnn5 就是你有的,你没有list,但没有set,那也是一样的用法,或者直接在方法里做return list(result)
猜你喜欢
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多