if-else внутри цикла for не работает в python - PullRequest
0 голосов
/ 19 января 2019

Я пишу простой сценарий Python с условием if-else в цикле for, считывая входные данные построчно из текстового файла.Ниже мой сценарий.Я должен получить ожидаемый результат.Пожалуйста помоги!Мой env.txt содержит:

DEV01
DEV02
UAT01
UAT02

Вот код:

with open("env.txt") as envnames:
    for eachenv in envnames:
        if eachenv=="DEV01" or "DEV02":
            eachenv="dev"
            print (eachenv)
        elif eachenv=="UAT01" or "UAT02":
            eachenv="uat"
            print(eachenv)
        else :
            print('')

Ожидаемый:

dev
dev
uat
uat

фактический:

dev
dev
dev
dev

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Проблема в if eachenv=="DEV01" or "DEV02".

Вы не можете проверить, как это.результат будет True, если eachenv=="DEV01", иначе результат будет "DEV02", а не False.Вы должны пойти так:

if eachenv in ["DEV01", "DEV02"]:

и измените for eachenv in envnames: на:

for eachenv in envnames.readlines():
0 голосов
/ 19 января 2019

В строке if eachenv=="DEV01" or "DEV02": всегда выполняется второе условие:

>>> if "DEV02":
...     print('hello')
... 
hello

Это происходит потому, что строка "DEV02" является объектом, поэтому будет оцениваться True.

@ Гонки Легкости на Орбите дали правильный способ написать это, если утверждение.

0 голосов
/ 19 января 2019
 if eachenv=="DEV01" or "DEV02":

Означает, если одно из следующего:

  • eachenv равно "DEV01"
  • "DEV02"

Ну, а как же "DEV02"? Он существует, так что вариант условия будет «правдивым», поэтому ваш if всегда пройдет.

Это не то, как работают цепные условия.

Вы имели в виду:

if eachenv=="DEV01" or eachenv=="DEV02":

Теперь, если одно из следующего:

  • eachenv равно "DEV01"
  • eachenv равно "DEV02"

Ура!

...