Если вы напечатаете значение line1
перед оператором if else, вы увидите, что в нем есть символ перевода строки. (Символ \n
.) Это символ, который добавляется в конец каждой строки всякий раз, когда вы нажимаете клавишу ввода на клавиатуре, и вам необходимо либо удалить символы новой строки, либо включить их в качестве допустимого ввода.
Чтобы включить его в качестве действительного ввода
Изменить correctInput = 'ABCabc '
до
correctInput = 'ABCabc \n'
.
Или для отмены изменения символов новой строки
if all(char in correctInput for char in line1):
до
if all(char in correctInput for char in line1.replace('\n', '')):
Любой метод будет работать.
Кстати, input
- это функция в Python. Хотя вам разрешено использовать его в качестве имени переменной, это не позволит вам использовать функцию ввода в вашей программе. Из-за этого считается плохой практикой использовать любые имена встроенных функций в качестве имен переменных.
Решение RegEx
Ради интереса, я пришел к следующему решению, которое решает вашу проблему с помощью регулярных выражений.
import re
with open(sys.argv[1]) as fh:
valid_lines = re.findall('^[ABCabc ]+\n', fh.read())
Находит любые допустимые строки, используя шаблон '^[ABCabc ]+\n'
. Что делает этот шаблон регулярного выражения?
- Символ
^
обозначает начало строки
- Затем наступает
[ABCabc ]
. При использовании скобок разрешены только символы внутри этих скобок.
-
+
после скобок означает, что те символы, которые в скобках, должны быть найдены 1 или более раз.
- И, наконец, мы проверяем, что за найденными допустимыми символами следует символ новой строки (
\n
). Это гарантирует, что мы проверили всю строку на наличие допустимых символов.