2015-08-25 4 views
0

Цель кода:Проверить наличие нескольких подстрок внутри одной строки?

  1. Попросите пользователя ввести имя файла.
  2. Если это имя файла содержит определенные подстроки, то это имя файла недействительно. Программа «отклоняет» и запрашивает новое имя файла.
  3. Если имя файла не содержит этих подстрок, то имя файла является действительным и программа «принимает» его.

Покушение 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?

ответ

3

Как насчет этого?

BAD_SUBSTRINGS = ("FY", "FE", "EX1","EX2") 

while True: 
    filename = raw_input("Please enter the name of the file:") 

    if any(b in filename for b in BAD_SUBSTRINGS): 
     print("Sorry, this filename is not valid") 
    else: 
     print("This filename is valid") 
     break 
+0

Спасибо! Я не знал о ключевом слове «any». Сейчас я буду читать. – andraiamatrix

+1

Проверьте ключевое слово 'all', пока вы там :-) –

+0

@andraiamatrix:' any' не является ключевым словом, это встроенная функция. – martineau

Смежные вопросы