代码无法在几十和几百个地方使用奇数

时间:2018-10-16 12:53:47

标签: python python-3.x math

问题是:

  

编写一个程序,该程序将在m和n(包括两者)之间找到所有这样的数字,以使该数字的每个数字都是偶数。

     

输入格式:
  第一行包含值m和n,以逗号分隔。

     

输出格式:
  所获得的数字应以逗号分隔的顺序打印在一行上。

     

约束:

     
      
  • 1000<=m<=9000
  •   
  • 1000<=n<=9000
  •   

但是,只有当成千上万的地方都没有奇数时,我的代码才起作用。我要去哪里错了?测试案例和预期结果:

测试用例1

  • 输入:2000,2020
  • 产出:2000,2002,2004,2006,2008,2020

测试用例2

  • 输入:2000,2050
  • 产出:2000,2002,2004,2006,2008,2020,2022,2024,2026,2028,2040,2042,2044,2046,2048

测试用例3

  • 输入:1000,2000
  • 输出:2000

在我的案例中,测试案例3失败了。为什么会这样?

num=list(map(int,input().split(",")))
length=len(num)
list=[]
first=num[0]
last=num[length-1]
for i in range(first,last+1):
    count=0
    num1 = i
    k=i
    for j in range(4):
        last_digit=k%10
        k=i//10
        if(last_digit%2==0):
            count=count+1
    if(count==4):
        list.append(num1)
length2=len(list)
for i in range(length2):
    if(i<length2-1):
        print(list[i],end=',')
    else:
        print(list[i])

2 个答案:

答案 0 :(得分:1)

您的错误在这里:

k=i
for j in range(4):
    last_digit=k%10
    k=i//10

您在每次迭代中都将i // 10分配给k,并且i永远不会改变,因此您始终只查看最后两位数字,而不会看到其他任何数字。如果i1234开始,那么k1234开始,last_digit变成4,而k变成{{1} }。从那里开始,您只需查看123123将是last_digit3,因此每次迭代时,k = i // 10都会再次出现)。

您需要除123

k

一种更简单的方法是将位数(字符串值)与偶数集进行比较:

k=i
for j in range(4):
    last_digit=k%10
    k=k//10

答案 1 :(得分:0)

出于可读性考虑,我会这样写:

nums = list(map(int, input().split(",")))
all_even = []

for num in range(nums[0], nums[1]+1):
  # Skips the num if it's not even
  if num % 2 != 0:
    continue

  # Skips the num if any of its digits is not even
  # Note that it'll skip on the first item that is not even
  # so it is rather efficient as it does not necessarily 
  # need to iterate over *all* digits
  if any(int(digit) % 2 != 0 for digit in str(num)):
    continue

  # Appends the num to the final list
  all_even.append(str(num))

print(','.join(all_even))