如何使我的代码仅打印给定整数中的偶数

时间:2019-04-16 00:29:27

标签: python python-3.x

所以我正在尝试编写代码,例如当一个int像256一样通过int传递时,由于它们是偶数,所以只能打印出2和6。

我之前遇到了麻烦,因为我没有将int转换为字符串,然后再返回int进行for循环来分析它。正如您在代码中看到的那样,在将整数n通过函数传递后,我将其转换为字符串,然后进行for循环以将其转换回int。然后,我使用if语句进行模运算符,以便仅输出偶数,但似乎无法正确处理。

# Just for example purposes
class Hash; def a; :a_monkey_patched_value_for_a; end

hash.try(:a)
# :a_monkey_patched_value_for_a

如果可以修复我的代码,请告诉我。您还能写出更好的代码来查找执行相同功能的循环代码吗?与此同时,while循环代码又会如何?

4 个答案:

答案 0 :(得分:0)

有更好的方法可以做到这一点,但您需要解决的主要问题是:

for x in numbers:
    intdigits = int(x)  #you need to not pass the whole number but the currently iterating num
    print(x)

此外,如果您将数字作为整数传递,则可以直接进行取模运算

def evenDigits(n):
    #numbers = str(n)  #if this is an int then just use this n
    evennums = []
    while n > 0:
        rem = n % 10
        if rem % 2 == 0:
            evennums.append(rem)
        n = n / 10
print(evennums)  # here you could look at different ways of formatting the prints, like print(','.join(evennums))

答案 1 :(得分:0)

您应该将每个字符x转换为整数,而不是整个numbers

def evenDigits(n):
    numbers = str(n)
    for x in numbers:
        intdigits = int(x)
        evennumbers = intdigits % 2
        if evennumbers == 0:
            print(x)
evenDigits(256)

要更有效地执行此操作,可以使用一组偶数字符的__contains__方法作为过滤器:

def evenDigits(n):
    return filter(set('02468').__contains__, str(n))

for digit in evenDigits(256):
    print(digit)

这将输出:

2
6

答案 2 :(得分:0)

我认为您的代码中只有两个小错误:

  1. 您要打印一次(因此也会打印奇数)。
  2. intdigits必须填写实际数字x

更正后的代码为

def evenDigits(n):
    numbers = str(n)
    print(numbers)
    for x in numbers:
        intdigits = int(x)
        evennumbers = intdigits % 2
        if evennumbers > 0:
            print("")
        else:
            print(x)
evenDigits(256)

另一条评论:您可以更加简洁地编写代码。这将使其更易于理解。无需定义新变量evennumbers,只需编写

if intdigits % 2:
    ...

每当模返回0时,它就被解释为False

此外,如果数字为奇数,则您可能不想打印任何内容。因此,我将编写如下代码:

def evenDigits(n):
    for x in str(n):
        if not int(x) % 2:
            print(x, end='')
    print()
evenDigits(256)

结果为26

答案 3 :(得分:0)

因此,对于给定的数字,您可以使用num % 10来从该位置“弹出”数字,并且可以使用已经执行过的mod 2操作检查该数字是否可以被2整除正在使用:

def evenDigits(n):
    x = n % 10
    while n:
        if not x%2: # Not divisible by 2
            print(x)
        n //= 10 # integer divide by 10 to move to the next digit
        x = n % 10

这种方法至少可以节省类型转换,并且在循环n //= 10结束时将返回0,从而中断while循环。

此外,您还可以使用str迭代和int转换来做到这一点:

def evenDigits(n):
    n = str(n)
    for digit in n:
        if not int(digit) % 2:
           print(digit)