Разбить число на составляющие
На вход функцией 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 ('Обычный')
Отслеживать
48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 25 мар 2016 в 4:17
175 2 2 золотых знака 2 2 серебряных знака 9 9 бронзовых знаков
9 ответов 9
Сортировка: Сброс на вариант по умолчанию
Можно, конечно, честно посчитать остатки от деления и т.д., но проще всего разбить на символы строку, а потом перевести эти символы обратно в числа. Делается это во второй строке следующей программы:
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), так как в нём есть ряд интересных моментов.
Как разделить число на цифры в Python без списков и всего такого. Нужно использовать % или //.
num % 10 - получаешь самую правую цифру числа num
num = num // 10 - удаляешь самую правую цифру из числа num.
Повторяешь в цикле - пока num не станет равным нулю.
Flame MasterЗнаток (391) 5 лет назад
Ратанин АрсенийПрофи (538) 3 года назад
СПАСИБО.
Благодаря Вам написал код :
n = int(input())
if n%10==1 and n//10%10!=1:
print(n, "программист")
elif n//10%10!=1 and (n%10==2 or n%10==3 or n%10==4):
print(n, "программиста")
else:
print(n, "программистов")
для такой вот задачи с повышенной сложностью. :
В институте биоинформатики по офису передвигается робот. Недавно студенты из группы программистов написали для него программу, по которой робот, когда заходит в комнату, считает количество программистов в ней и произносит его вслух: "n программистов".
Для того, чтобы это звучало правильно, для каждого nn нужно использовать верное окончание слова.
Напишите программу, считывающую с пользовательского ввода целое число nn (неотрицательное), выводящее это число в консоль вместе с правильным образом изменён
Вы - топ)
Андрей Высший разум (405169) ИМХО, твой код усложнён лишними проверками. Если сделать 4 ветки, код станет намного понятнее: if n // 10 % 10 == 1: print(n, "программистов") elif n % 10 == 1: print(n, "программист") elif 2
КахаЗнаток (423) 2 года назад
числа будут в обратном порядке, а как вывести в нужном без list?
Андрей Высший разум (405169) Каха, Например, через рекурсивную функцию: def dig(n): ~~if n >= 10: dig(n // 10) ~~print(n % 10)
Остальные ответы
print(37 / 3) # один слэш — это деление с ответом-дробью
print(37 // 3) # два слэша считают частное от деления нацело
# это как операция div в других языках
print(37 % 3) # процент считает остаток от деления нацело
# это как операция mod в других языках
Flame MasterЗнаток (391) 5 лет назад
Я знаю это! Я не знаю как с помощью этого разделить число на цифры.
Представить число как строку и пользоваться срезами:
a = 543
a = str(a)
print(a[0]) # >>> '5'
print(a[1]) # >>> '4'
print(a[2]) # >>> '3'
Если нужно только вывести числа на экран, то так
n=int(input())
while n>0:
print(n%10)
n//=10
Числа выводятся в порядке справа налево. 2 последние строки с отступом.
Как разделить число на цифры в python?
Здравствуйте! Кто-нибудь может подсказать, как можно сделать так, чтобы, допустим, в числе 135 сложить крайние цифры т.е. 1 и 5?
- Вопрос задан более трёх лет назад
- 1559 просмотров
5 комментариев
Простой 5 комментариев
Да проще простого брат:
digits = [] integer = 135 while integer: digits.append(integer % 10) integer /= 10 result = digits[0] + digits[-1]
Можно, конечно, через строку всё это сделать, но препод "неуд" поставит за такое.
Как найти цифру в числе
Добрый день. Кто нибудь сможет объяснить, как это работает?
алгоритм нахождения цифры n-значного числа:
(num % 10 ** 1) // 10 ** 0
последняя цифра
(num % 10 ** 2) // 10 **1
предпоследняя цифра
(num % 10 ** 3) // 10 **2
предпредпоследняя цифра …
(num % 10 ** n) // 10 ** n-1
первая цифра
(num % 10 ** n-1) // 10 ** n-2
вторая цифра
Прохожу курс программирования. Все, чем пользуюсь из инструкции выше не работает в заданиях и даже в VScode. Я в целом не понимаю, как работает (или как должен работать) алгоритм нахождения цифры n-значного числа.
Leo_Skil
27.03.23 11:52:05 MSK
- Ответить на это сообщение
- Ссылка
12345678904 % 10 4
Третье от конца:
Math.floor(12345678904 % 1000 / 100) 9
Math.floor(12345678904 % 10000 / 1000) 8
uwuwuu
( 27.03.23 12:00:40 MSK )
Последнее исправление: uwuwuu 27.03.23 12:07:01 MSK (всего исправлений: 3)
- Ответить на это сообщение
- Показать ответ
- Ссылка

% это остаток от деления. Уже написали что 12345678904 % 10 = 4 это можно записать так 12345678904 / 10 = 1234567890.4 . Тоесть / просто поделит число, а % поделит число, уберёт целое и оставит остаток. % это оператор деления по модулю в виде функций оно имеет вид такой часто mod() На курсах должны это разжевать.
LINUX-ORG-RU ★★★★★
( 27.03.23 12:17:27 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка

int(str(num)[-i])
вот так делайте раз это питон;-)
(num % 10 ** 1) // 10 ** 0 последняя цифра
Нормальные погромисты цифры в числе считают с другой стороны. Привыкайте.
AntonI ★★★★
( 27.03.23 12:35:18 MSK )
Последнее исправление: AntonI 27.03.23 12:42:45 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:17:27 MSK

Тема // не раскрыта!
Вообще за переход от целочисленного деления в py2 к «обычному» в py3 ИМНО надо клавой по пальцам разработчиков.
AntonI ★★★★
( 27.03.23 12:41:20 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 12:41:20 MSK

А это я уже не знаю :3
LINUX-ORG-RU ★★★★★
( 27.03.23 12:42:59 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:42:59 MSK

В python2, как и в других нормальных ЯП, было 3/2=1
В python3 решили что это источник ошибок и стало 3/2=1.5
Но ввели операцию //, 3//2=1
AntonI ★★★★
( 27.03.23 12:45:05 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:17:27 MSK
Кажется, я понял. Если конечную цифру находим так: n % 10 или остаток от n / 10 (что является последней единицей), то второе от конца должно быть так: n % 100 (запятая на еще один знак влево, что знаит что покажет последний десяток в числе), после нахождения десятка надо найти его первую цифру (от лева), т.е. найти число десятков (что нам и нужно): n / 10. И потом для каждой цифры левее в числе прибавляем по нолику в делителях:
второе от конца:
третье от конца:
n % 1000 / 100 #плюс нолик
А как находить первое число?
Leo_Skil
( 27.03.23 12:46:03 MSK ) автор топика
Последнее исправление: Leo_Skil 27.03.23 12:47:03 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от Leo_Skil 27.03.23 12:46:03 MSK

Только не / а //, см выше.
num%10**(n-1)//10**(n-2)
n = len(str(num))
ps и не число а цифру.
AntonI ★★★★
( 27.03.23 12:48:42 MSK )
Последнее исправление: AntonI 27.03.23 12:49:55 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Leo_Skil 27.03.23 12:46:03 MSK
Если конечную цифру находим так: n % 10
Используйте нормальную терминологию - разряд, соответственно младший или старший разряд, а не «конечная цифра» и «первое число».
В противном случае вас никто не поймёт и даже может быть над вами будут смеяться.
Разряды обычно нумеруются с 0, это тоже ключик к пониманию представления числа.
vvn_black ★★★★★
( 27.03.23 12:49:58 MSK )
Последнее исправление: vvn_black 27.03.23 12:52:36 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 12:45:05 MSK

Я не знаю питон и это хорошо я знать его не хочу ^.^
LINUX-ORG-RU ★★★★★
( 27.03.23 12:51:00 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:51:00 MSK

Хороший ЯП для своей ниши. Не без проблем конечно…
AntonI ★★★★
( 27.03.23 12:52:05 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 12:48:42 MSK
i586 ★★★★★
( 27.03.23 12:53:37 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 12:52:05 MSK

Мне Lua хватает, для меня он почти идеален. Более того был бы ещё более куцый в идеале с 1 единственной версией или 100% обратной совместимостью, но отлаженный временем язык яб его взял. Питон я использовать не буду просто потому что принудительное форматирование, я прощаю это мake, но дальше для меня это уже перебор. Могу себе позволить дропнуть целый язык и всё что с ним связано ибо просто любитель, ключевое слово любитель если не любо то фтопку=)
LINUX-ORG-RU ★★★★★
( 27.03.23 12:55:42 MSK )
Последнее исправление: LINUX-ORG-RU 27.03.23 12:58:18 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от i586 27.03.23 12:53:37 MSK

AntonI ★★★★
( 27.03.23 12:57:09 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от LINUX-ORG-RU 27.03.23 12:55:42 MSK

Я не знаю Lua, но слышал много хорошего.
Да, с питоном уже начинаются проблемы из за его толстоты (с обратной совместимостью давно начались). Скажем мне сейчас на кластере развернутся не удается потому что нет python-dev (хидеров). Понятно что это решается, но времени жалко на все эти танцы с бубном.
Хотелось бы какую то минимальную версию питона шоб везде легко вставала и работала.
AntonI ★★★★
( 27.03.23 13:00:08 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от i586 27.03.23 12:53:37 MSK
Значит для нахождения первой цифры в числе мы делим ее на ее самый большой разряд, для чего берем num % 10n-1, где n - число цифр (так, чтобы перенести запятую после первой цифры). Он покажет первую цифру. Получившееся необходимо разделить нацело num //10n-2
Leo_Skil
( 27.03.23 13:02:57 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 13:00:08 MSK

Если использовать lua как язык общего назначения как используют питон то будет тоже самое если не хуже ибо luajit (lua5.1+пости lua5.2),lua5.2,lua5.3,lua5.4 и всё это в каше и всё несовместимо, байт код не совместим плюс ещё форки парчка. Но «не баг, а фича» луа дефакто всегда встроенный так что что встроил с тем и живёшь, беды с башкой начинаются когда хочешь взять библиотеку, а она на 5.3+ с операциями битовыми ААААААААААААААААААААА 😀
LINUX-ORG-RU ★★★★★
( 27.03.23 13:07:59 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от LINUX-ORG-RU 27.03.23 13:07:59 MSK

Ну питон можно встроить, но он потянет за собой внешние питоньи либы…
У нас одна из канонических архитектур это питоний пускач в котором ворочается плюсовая сошка, биндинг через SWIG. Интерфейс на питоне пишется куда приятнее чем на плюсах, все кучеряво пока есть питоньи хидеры… ;-(
PS бонус питона - он просто учится и его почти все знают. С lua не так;-)
AntonI ★★★★
( 27.03.23 13:13:52 MSK )
Последнее исправление: AntonI 27.03.23 13:14:41 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от Leo_Skil 27.03.23 13:02:57 MSK
Вот вам для наглядности представление десятичного числа из статьи в википедии:
421 = 4 · 10² + 2 · 10¹ + 1 · 10⁰
Вам же надо решить обратную задачу и по этому представлению легко понять, как оно так получается.
Прочитайте уже про позиционные системы счисления.
vvn_black ★★★★★
( 27.03.23 13:15:59 MSK )
- Ответить на это сообщение
- Ссылка

#!/usr/bin/python # # depth from 0, -1 for the first digit # def digit_of_number(number, depth=-1): if (number<10) or (depth == 0): return number%10 else: return digit_of_number(number//10, depth-1) # test a = 12345 print("In: ", a) # print("Out 0: ", digit_of_number(a, 0)) print("Out 1: ", digit_of_number(a, 1)) print("Out 2: ", digit_of_number(a, 2)) print("Out 3: ", digit_of_number(a, 3)) print("Out 4: ", digit_of_number(a, 4)) print("Out 5: ", digit_of_number(a, 5)) print("Out -1: ", digit_of_number(a, -1)) print("Out ", digit_of_number(a) )
In: 12345 Out 0: 5 Out 1: 4 Out 2: 3 Out 3: 2 Out 4: 1 Out 5: 1 Out -1: 1 Out 1
futurama ★★★★★
( 27.03.23 13:39:05 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 12:45:05 MSK

В python3 решили что это источник ошибок и стало 3/2=1.5
так в матлабе. Хотя, целочисленное деление там idivide(A,B), что м.б. еще менее удобоваримо, чем //
seiken ★★★★★
( 27.03.23 13:40:01 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от seiken 27.03.23 13:40:01 MSK

Матлаб все таки очень нишевая вещь, я за 25 лет написания числодробилок работал с ним только один раз. ЯП общего назначения испольщуются гораздо чаще чем матлаб. Я слышал что в каких то новомодных ЯП тоже 3/2=1.5, но все таки это ИМНО изврат.
Хотя новички о целочисленное деление больно и регулярно бьются, это правда.
AntonI ★★★★
( 27.03.23 14:05:43 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от futurama 27.03.23 13:39:05 MSK

Ой скока букоф… забудьте же про stdin для ввода параметров! Да и остальное лишнее.
#!/usr/bin/python3 import sys for x in sys.argv[1:]: if not x.isdigit(): print('incorrect', x); continue print(x, '=', ' + '.join(c+'*10**%i'%p for p, c in enumerate(reversed(x))))
AntonI ★★★★
( 27.03.23 14:15:05 MSK )
Последнее исправление: AntonI 27.03.23 14:16:40 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка

Если метод непринципиален, то можно разбить, как строку
#!/usr/bin/pwsh $nn = [uint64]::MaxValue -split '(?!\b)' for ($i = 0; $i -lt $nn.count; $i++) < ': ' -f $i, $nn[$i] >
0: 1 1: 8 # 2..17 18: 1 19: 5
dmitry237 ★★
( 27.03.23 15:32:21 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 14:15:05 MSK

Ты о чем вообще? Болеешь?
futurama ★★★★★
( 27.03.23 16:02:13 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от uwuwuu 27.03.23 12:00:40 MSK
Спасибо всем, кто отозвался
Leo_Skil
( 27.03.23 16:40:04 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от futurama 27.03.23 16:02:13 MSK

Я о Вашем коде. Вы циклы в школе еще не проходили? Ну ничего, все впереди.
Про stdin я виноват, не туда посмотрел.
AntonI ★★★★
( 27.03.23 18:26:12 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 18:26:12 MSK

Циклы? Что это? Рекурсию знаю, даже хвостатую, вроде.
futurama ★★★★★
( 27.03.23 22:43:51 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от futurama 27.03.23 22:43:51 MSK

Это то во что может быть развёрнута рекурсия. И это работает быстрее, хотя питон не про скорость.
Но ещё длина цикла ограничена временем, а вот глубина рекурсии ограничена стеком…
AntonI ★★★★
( 27.03.23 23:17:51 MSK )
- Ответить на это сообщение
- Ссылка

Так алгоритм непонятен или реализация не получается?
Если таки первое, предлагаю для начала осмыслить, что вообще такое цифра в позиционной (в частности, десятичной) системе счисления. А это по сути коэффициент при основании системы счисления в определённой степени. Все цифры образуют многочлен, степень которого определяется количеством цифр. То есть:
1326 = 1*10**3 + 3*10**2 + 2*10**1 + 6+10**0
Взяв остаток от деления на 10, получим последнюю цифру, взяв остаток от деления на 100 и поделив на 10 — вторую справа и так далее.
Ну а дальше уже да, питонячья специфика начинается, про это в комментариях уже написали.
hobbit ★★★★★
( 27.03.23 23:29:20 MSK )
Последнее исправление: hobbit 27.03.23 23:30:23 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от AntonI 27.03.23 12:45:05 MSK

И эти люди запрещают мне ковыряться в носу… Ужас.
А вроде как начиная с Python 3.5 можно явно объявлять типы. Что, если явно объявленное целое 3 разделить на столь же явное объявленное целое 2 — реально получается вещественный результат? Как же хорошо, что я не на питоне пишу…
hobbit ★★★★★
( 27.03.23 23:35:22 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от hobbit 27.03.23 23:35:22 MSK

Вроде можно типы объявлять, но я этим не пользуюсь. У меня уже есть плюсы где типы обьявляют:-) Я на третий то питон недавно частично перешёл, очень много старого кода на втором который не удаётся перетащить на третий.
Объявление типов это попытка забороть траблы утиной типизации в больших проектах, когда оно через полгода крэшится неожиданно потому что эту трассу выполнения не тестировали. Ну дык не надо писать на питоне большие проекты, не для этого он…
И объявление типов не спасает, у них просто int/int==>float. Потому что неофиты страдают когда int/int==>int.
AntonI ★★★★
( 28.03.23 08:29:56 MSK )
- Ответить на это сообщение
- Ссылка