Перейти к содержимому

Как разбить число на цифры python

  • автор:

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

На вход функцией 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 )

  • Ответить на это сообщение
  • Ссылка

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *