我想将第二个数字的值加倍,然后将十位数相加。最后将所有数字加在一起 例如:123456789-> 1 4 3 8 5 12 7 16 9-> 1 4 3 8 5 3 7 7 9-> 47
编辑:用户可以输入任何数字,并且该功能仍然有效,例如:5153-> 5 2 5 6-> 18
-对不起,第一篇文章我仍然习惯于此-
所以我希望我的功能
1.反转输入的号码
2.将第二个数字的值加倍
3.将所有数字加在一起
4.检查是否可以被7整除
到目前为止,这是我的代码
my testing
def校验和(num):
#print(rev)
odd_digit = ""
even_digit = ""
even_sum = 0
odd_sum = 0
total_sum = 0
if num < 10 and num != 7:
return False
else:
return True
rev = (num[::-1])
for i in range(len(rev)):
if i % 2 == 0:
odd_digit += rev[i]
else:
even_digit += rev[i]
#print(even_digit)
even_digit = int(even_digit)
while even_digit > 0:
even_digit, even_sum = even_digit//10,even_sum+(even_digit%10)
#print(even_sum)
even_sum_2 = even_sum * 2
#print(even_sum_2)
odd_digit = int(odd_digit)
while odd_digit > 0:
odd_digit, odd_sum = odd_digit//10,odd_sum+(odd_digit%10)
#print(odd_sum)
total_sum = even_sum_2 + odd_sum
#print(total_sum)
if total_sum % 7 == 0:
return True
else:
return False
打印(校验和(12345678901))
答案 0 :(得分:2)
尝试将此sum
与map
和列表理解结合使用:
>>> sum(map(int,''.join([str(int(v)*2) if i%2 else v for i,v in enumerate(s)])))
47
或使用:
>>> sum([sum(map(int,str(int(v)*2))) if i%2 else int(v) for i,v in enumerate(s)])
47
答案 1 :(得分:0)
sum([sum(map(int, str(i * 2))) if i % 2 == 0 else i for i in range(1, 10)])