Увеличивается на единицу автоматически на - "число" в операторе if - PullRequest
0 голосов
/ 17 марта 2012

У меня проблема в Python.

Как я могу на единицу автоматически увеличить «число», присутствующее в этом операторе if?

Пример, чтобы понять меня.У меня такая ситуация

def name1:
    if (dictionary[class.methodclass()][constant - 1] == dictionary[class.methodclass()][constant - 2] == dictionary[class.methodclass()][constant - 3] == ldictionary[class.methodclass()][constant - 4] == dictionary[class.methodclass()][constant - 5]):
        blablabla

def name2:
    if (dictionary[class.methodclass()][constant - 1] == dictionary[class.methodclass()][constant - 2] == dictionary[class.methodclass()][constant - 3] == ldictionary[class.methodclass()][constant - 4]):
        blabla

def name3:
    if (dictionary[class.methodclass()][constant - 1] == dictionary[class.methodclass()][constant - 2] == dictionary[class.methodclass()][constant - 3]):
        blabla

Я повторяю тот же код, так как этого избежать?

Спасибо

Редактировать: у меня нормальный диктонар, такой как

dictonary = {"Element": ["Key1", "Key2"]}

Мне нужен цикл, который подтверждает, что я работаю с делом "Key1" == "Key2".

Ответы [ 3 ]

1 голос
/ 17 марта 2012

Это способ:

if all ( [ dictionary[class.methodclass()][constant - 1] ==  
           dictionary[class.methodclass()][ noConstant]  
           for noConstant in range(constant - 2,  constant - 6, -1 )  ]
       ):
    blablabla
0 голосов
/ 17 марта 2012

Ваша задача состоит из двух частей:

а) У вас есть несколько функций, которые повторяют один и тот же сложный тест.

Решение: Если тест достаточно сложный, выделите его в отдельную функцию, которая возвращает True или False. Используйте его в каждой из ваших функций nameN.

б) У вас есть тест, который проверяет, все ли серии элементов одинаковы. Используя простую версию в вашем редакторе: учитывая список словарных ключей, убедитесь, что все значения одинаковы.

Решение: получить все значения, сформировать набор и проверить его размер:

tocheck = [ "Key1", "Key2" ]
values = set( mydict[k] for k in tocheck )
if len(values) == 1:
    print "equal"
else:
    print "unequal"

Вы можете адаптировать тот же подход к исходному коду: написать понимание (или любой другой вид цикла), которое собирает в набор все сравниваемые значения. Если вы делаете это много, вам стоит настроить простую функцию, которая инкапсулирует этот вид теста.

0 голосов
/ 17 марта 2012

Основная цель, которую я могу обобщить из вашего кода, заключается в следующем: определить, все ли значения в определенном разделе списка одинаковы.

Согласно этой логике мы можем написать функцию для архивирования:

def is_list_section_repeated(li, start, end):
    section = li[start:end]
    if section.count(section[0]) == len(section):
        return True
    return False

С помощью этой функции ваш код может быть:

def name1:
    if is_list_section_repeated(dictionary[class.methodclass()], constant - 5, constant - 1):
        blablabla

def name2:
    if is_list_section_repeated(dictionary[class.methodclass()], constant - 4, constant - 1):
        blablabla

....

Поскольку ситуация довольно сложная, как и в большинстве распространенных случаев, я думаю, что написать функцию для ее обработки лучше, чемиспользуйте хитрые трюки, которые могут сделать код неясным и трудным для чтения: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...