Если даны два оператора if, выполнить некоторый код, если ни один из них не выполнен - PullRequest
0 голосов
/ 11 мая 2018

эй, я не знаю, как запрограммировать это созвездие:

string = " "
if "abc" in string:
    print ("abc is in string")
if "def" in string:
    print ("def is in string")
else:
    print ("abc and def are not contained in string")

Он должен перейти к «else», только если 2 условия не верны. Но если обе подстроки содержатся в строке; он должен напечатать оба.

Ответы [ 5 ]

0 голосов
/ 12 мая 2018

Как насчет их циклического анализа? Это полностью универсальный вариант, и он будет работать для любого количества строк, которые вам могут понадобиться.

string = " "
strs = ("abc", "def")
if any(s in string for s in strs):
    for s in strs:
        if s in string:
            print ("{} is in string".format(s))
else:
    print (" and ".join(strs) + " are not contained in string")

Здесь у вас есть живой пример

0 голосов
/ 12 мая 2018

Вы можете использовать словарь как эквивалент оператора регистра переключателя (хотя он немного меняет вывод):

msg = {
    (True, True): "abc and def in string",
    (True, False): "abc in string",
    (False, True): "def in string",
    (False, False): "neither abc nor def in string"
}[("abc" in string, "def" in string)]

print(msg)
0 голосов
/ 11 мая 2018

Другой вариант - использовать переменную, которая имеет значение true, только если условие выполнено ранее. Эта переменная (назовем ее found) будет ложной по умолчанию:

found = False

Однако в каждом из операторов if мы устанавливаем значение True:

if "abc" in string:
    print ("abc is in string")
    found = True

if "def" in string:
    print ("def is in string")
    found = True

Теперь нам осталось только проверить переменную. Если какое-либо из условий, при которых выполнено, будет выполнено:

if not found:
    print ("abc and def are not contained in string")

Это только один из вариантов решения этой проблемы, но я видел, как этот шаблон использовался много раз. Конечно, вы можете выбрать другой подход, если считаете, что он будет лучше.

0 голосов
/ 11 мая 2018

Я бы хотел показать другой подход. Преимущество состоит в том, что он делит код на два логических шага. Однако в простых случаях, таких как этот пример вопроса, это, вероятно, не стоит дополнительных усилий.

Эти два шага: 1. получить все частичные результаты; 2. обработать их все

DEFAULT = ["abc and def are not contained in string"]
string = "..."

msglist = []
if "abc" in string:
    msglist.append("abc is in string")
if "def" in string:
    msglist.append("def is in string")
# more tests could be added here

msglist = msglist or DEFAULT
for msg in msglist:
    print(msg)
    # more processing could be added here
0 голосов
/ 11 мая 2018

Вы можете просто определить логическое значение для каждого вашего состояния Он сохраняет код простым

abc = "abc" in string
def_ = "def" in string
if abc : 
    print("abc in string")
if def_ : 
    print("def in string")
if not (abc or def_) : 
    print("neither abc nor def are in this string")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...