Использование split для входной строки - PullRequest
1 голос
/ 19 февраля 2020

Я новичок в Python 3, и когда я пробую этот код, он работает:

a = input('Enter three digits separated by space:')
b = a.split()
mylist = [int(i) for i in b]
print(mylist)

Вывод:

Enter three digits separated by space:2 3 4
[2, 3, 4]

Однако при попытке этого я получаю ошибки :

a = input('Enter three digits separated by space:')
b = a.split()
mylist = [int(i**2) for i in b]
print(mylist)

Ошибка: Ошибка типа: неподдерживаемые типы операндов для ** или pow (): 'str' и 'int'

На самом деле это тоже работает:

list1 = [2,3,4]
mylist = [int(i**2) for i in list1]
print(mylist)

Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 19 февраля 2020

Возможно, вы захотите сделать возведение в степень после преобразования в int:

mylist = [int(i)**2 for i in list1]

Вы не можете поднять строку в степень (делайте вас знаете, что такое квадрат строки «бла»?), но вы можете увеличить число до степени. Поэтому вам нужно сначала преобразовать строку в число.

Конечно, a.split() возвращает список строк меньшего размера, полученных из исходной строки, и вы должны сами превратить их в числа, но вы уже поняли, это из.

0 голосов
/ 19 февраля 2020

Ошибка в вашем коде: вы пытаетесь повысить мощность перед преобразованием его в int

int(i**2) 
#should be 
int(i)**2

Другой подход, использующий функцию карты .

Синтаксис: map (забавная c, повторяемая)

В python String является итеративной, что означает, что вы можете выполнять итерацию по ней. Например:

for i in "hello":
   print(i)

#output will be: 
    h
    e
    l
    l
    o

Еще одна простая концепция перед переходом к функции карты: функция split () вернет список.

print(type("hello".split()))
#output will be
<class 'list'>

Для ответа на ваш вопрос воспользуйтесь функцией карты:

a = map(int, input('Enter three digits separated by space:').split())

mylist = [i**2 for i in a]
print(mylist)

Объяснение:

  • Функция input () попросит пользователя ввести три числа, разделенных пробелом, и это будет строка, теперь вы можете использовать функцию разбиения по возвращаемой строке по входу ().
  • Здесь функция разделения вернет список.
  • Теперь в изображение входит функция map, она возьмет каждый элемент из списка, возвращенного на шаге 2, и отобразит его в функции, в этом случае он отобразит каждый элемент списка в int.
  • Переменная a является объектом карты, а объект карты является итеративным, так что вы можете подать заявку на l oop или понимание списка (вы использовали понимание списка), чтобы получить желаемый результат
0 голосов
/ 19 февраля 2020

вы должны задать условие для разделения как "", предположим, что входное значение равно 2 3 4, и вы хотите разделить его как 2,3,4. а также входное возвращаемое значение как str, поэтому вы должны изменить его на int следующим образом, тогда вы можете использовать **

 a = input('Enter three digits separated by space:')
 b = map(int,a.split(" "))
 mylist = [i**2 for i in b]

, это будет работать для вас ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...