как включить оператор «else» в цикл «для» с оператором «если»?

#python

Вопрос:

Я знаю, как сделать оператор if внутри цикла for, но я не знаю, как также добавить туда «еще».

Например:

 check_state = 1
for v in (v for v in range(0,10  1, 1) if check_state == 1):
   print v
 

Вывод: Он будет печатать от 0 до 10

И я хочу добавить там утверждение «еще», что-то вроде этого:

 check_state = 0
for v in (v for v in range(0,10  1, 1) if check_state == 1, else v for v in range(1)):
   print v
 

Надеясь на этот вывод: выводит 0

Я не знаю, как выразить это в правильном синтаксисе. Кто-нибудь может помочь?

Спасибо!

Ответ №1:

Я думаю, что вы хотите использовать выражение if для выбора между двумя вызовами диапазона:

 for v in (range(0,10  1, 1) if check_state == 1 else range(1)):
 

Ответ №2:

 check_state = 1 
#can be given 0 or 1, if 1 then it will print '0-10' and if 0 then it will print only '0'

for v in range(0,11):
   if check_state == 1:
      print(v,end="")
   elif check_state == 0:
      print(v)
      break
 

Ответ №3:

Есть ли какая-то особая причина, по которой вы используете генератор?

Вы можете сделать это в понимании списка следующим образом:

 [v for v in (range(0,11) if check_state == 1 else range(1))]
 

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

 x = []
check_state = 1

for v in range(0,11):
    if check_state == 1:
        x.append(v)
    elif check_state == 0:
        x = [0]
 

Оба они выведут список целых чисел вместо того, чтобы распечатывать их, как в исходном коде.

Ответ №4:

Есть 2 возможных способа, которыми вы можете сделать это в сокращенной записи:

 check_state = 0
for v in range(11) if check_state == 1 else range(1):
      print(v)
 

или же:

 check_state = 0
for v in check_state == 1 and range(11) or range(1):
      print(v)