как не оканчивать строку на Enter python
У меня есть скрипт, в нём необходимо НЕ прерывать строку по нажатию ENTER. Есть ли возможность, чтобы сообщение отправлялось по нажатию Enter, если строка, в которой пишет человек уже пуста:
Hello,
im sorry but i cant talk right now
[a1]
где a1 - это нажатие Enter на пустой строке. Сейчас Input работает так:
bod = input("Text:")
Ответы (3 шт):
Можно просто запрашивать новые строки, пока не будет пустой, например вот так:
raw_result = []
while i := input():
raw_result.append(i)
result = '\n'.join(raw_result)
Тот же самый код, только подлиннее и попонятней:
raw_result = []
i = input()
while i:
raw_result.append(i)
i = input()
result = '\n'.join(raw_result)
В переменной result оказывается строка вида
'Hello,\nim sorry but i cant talk right now'
PS: \n - перевод строки.
Если правильно понял задачу, то Используйте цикл, который будет продолжаться до тех пор, пока строка не будет пустой после нажатия Enter.
message = ""
while True:
line = input("Введите текст (нажмите Enter для отправки сообщения): ")
if line: # Если введенная строка не пустая, добавляем её к сообщению
message += line + "\n"
else: # Если введена пустая строка, ожидаем нажатия Enter для отправки сообщения)
print(message)
input("Нажмите Enter для отправки.")
break # Выход из цикла
Ещё один интересный вариант дали в https://stackoverflow.com/a/11664675/21103781 :
result = '\n'.join(iter(input, ''))
Объяснение магии:
Встроенная функция iter может принимать два аргумента: вызываемый объект (например, функцию) и какое-нибудь значение. Тогда она вернёт итератор, построенный из результатов вызовов этой функции, пока он не равен переданному значению. Т. е. как-то так:
def my_iter(f, s): # имитация `iter`
r = f()
while r != s:
yield r
r = f()
c = 0
# функция, которая просто возвращает при первом вызове - 1, при втором - 2, и т. д.
def count():
global c
c += 1
return c
>>> print(list(my_iter(count, 5)))
[1, 2, 3, 4]