Найти - Пользователи
Полная версия: Прошу помощи с малюсеньким фрагментом кода
Начало » Python для новичков » Прошу помощи с малюсеньким фрагментом кода
1
canon_5d
Коллеги,
не могу понять почему вот этот вот фрагмент кода:

 a = []
while True:
    b = input()
    if b == 'end':
        break
    k = [int(i) for i in b.split()]
    a.append(k)
print(a)

приводит к правильному выводу:

C:\Anaconda3\python.exe “C____/Python Projects/Stepic.py”
1 2 3
4 5 6
7 8 9
end
[, , ]

Process finished with exit code 0

в вот этот (в котором собственно вместо b = input() используется input()):

 a = []
while True:
    if input() == 'end':
        break
    k = [int(i) for i in input().split()]
    a.append(k)
print(a)

приводит к ошибке:

C:\Anaconda3\python.exe “C____/Python Projects/Stepic.py”
1 2 3
4 5 6
7 8 9
end
Traceback (most recent call last):
File “C____/Python Projects/Stepic.py”, line 23, in <module>
k =
File “C____/Python Projects/Stepic.py”, line 23, in <listcomp>
k =
ValueError: invalid literal for int() with base 10: ‘end’

Process finished with exit code 1

СОБСТВЕННО вопрос не в том в чём ошибка, а в том какая разница между b = input() и просто input()???

krok64
canon_5d
ValueError: invalid literal for int() with base 10: ‘end’
'end' в инт плохо преобразуется
canon_5d
Повторюсь,
вопрос не в том, что во что плохо преобразуется )))
Вопрос в том какая разница между b = input() и просто input()???
Т.е. почему первый фрагмент кода отрабатывает, а второй - нет.
PEHDOM
canon_5d
Вопрос в том какая разница между b = input() и просто input()???
в первом случае результат того что вы ввели в input() связываеться с переменной b, во втором случае то что вы ввели в input() уходит в никуда.
Если первый раз вы ввели не ‘end’ то выполняеться кусок
 k = [int(i) for i in input().split()]
этот input() уже никак не связат с тем что вы проверяли в: if input() == ‘end’:
canon_5d
Ааааа …. вот оно как ….
СПАСИБО за пояснение!!!
old_monty
canon_5d
Конечно, это плохой стиль программирования. Но если пользователь вводит данные аккуратно, то ваша программа работает без ошибок. Я ничего не менял, только для ясности добавил подсказки пользователю в вызовы input(), и ваша программа нормально работает:
 a = []
while True:
    if input('Для продолжения введите все что угодно, кроме "end": ') == 'end':
        break
    k = [int(i) for i in input('Введите целые числа через пробел, окончание ввода - <Enter>: ').split()]
    a.append(k)
print(a)
Пример работы программы:

canon_5d
Спасибо!!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB