Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Разбить число на составляющие

#python #python_2x #числа


На вход функцией input подается 6-значеное число. Нужно разбить его на на отдельные
числа. Например: 123456 -> 1 2 3 4 5 6. Делается это для того, чтобы проверить эквивалентность
суммы первой и второй тройки чисел (Задача о счастливом билете). В программировании
я начинающий и желательно всё сделать операциями div, mod, if-else

a = int(input())
b = a//1000
one = b//100
two = b%11
three = b%10
c = a%1000
four = c//100
five = c%11
six = c%10
if (one+two+three)==(four+five+six):
    print ('Счастливый')
else:
    print ('Обычный')

    


Ответы

Ответ 1



Можно, конечно, честно посчитать остатки от деления и т.д., но проще всего разбить на символы строку, а потом перевести эти символы обратно в числа. Делается это во второй строке следующей программы: a = 123456 b = map(int, str(a)) print b if len(b)==6: print "Happy" if b[0] + b[1] + b[2] == b[3] + b[4] + b[5] else "Unhappy" Если очень хочется честным образом делить на 10, то можно вторую строку этой программы заменить на такой фрагмент: b = [] while a > 0: b.append(a % 10) a = a // 10 b = b[::-1] # так можно развернуть, если бы нам был важен порядок print b Теперь по тексту Вашей программы: почему-то берётся остаток от деления на 11 (в строках two = b%11 и five = c%11, хотя правильно было бы поделить на 10, а потом взять остаток от деления на 10 (two = (b // 10) % 10). Вам надо разобраться, откуда взялось 11, так как это очень странный код. Дополнение: Если нам важно поддержать случаи входных значений a менее, чем шестизначных, то можно поменять всего одну строчку: while len(b) < 6: # теперь в b заведомо будет 6 элементов Также рекомендую изучить код из соседнего ответа (от jfs), так как в нём есть ряд интересных моментов.

Ответ 2



Чтобы найти сумму цифр числа, заданного в виде строки: def sum_digits(s): return sum(map(int, s)) это идиоматичный способ для данной задачи в Питоне. sum_digits() функцию можно использовать, чтобы определить является ли заданное число "счастливым": #!/usr/bin/env python3 s = input() middle = len(s) // 2 # середина if middle == 0 or sum_digits(s[:middle]) == sum_digits(s[-middle:]): print('Счастливый') else: print('Обычный') Число считается "счастливым", если сумма цифр левой половины равна сумме цифр правой половины числа. Пустая строка (нет цифр) — в качестве вырожденного случая — также рассматривается "счастливой". Если хочется, можно использовать деление, чтобы разбить неотрицательное целое число на отдельные цифры: def digits_recursive(n, digits=[]): return digits_recursive(n // 10, [n % 10] + digits) if n else digits or [0] Пример: >>> digits_recursive(123) [1, 2, 3] Или то же самое, используя явный цикл: def digits_iterative(nonneg): digits = [] while nonneg: digits += [nonneg % 10] nonneg //= 10 return digits[::-1] or [0] Пример: >>> digits_iterative(123) [1, 2, 3] >>> sum(_) 6

Ответ 3



Видел это задание во вводном курсе Python до изучения массивов и функций типа map() так что в том случае корректней было вот такое решение. a = int(input()) b = a//1000 one = b // 100 two = b // 10 % 10 three = b % 10 c = a % 1000 four = c // 100 five = c // 10 % 10 six = c % 10 if (one+two+three)==(four+five+six): print ('Счастливый') else: print ('Обычный')

Ответ 4



num = list('123321') summ_1 = int(num[0]) + int(num[1]) + int(num[2]) #cумма первых трех summ_2 = int(num[3]) + int(num[4]) + int(num[5]) #cумма последних трех трех

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

Отправить комментарий