2015-09-13 2 views
0

Будучи новым для Python, у меня есть этот псевдо код на мой взгляд:Python: IF statemant и множественная ИЛИ

if vars 1-4 are passed and all of them are 1: 
    if it’s var1 or 2: 
     print("a") 
    if it’s var3 
     print("b") 
    if it’s var4 
     print("c") 

if vars 1-4 are passed and all of them are either 2, 3 or 4: 
    if it’s var1 or 2: 
     print("d") 
    if it’s var3: 
     print("e") and so on 

if vars 1-4 are passed and all of them are either 0 or 5-10: 
    if it’s var1 or 2: 
     print("f") and so forth 

Я попробовал несколько подходов, но я все же управлять им. Например:

if arg in [var1, var2, var3, var4] and [var1, var2, var3, var4] == 1: 
    if var in [var1, var2]: 
     print("a") 
    if var == var3: 
     print("b") 
    if var == var4: 
     print("c") 

if arg in [var1, var2, var3, var4] and 2 <= [var1, var2, var3, var4] <= 4: 
    if var in [var1, var2]: 
     print("d") #and so on 

if arg in [var1, var2, var3, var4] and 5 <= [var1, var2, var3, var4] <= 10: #+ put the 0 
    if var in [var1, var2]: 
     print("f") #and so forth 

Часть с if test in [var1, var2, var3, var4] прекрасно работает с использованием всех 4 переменных, но не так с проверкой, если они равны 1. Кроме того, вторая часть, с диапазоном (и третий с диапазоном + 0) еще хуже. Возможно, я мог бы разбить все эти и проверить их индивидуально с OR перед каждым и каждым из них, но это невозможно в конечном итоге с большим количеством переменных. Наверняка, должен быть еще какой-то питонический путь?

Для получения разъяснений по использованию: код используется внутри функции, которая принимает один аргумент (1 из 4 переменных за один раз), в зависимости от того, какой (var1-4) различных распечаток должны быть сделаны. Переменные вводятся пользователем, хранящиеся вне функции, и могут находиться в диапазоне 0-10, независимо друг от друга.

+2

' list' никогда не будет равен «int», если вы не измените их до неузнаваемости. Вам действительно нужно проверить [официальный учебник Python] (https://docs.python.org/3.4/tutorial/index.html). – TigerhawkT3

+0

С проблемой, которую вы пытаетесь решить с помощью этого кода? –

+1

Что такое 'test'? Что означает «если они пройдены»? Что означает «если это var1»? Что именно вы пытаетесь сделать здесь? – tzaman

ответ

1

Вы сравниваете целое число со списком, который всегда будет иметь значение False.

Я предполагаю, что вы пытаетесь проверить, если все значения в списке равен 1. Вы можете сделать это так:

all(item == 1 for item in items) 

Вы также можете сделать это:

if var1==var2==var3==var4==1: 
print "ok" 
+0

Да, за исключением того, что на самом деле нет реального списка, просто 4 переменных. Поскольку i_could_ проверяет то же, если какой-либо из 4 варов соответствует аргументу, переданному функции ('if arg in [var1, var2, var3, var4]'), я думал, что то же самое можно было бы сделать для проверки того, они содержали определенный int ('[var1, var2, var3, var4] == 1'). К сожалению, не так просто. –

+0

@poccapx фактически даже в первой части, вы создаете список, а затем сравниваете, существует ли какой-либо конкретный элемент в этом списке, поэтому он работает. Но во втором зелье вы формируете список, но сравниваете его с int, что недопустимо. Если вы не предоставляете список, то вы можете просто сделать, если var1 == 1 и var2 == 1 и var3 == 1 и var4 == 1. –

+0

Я вижу. Есть ли более короткий путь, за исключением списка, без записи == 1 четыре раза? Учитывая, что может быть еще больше варров. –

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