【问题标题】:Doubling every second digit in python在python中每第二个数字加倍
【发布时间】:2019-03-09 05:39:01
【问题描述】:

我想将第二个数字的值加倍,然后将十位数字相加。最后将所有数字加在一起 例如: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

-SORRY 第一篇文章我还是习惯了- 所以我希望我的功能
1.反转输入的数字
2.将第二个数字的值加倍
3. 将所有数字相加
4.检查它是否能被7整除

这是我目前的代码

my testing
def checksum(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))

【问题讨论】:

  • 请提供你目前尝试过的python代码
  • 根据问题陈述步骤 1:将第二个数字加倍,然后如果输入为 123456789,则应为 1 4 3 8 5 12 7 16 9 。但你提到的是 14 而不是 16。

标签: python python-3.x


【解决方案1】:

尝试将此summap 和列表理解一起使用:

>>> 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

【讨论】:

    【解决方案2】:
    sum([sum(map(int, str(i * 2))) if i % 2 == 0 else i for i in range(1, 10)])
    

    【讨论】:

    • i % 2 == 0?应该是i % 2
    • i 为偶数时,i % 2 返回00 == 0 返回True。由于该范围以奇数开头,因此满足“每第二位的值加倍”的要求。
    • OP 说每一秒
    • 每一秒。
    • 是的,所以:&gt;&gt;&gt; 0%2 0 &gt;&gt;&gt; 1%2 1 &gt;&gt;&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多