Цель кода:Проверить наличие нескольких подстрок внутри одной строки?
- Попросите пользователя ввести имя файла.
- Если это имя файла содержит определенные подстроки, то это имя файла недействительно. Программа «отклоняет» и запрашивает новое имя файла.
- Если имя файла не содержит этих подстрок, то имя файла является действительным и программа «принимает» его.
Покушение 1:
while True:
filename = raw_input("Please enter the name of the file:")
if "FY" in filename or "FE" in filename or "EX1" in filename or "EX2" in filename:
print "Sorry, this filename is not valid."
else:
print "This filename is valid"
break
(я уезжаю пенал проверки на входе только чтобы сохранить примеры чистой).
Моя проблема связана с сопоставлением множества подстрок с входным именем файла. Я хотел сохранить все подстроки в кортеже вместо огромной линии if or
. Я понял, что было бы легче, если кто-то возьмет на себя код, чтобы найти и добавить к кортежу, если понадобится, вместо того, чтобы расширять условный оператор.
Покушение 2 (с кортежем):
BAD_SUBSTRINGS = ("FY", "FE", "EX1","EX2")
while True:
valid = True
filename = raw_input("Please enter the name of the file:")
for substring in BAD_SUBSTRINGS:
if substring in filename:
valid = false
break
if not valid:
print "Sorry, this filename is not valid"
else:
print "This filename is valid"
break
Но я чувствую, что попытка 2 не самый вещий способ выполнения чего я хочу? Я хотел бы избежать цикла for
и valid
boolean, если это вообще возможно.
Есть ли способ, которым я мог бы сделать попытку 2 более компактной? Или я должен просто вернуться к попытке 1?
Спасибо! Я не знал о ключевом слове «any». Сейчас я буду читать. – andraiamatrix
Проверьте ключевое слово 'all', пока вы там :-) –
@andraiamatrix:' any' не является ключевым словом, это встроенная функция. – martineau