所以我正在尝试编写代码,例如当一个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循环代码又会如何?
答案 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)
我认为您的代码中只有两个小错误:
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)