首页 > 解决方案 > 应该检查每个数字并得到错误的输出

问题描述

我有一个任务:在输入 [x;y] 上有一个范围,然后我应该检查该范围内的每个数字并检查数字中的每个数字。如果它很奇怪,我应该打印它,例如:3, 20 我应该打印 4,6,8,20

def check(num):
if int(num) % 2 == 0:
    return True


x, y = int(input()), int(input())

numbers = []
if x <= y:
while x != y:
    for i in str(x):
        if check(i):
            numbers.append(x)
    x += 1

else:
while y != x:
    for i in str(y):
        i = int(i)
        if check(i):
            numbers.append(y)
    y += 1
if y == x:
    for i in str(x):
        if check(i):
            numbers.append(x)
print(numbers)

它打印 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 20, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29 ] 而不是 2,4,6,8,20,22,24,26,28

标签: pythonloopsmathoutput

解决方案


您正在根据每个数字的单个数字进行检查和批准。在附加整个数字之前,您应该检查所有这些。这就是您获得22两次的原因:第一次获得2一次,第二次获得一次。你得到10,因为即使1是奇数,0也是偶数,所以你将它附加到你的列表中。

将整个数字的检查移到函数中,并且当所有数字都是偶数时才check返回。这会缩短您的代码。另请注意,如果用户以错误的顺序输入它们,您可以轻松交换。True xy

一旦发现一个数字是奇数,该函数check就会立即返回,您可以看到它只有在循环结束并且所有数字都是偶数时才能返回。FalseiTrue

    def check(num):
        for i in str(num):
            if int(i) % 2 != 0:
                return False
        return True


    x, y = int(input()), int(input())
    if x > y:
        x,y = y,x

    numbers = []

    while x <= y:
        if check(x):
            numbers.append(x)
        x += 1
    print (numbers)

结果,320输入(但203可以):

[4, 6, 8, 20]

推荐阅读