Удвоение каждой второй цифры в python

#python #python-3.x

#python #python-3.x

Вопрос:

Я хотел бы удвоить значение каждой второй цифры, а затем сложить цифры, которые исчисляются десятками. Наконец, сложение всех цифр вместе, например: 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

Вот мой код на данный момент

мое тестирование
контрольная сумма определения (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))

Комментарии:

1. Пожалуйста, предоставьте код python, который вы уже пробовали

2. В соответствии с формулировкой вопроса шаг 1: удвойте вторую цифру, тогда, если входные данные равны 123456789, это должно быть 1 4 3 8 5 12 7 16 9 . Но вы упомянули 14 вместо 16.

Ответ №1:

Попробуйте использовать это 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
  

Ответ №2:

 sum([sum(map(int, str(i * 2))) if i % 2 == 0 else i for i in range(1, 10)])
  

Комментарии:

1. i % 2 == 0 ? это должно быть i % 2

2. i % 2 возвращает, 0 когда i четно. 0 == 0 ВОЗВРАТ True . Поскольку диапазон начинается с нечетного числа, это удовлетворяет требованию «удваивать значение каждой второй цифры».

3. OP сказал, что каждую секунду

4. Это происходит каждую секунду.

5. Да, так: >>> 0%2 0 >>> 1%2 1 >>>