Как найти первую цифру числа в питоне
Перейти к содержимому

Как найти первую цифру числа в питоне

  • автор:

Как получить первую цифру многозначного числа?

на первой цифре многозначного целочисленного числа это 10, например? Или любое число у которого больше одного разряда?

12 апр 2018 в 19:56

Дано например число 178, нужно чтобы программа запомнила 1 а остальное отбросила, а сейчас в этом коде она до конца идет и оставляет только 0

13 апр 2018 в 4:33
while n >= 10: ( assert n >= 0 )
13 апр 2018 в 13:13

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Переводим модуль числа (на случай отрицательных чисел) в текст и берем первый символ:

 n = str(abs(chislo))[0] 

Если результат нужно использовать как число, то конвертируем строку опять в число:

n = int(str(abs(chislo))[0]) 

Отслеживать
ответ дан 13 апр 2018 в 5:45
26.7k 7 7 золотых знаков 32 32 серебряных знака 49 49 бронзовых знаков
Для отрицательных чисел это будет минус?
13 апр 2018 в 5:56
@andreymal Ага. Но исправить легко. Подправил.
13 апр 2018 в 6:01

n = -50178 sign = False if n < 0: n *= -1 sign = True while n >= 10: n //= 10 if sign: n *= -1 print(n) # -5 

Отслеживать
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак
ответ дан 13 апр 2018 в 11:56
6,161 3 3 золотых знака 20 20 серебряных знаков 38 38 бронзовых знаков
«-5» не цифра, а число.
13 апр 2018 в 12:24

Если хочется использовать дополнительную переменную, то sign = abs(n) == n заменяет четыре строчки одной.

13 апр 2018 в 12:27

@Эникейщик главное, чтобы автор вопроса понимал, что делает код, а улучшать его можно до бесконечности. Цель — показать рабочий пример. Убрать знак несложно.

13 апр 2018 в 12:51

n = int(input()) while n > 9: n = n // 10 print(n) 

Отслеживать
ответ дан 21 апр 2022 в 10:48
A. Tverskoy A. Tverskoy

добро пожаловать на Stack Overflow на русском! пожалуйста, постарайтесь оставлять чуть более развёрнутые ответы. дополнить ответ можно, нажав править

21 апр 2022 в 10:48

n = int(input()) # вводимое число while n != 0: # цикл работает, пока в числе есть цифры last_digit = n % 10 # каждую итерацию получаем последнюю цифру числа # код обработки последней цифры n = n // 10 # удалить последнюю цифру из числа print(n) # выводим последнюю оставшуюся цифру (она и будет первой цифрой числа) 

Отслеживать
ответ дан 30 янв в 17:16
Vlad Korolev Vlad Korolev
1 1 1 бронзовый знак
Вы проверили свой ответ?
30 янв в 17:24

  • python
  • python-3.x
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8420

Как получить только первую и последнюю цифру числа x в Python.

Язык программирования Python

Мне нужно написать программу для нахождения суммы первой и последней цифр числа.

import math #Импортируем необходимую библиотеку n=int(input('Введите число ')) x = [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10))-1, -1, -1)] #отделим каждую цифру print(x) #Выводим список с цифрами
Code language: PHP (php)

Я не знаю, как взять первую и последнюю цифру из этого списка, а затем сложить их вместе.

Решение.

Найти первую и последнюю цифру числа можно несколькими способами, среди которых:

>>> n = 5638 >>> int(str(n)[0]) 5 >>> int(str(n)[-1]) 8
>>> import math >>> n // (10 ** int(math.log10(n))) 5 >>> n % 10 8
Code language: JavaScript (javascript)

Как найти первую цифру числа в питоне

Найти сумму первой и последней цифры целого числа.

Вход. Одно целое 32-х разрядное число n , которое состоит не менее чем из двух цифр. Число n может быть положительным или отрицательным.

Выход. Вывести сумму первой и последней цифры числа n .

Пример входа

Пример выхода

РЕШЕНИЕ

Последняя цифра числа n равна last = n % 10.

Делим число n на 10, пока оно больше 9. Теперь n будет содержать первую цифру входного числа: first = n .

Находим и выводим сумму первой first и последней last цифры.

Решение при помощи строки. Прочитаем число как строку s. Если строка начинается с символа ‘-‘ (входное число отрицательно), то первая цифра числа находится в s[1]. Последнюю цифру находим, вычисляя длину строки.

Читаем входное число n .

Если число n отрицательно, то меняем знак числа на противоположный.

Последняя цифра числа n равна last = n % 10.

Делим число n на 10, пока оно больше 9. Теперь n содержит первую цифру входного числа.

while (n > 9) n = n / 10;

Вычисляем и выводим ответ.

res = first + last;

Реализация алгоритма строка

Входное число читаем в строку s.

Читаем входное число. Установим pos равным индексу, который указывает на первую цифру числа.

pos = (s[0] == ‘-‘ ) ? 1 : 0;

Находим сумму первой s[pos] – ‘0’ и последней s[strlen(s) – 1] – ‘0’ цифры.

sum = s[pos] + s[strlen(s)-1] — 2* ‘0’ ;

Java реализация

import java.util.*;

public class Main

public static void main(String[] args )

Scanner con = new Scanner(System. in );

char [] s = con .nextLine().toCharArray();

int pos = 0;

if ( s [0] == ‘-‘ ) pos = 1;

int res = s [ pos ] + s [ s . length — 1] — 2 * ‘0’ ;

System. out .println( res );

Python реализация

Читаем входное число n .

Если число n отрицательно, то меняем знак числа на противоположный.

Преобразовываем число n в строку.

Выводим сумму первой и последней цифры.

print ( int (n[ 0 ]) + int (n[- 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
Последнее исправление: Leo_Skil 27.03.23 11:53:04 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Ссылка
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 не будет опубликован. Обязательные поля помечены *