Как принять пользовательский ввод и преобразовать его в массив с помощью python

#python #split #termux

Вопрос:

Как принять ввод числа от пользователя, разделить его цифры и использовать каждую цифру отдельно

Например, если пользователь вводит «4568», код должен разделить 4568 на 4,5,6,8

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

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

Ответ №1:

Используйте понимание списка по вводимым пользователем данным.

 values = [int(i) for i in input()]  

Обратите внимание, что этот код не обрабатывает случаи, когда пользователь вводит символы, не содержащие цифр. Чтобы разобраться с этим делом, вы предпочли бы написать :

 values = [int(i) for i in input() if i.isdigit()]  

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

1. Нет необходимости преобразовывать входные данные в список.

2. @Педро Майя, как бы вы тогда использовали каждую цифру отдельно ?

3. Итерация по строке делает именно это.

4. @PedroMaia о, вы правы. Для меня это ошибка. Я собираюсь отредактировать свое сообщение.

Ответ №2:

Вы могли map бы это сделать int и преобразовать map в list .

 digits = list(map(int, input()))  

Если вы хотите убедиться, что принимаются только номера, добавьте a filter в input

 digits = list(map(int, filter(lambda c: c.isdigit(), input())))  

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

1. Как уже предлагалось, это может привести к сбою в случае нецелочисленного пользовательского ввода

2. @Buzz — это нормально. Это не входило в вопрос. Я ответил на вопрос.

3. Я не говорил, что это неправильно 😉

4. @Buzz — я добавил цифровой фильтр.

Ответ №3:

Преобразуйте его в строку, выполните итерацию в строку и получите каждый символ в виде целого числа.

 # Input from the user inp = input() digits=[] for c in str(inp):  try:  digit=int(c)  # Populate the list with the last digit obtained  digits.append(digit)  except:  # I'm assuming you don't need to worry about any other non integer character  pass    

Или в одной строке, НО обратите внимание, что если во входных данных присутствует какой-либо нецелой символ, карта завершается ошибкой:

 inp = 1234 digits = list(map(int, list(str(inp)))  

Где list(str(inp)) разбивает преобразованный в строку ввод в списке его символов, map применяет преобразование в целое число к каждому элементу последнего списка, в конечном итоге преобразование в список возвращает нужный массив

ПРАВКА: Я писал код, пока писался комментарий. Теперь я интегрировал функцию прямого int предложения для отображения

EDIT2: придирчивое редактирование, позволяющее вводить фактический пользовательский ввод вместо тестовой переменной. Это нисколько не меняет сути дела.

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

1. Или просто list(map(int, list('12345'))) .

2. Это не работает. Вы не производите соответствующие преобразования и не используете правильные типы.

3. Этот код неверен на многих уровнях.

4. Давайте зажжем их

5. Это все еще неправильно и повсюду. Вопрос касался ввода пользователем, а не какого-то числа, которое вы преобразуете в строку. Затем вы просто добавляете решение из комментариев, которое полностью отличается от вашего подхода. Кроме того, вам не нужно заворачивать строку в список. Строки уже можно повторять.