Найти - Пользователи
Полная версия: удобная запись циклов
Начало » Python для новичков » удобная запись циклов
1
Marat__
Здравствуйте. Есть громоздкий скрипт с циклом внутри цикла:

for Target in target_index:
b=0
for year in YEAR:
“ооочень длинный скрипт чьи результаты записываются в файл”


….

Есть необходимость воткнуть внутрь третий цикл по условию результата записанному в файл в вышеизложенном скрипте. Если воткнуть напрямую получится уж совсем громоздко, некрасиво, непонятно, нечто в чем я совершенно запутаюсь. Как новичок хотел спросить-есть ли у Python инструмент который позволит решить данную задачу в более изящном виде. Как то разбить скрипт на отдельные части, подкачивать куски скрипты из другого файла, описать целые куски скрипта одной строчкой. Одним словом чтобы цикл в цикле и еще раз в цикле не превращался в какую то невразумительную кашу, в которой сам написавший его не мог разобраться.
Спасибо.
py.user.next
Тебе надо использовать функции - то есть создавать свои функции.

Тут выкладывал ссылки на сообщения. Там описано, как нужно проектировать программу.

Пример:
Было у тебя так
  
for i in range(3):
    print(1)
    print(2)
    print(3)

А делаешь ты из этого так
  
def repeat3():
    for i in range(3):
        print123()
 
def print123():
    print(1)
    print(2)
    print(3)
 
repeat3()

Результат один и тот же
  
>>> for i in range(3):
...     print(1)
...     print(2)
...     print(3)
... 
1
2
3
1
2
3
1
2
3
>>>
  
>>> def repeat3():
...     for i in range(3):
...         print123()
... 
>>> def print123():
...     print(1)
...     print(2)
...     print(3)
... 
>>> repeat3()
1
2
3
1
2
3
1
2
3
>>>
Но спроектировано оно по-разному. Функции всегда остаются маленькими, даже если их сотни, в то время как монолитный код только растёт и превращается во что-то неразделимое и огромное.


tags: procedural to structured paradigm
Marat__
Спасибо за ответ. В моем сообщении табуляция не прошла и в сообщении код отобразился не таким какой он есть на самом деле. Если можете посмотрите, пожалуйста, прикреплённый файл, может посоветуете как сделать эту кашу читаемой под дополнительные циклы внутри циклов.
Marat__
Попробую описать что мне нужно сделать:

1. Есть таблица с данными, по горизонтали данные по годам (с 2000 по 2010 год), по вертикали таргет и параметры (20 штук).
2. Надо сначала взяв один параметр и 2000 год загнать это в модель получив прогноз. Затем взять два параметра и 2000 год получить второй прогноз, 3 параметра по 2000 году итд по циклу пока не закончатся все параметры.
3. Закончив цикл по параметрам начинаю цикл по годам
4. Все полученные прогнозы сохраняю в файл, в итоге получив 10*20=200 набора прогноза.
На этом уровне уже получается сложный для понимания скрипт.
а надо добавлять еще один цикл, где я буду по результату сравнения прогноза и фактических данных, производить дополнительные действия.
Вот в какую форму все это облечь, чтобы код был читаемым и красивым.
Спасибо.
AD0DE412
Marat__
код отобразился не таким какой он есть на самом деле.
py.user.next
Marat__
В моем сообщении табуляция не прошла и в сообщении код отобразился не таким какой он есть на самом деле.
Для этого нужно указать форумскому движку, что это не просто текст для людей, а код, который нужно передать точно.
[code][/code]
И это на всех форумах так, где есть передача кода.

Marat__
Если можете посмотрите, пожалуйста, прикреплённый файл
Лучше передавай код (напрямую или в архиве). Иначе мне сначала приходится читать этот сырой файл, чтобы убедиться, что там нет взламывающих конструкций, а уже потом подключать его через notebook, которым я редко когда пользуюсь. Так что код твой не смотрел.

Marat__
Попробую описать что мне нужно сделать:
Независимо от того, что тебе нужно сделать, делается оно всегда по одним и тем же правилам. Либо оно будет структурным, либо оно будет объектно-ориентированным, либо оно будет функциональным. До объектно-ориентированного ты и сам не дорос, как и уровень этой мелкой задачи. До функционального ты тоже не дорос, также в нём нет прямой необходимости. Поэтому тебе остаётся структурный подход. Потребность в упорядочивании кода, выросшего в объёме, об этом прямо говорит. Ты уже не можешь оставаться на процедурном уровне, где максисмум, что есть, - просто функции (процедуры). Нужна разработка “сверху вниз”, нужно свести всё к “последовательность-ветвление-цикл”, нужно использовать “подпрограммы”. Тогда код будет большим, но состоящим из мелких разграниченных кусков - как подводная лодка или как змея из сегментов. Там можно любой отсек или сегмент выключить или заменить на пустоту (заменить на stub - заглушку), какого бы размера он ни был, и всё будет продолжать работать в целом.
xam1816
Marat__
Вот в какую форму все это облечь, чтобы код был читаемым и красивым

мне представляется ваша задача примерно так:

 a = list(range(10)) # это параметры года
b = list(range(10,20)) # это параметры года
dict = {2000:a,            # это таблица,где каждому году соответствуют параметры
		2001:b}
def func(a,n=1): # это функция принимает список "а", и сколько элементов вернуть "n"
	list = []
	i = 0
	while i < n:
		list.append(a[i])
		i+=1
	return list
for year in dict: # для каждого года из таблицы
	print(year)
	for n in range(1,11): # для n из диапазона
		print(func(dict.get(year),n)) # функция func(a,n)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB