问题是:
编写一个程序,该程序将在m和n(包括两者)之间找到所有这样的数字,以使该数字的每个数字都是偶数。
输入格式:
第一行包含值m和n,以逗号分隔。输出格式:
所获得的数字应以逗号分隔的顺序打印在一行上。约束:
1000<=m<=9000
1000<=n<=9000
但是,只有当成千上万的地方都没有奇数时,我的代码才起作用。我要去哪里错了?测试案例和预期结果:
测试用例1
测试用例2
测试用例3
在我的案例中,测试案例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])
答案 0 :(得分:1)
您的错误在这里:
k=i
for j in range(4):
last_digit=k%10
k=i//10
您在每次迭代中都将i // 10
分配给k
,并且i
永远不会改变,因此您始终只查看最后两位数字,而不会看到其他任何数字。如果i
从1234
开始,那么k
从1234
开始,last_digit
变成4
,而k
变成{{1} }。从那里开始,您只需查看123
(123
将是last_digit
和3
,因此每次迭代时,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))