Как проверить, сохранен ли в var ‘#’ или какой-либо специальный символ

#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)