Добро пожаловать в Stackoverflow!
Похоже, ошибка находится в строке if whitespace not in letter:
. На самом деле должно быть наоборот: if item not in list:
. У вас есть if list not in item:
.
Кроме того, это может помочь вам, если я немного переформатирую ваш код.
while True:
letter = input('Please enter a character: ')
if len(letter) != 1:
print('Please type only ONE character')
continue
if letter in ['\n', ' ', '\t']:
print("You typed a white space character!")
continue
lowercase_letter = letter.lower()
print(f'Your character in lower case is: {lowercase_letter}')
Если вы еще не видели pylint
, я бы порекомендовал вы посмотрите на это. Это поможет вам отформатировать код в соответствии со стандартом PEP8. Он также неплохо указывает на некоторые простые ошибки в вашем коде.
Исключения возникают для сообщения об ошибках вызывающим функциям, т.е. вы не можете выполнять работу, которую должна выполнять функция, потому что ввод или Состояние системы не соответствует требованиям функции.
Перехват исключений предназначен для обработки определенных c ошибок, которые вы знаете, как обрабатывать в функции более высокого уровня. Так, например, если вы пытаетесь прочитать файл, а он не существует. В вашей программе это означает, что пользователь не установил специальный флаг c в файле конфигурации ... так что вы можете перехватить это исключение и сообщить пользователю, как исправить проблему.
Поднятие Exception
и перехватить его в той же функции (по крайней мере, в этом случае) - это просто очень сложный способ написания оператора if
.
При написании оператора if-else
неплохо попробовать и сделайте ветвь if
положительной. Это означает, что избегайте if not ...: else:
, если можете.
В вашем коде letter
уже является строковым объектом, поэтому нет необходимости создавать новый строковый объект с str(letter)
. В python все является объектом, даже литералы.
Оператор continue
переходит к следующей итерации l oop. Ничего после continue
не выполняется в текущей итерации l oop. Вы также можете посмотреть оператор break
, завершающий выполнение l oop. В качестве упражнения вы можете посмотреть на добавление дополнительной проверки в свой код, чтобы увидеть, набрал ли пользователь «выйти», а затем break
. Как вы думаете, что произойдет?
if letter.lower() == 'quit':
break
Это должно быть добавлено перед проверкой отдельных букв, иначе вы никогда не доберетесь до этой проверки.
Наконец, вместо использования конкатенации строк в вашем заявлении на печать (используя str + str
). Вы можете использовать f-строки, форматировать строки, как в примере f'Hi my name is {name} and I am from {home}'
, где name
и home
- строковые переменные.
Надеюсь, это помогло!