#python-3.x
#python-3.x
Вопрос:
Простой код, подобный этому:
for input in sys.stdin:
if input=='#': break . #this is considered false even if I type # and wont break
print(input) #it prints #
Я хочу, чтобы пользователь ввел #, чтобы остановить цикл, но даже если я введу #, утверждение все равно будет считаться ложным.
Это не только ‘#’, но также ‘!’ или ‘@’ и т.д.
Кто-нибудь знает почему? Спасибо.
Ответ №1:
Поскольку вы спросили о причине, я думаю, что на самом деле это строка разрыва, которую вы добавляете в конце вашего ввода. если вы используете этот код, он действительно работает:
import sys
for input in sys.stdin:
input = input.strip()
if input=='#':
break
print(input)
Здесь вы можете видеть, что линия разрыва находится в строке:
import sys
for user_input in sys.stdin.detach():
print(user_input)
Комментарии:
1. Спасибо за решение. Я понимаю, что есть много других решений для этого, но я в основном хочу знать, почему input!=’#’
2. наконец-то разобрался с этим благодаря вам. Я просто изменил свой код на if input ==’# n’, тогда он работает именно так: D
Ответ №2:
Обычный способ получить входные данные от пользователя — с помощью input
функции:
inp = input('Type something')
if inp!='#':
print(inp)
Запуск с вводом, отличным от #
, вернет вам ввод эхом, в противном случае он ничего не сделает ( break
как вы выразились, однако это не будет работать, поскольку оно находится вне цикла)
Комментарии:
1. по какой-то причине мне пришлось использовать sys.stdin, который, как я полагаю, возвращает строку. Меня сводит с ума вопрос, зачем вводить!=’#’
Ответ №3:
for something in sys.stdin:
...
Приведенный выше код работает не так, как вы ожидаете, потому что sys.stdin — это дескриптор файла, и он не достигнет некоторого ‘…’.
Но вы можете использовать приведенный ниже код, и он сломается, как и следовало ожидать:
inp = input('Write here:')
if inp!='#':
print(inp)