Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2022 21:24:12

Renaldas
Зарегистрирован: 2021-02-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

xam1816
Выложите сюда свой код, который изначально у вас был на одном файле
Там 2000 строк кривого кода, наврядли вам будет интересно его анализировать. Вот один из самых кривых модулей, который втиснут в функцию (как уже писал, я тогда не знал, что def - это функция, я ее применял как модуль, как что-то, что будет много раз повторяться). И таких “модулей 20 на всю программу. Хочется их сделать истинными модулями с правильной передачей переменных, но иначе не умею, только так и с глобальными переменными.
Вот эта вся фиговина (это модуль парсинга etherscan - блокчейна эфира) и делает кучу реквестов, и считает параметры по монете, и создает словари, и короче всего очень много, потом десяток других ”модулей" (опять же функций) забирают глобальные переменные и делают то же самое. Работать работает, но я уже сам вижу, насколько сложно все выглядит.


 def etherscan_parser(condition):
    global last_eth_block, eth_difficulty, profitability, block_profitability, lowest_theoretical_profitability, lowest_theoretical_profitability_truncated_list_avg, block_rewards_truncated_list_avg, profitability_truncated_list_avg,\
        block_rewards_list, flexpool_block_rewards_list, profitability_list, limited_profitability_list, tx_fees_list, tx_fees_list1_avg
    tx_fees_list = []
    block_rewards_list = []
    flexpool_block_rewards_list = []
    profitability_list = []
    limited_profitability_list = []
    lowest_theoretical_profitability_list = []
    try:
        if condition is True:
            etherscan_request = requests.get('https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=xxxxxx').json()
            last_eth_block_hex = etherscan_request['result']
            last_eth_block = int(last_eth_block_hex, 16)
            last_eth_block = last_eth_block - 10  # берем чуть более давние блоки, так как данные о самых последних блоках иногда поступают с небольшим опознаднием
            last_eth_block_hex = hex(last_eth_block)  # снова переводим в hex, так как надо будет брать difficulty, а ее из-за запаздывания информации по последнему блоку еще нет
            last_eth_block_data = requests.get('https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=' + str(last_eth_block_hex) + '&boolean=true&apikey=xxxxxx').json()
            eth_difficulty = int(last_eth_block_data['result']['difficulty'], 16)
        etherscan_request = requests.get('https://api.etherscan.io/api?module=block&action=getblockreward&blockno=' + str(last_eth_block) + '&apikey=xxxxxx').json()
        block_status = (etherscan_request['status'])
        while block_status == '1':  # block_status is str!!
            blocknumber = int(etherscan_request['result']['blockNumber'])
            block_data_etherscan_dict[blocknumber] = etherscan_request['result']
            last_eth_block += 1
            time.sleep(short_iteration_pause)
            etherscan_request = requests.get('https://api.etherscan.io/api?module=block&action=getblockreward&blockno=' + str(last_eth_block) + '&apikey=xxxxxx').json()
            block_status = etherscan_request['status']
        for blocknumber in block_data_etherscan_dict.keys():
            timestamp = int(block_data_etherscan_dict[blocknumber]['timeStamp'])
            block_reward = int(block_data_etherscan_dict[blocknumber]['blockReward']) / 1000000000000000000
            block_profitability = (86400 * 1000000000000 * block_reward * eth_btc_exchange_rate / eth_difficulty) * (1 - orphan_rate)
            print('Block profitability =', block_profitability, '; block# =', blocknumber, 'reward =', block_reward, 'difficulty =', eth_difficulty)
            if block_profitability > profitability_limit:
                limited_block_profitability = profitability_limit
            else:
                limited_block_profitability = block_profitability
            lowest_theoretical_profitability = (1000000000000 * (average_uncle_reward + 0.0625 + (2 - average_uncle_reward - 0.0625) * (1 - uncle_rate)) * (1 - orphan_rate) / eth_difficulty) * 86400 * eth_btc_exchange_rate  # 1.8125 = 1.75 + 0.0625 inclusion reward, 0.1875 = 2 - 1.8125. Only 1.75 ETH uncles calculated
            uncle_inclusion_reward = int(block_data_etherscan_dict[blocknumber]['uncleInclusionReward']) / 1000000000000000000
            block_miner = block_data_etherscan_dict[blocknumber]['blockMiner']
            my_etherscan_dict[blocknumber] = {'block_reward': block_reward,
                                              'tx_fees': block_reward - 2 - uncle_inclusion_reward,
                                              'timestamp': timestamp,
                                              'block_profitability': block_profitability,
                                              'uncle_reward': [],
                                              'uncle_profitability': [],
                                              'uncle_miner': [],
                                              'lowest_theoretical_profitability': lowest_theoretical_profitability,
                                              'limited_block_profitability': limited_block_profitability,
                                              'limited_uncle_profitability': [],
                                              'uncle_inclusion_reward': uncle_inclusion_reward,
                                              'block_miner': block_miner}
            tx_fees_list.append(my_etherscan_dict[blocknumber]['tx_fees'])
            tx_fees_list1 = tx_fees_list[-10:]
            tx_fees_list1_avg = statistics.mean(tx_fees_list1)
            for x in range(0, len(block_data_etherscan_dict[blocknumber]['uncles'])):
                uncle_reward = int(block_data_etherscan_dict[blocknumber]['uncles'][x]['blockreward']) / 1000000000000000000
                uncle_profitability = (86400 * 1000000000000 * uncle_reward * eth_btc_exchange_rate / eth_difficulty) * (1 - orphan_rate)
                uncle_miner = block_data_etherscan_dict[blocknumber]['uncles'][x]['miner']
                my_etherscan_dict[blocknumber]['uncle_profitability'].append(uncle_profitability)
                my_etherscan_dict[blocknumber]['uncle_reward'].append(uncle_reward)
                my_etherscan_dict[blocknumber]['uncle_miner'].append(uncle_miner)
                if uncle_profitability > profitability_limit:
                    limited_uncle_profitability = profitability_limit
                else:
                    limited_uncle_profitability = uncle_profitability
                my_etherscan_dict[blocknumber]['limited_uncle_profitability'].append(limited_uncle_profitability)
        for blocknumber in my_etherscan_dict.keys():
            block_rewards_list.append(my_etherscan_dict[blocknumber]['block_reward'])
            if my_etherscan_dict[blocknumber]['block_miner'] == '0x7f101fe45e6649a6fb8f3f8b43ed03d353f2b90c':
                flexpool_block_rewards_list.append(my_etherscan_dict[blocknumber]['block_reward'])
            profitability_list.append(my_etherscan_dict[blocknumber]['block_profitability'])
            limited_profitability_list.append(my_etherscan_dict[blocknumber]['limited_block_profitability'])
            lowest_theoretical_profitability_list.append(my_etherscan_dict[blocknumber]['lowest_theoretical_profitability'])
            for x in range(0, len(my_etherscan_dict[blocknumber]['uncle_profitability'])):
                block_rewards_list.append(my_etherscan_dict[blocknumber]['uncle_reward'][x])
                if my_etherscan_dict[blocknumber]['uncle_miner'][x] == '0x7f101fe45e6649a6fb8f3f8b43ed03d353f2b90c':
                    flexpool_block_rewards_list.append(my_etherscan_dict[blocknumber]['uncle_reward'][x])
                profitability_list.append(my_etherscan_dict[blocknumber]['uncle_profitability'][x])
                limited_profitability_list.append(my_etherscan_dict[blocknumber]['limited_uncle_profitability'][x])
            block_reward_truncated_list = block_rewards_list[int(-4.545 * minutes_to_average_for_blockchain_profitability):]
            profitability_truncated_list = profitability_list[int(-4.545 * minutes_to_average_for_blockchain_profitability):]
            limited_profitability_truncated_list = limited_profitability_list[int(-4.545 * minutes_to_average_for_blockchain_profitability):]
            lowest_theoretical_profitability_truncated_list = lowest_theoretical_profitability_list[int(-4.545 * minutes_to_average_for_blockchain_profitability):]
        # LIST AVERAGES
        block_rewards_list_avg = round(statistics.mean(block_rewards_list), 3)
        block_rewards_truncated_list_avg = round(statistics.mean(block_reward_truncated_list), 3)
        try:
            flexpool_block_rewards_list_avg = round(statistics.mean(flexpool_block_rewards_list), 3)  # если в последних блоках нет блока от flexpool, программа тут останавливается
        except:
            pass
        profitability_truncated_list_avg = round(statistics.mean(profitability_truncated_list), 3)
        limited_profitability_truncated_list_avg = profitability = round(statistics.mean(limited_profitability_truncated_list), 3)  # ТУТ ОСНОВНОЕ ЗНАЧЕНИЕ profitability !!!
        lowest_theoretical_profitability_truncated_list_avg = round(statistics.mean(lowest_theoretical_profitability_truncated_list), 3)
        # COLLECTING TO MY OUTPUT DICT
        output_data_dict['block_rewards_list_avg'] = block_rewards_list_avg
        try:
            output_data_dict['flexpool_block_reward_etherscan_avg'] = flexpool_block_rewards_list_avg  # если в последних блоках нет блока от flexpool, программа тут останавливается
        except:
            pass
        output_data_dict['block_rewards_truncated_list_avg'] = block_rewards_truncated_list_avg
        output_data_dict['profitability_truncated_list_avg'] = profitability_truncated_list_avg
        output_data_dict['profitability'] = profitability
        output_data_dict['lowest_theoretical_profitability_truncated_list_avg'] = lowest_theoretical_profitability_truncated_list_avg
        full_profitability_to_lowest_profitability_ratio = round(100 * profitability_truncated_list_avg / lowest_theoretical_profitability_truncated_list_avg, 2)
        full_profitability_to_lowest_profitability_ratio_list.append(full_profitability_to_lowest_profitability_ratio)
        reward_and_profitability_avg_by_timestamp_dict[int(time.time())] = {'block_rewards_list_avg': round(statistics.mean(block_rewards_list), 3),
                                                                            'block_rewards_truncated_list_avg': block_rewards_truncated_list_avg,
                                                                            'profitability': profitability,
                                                                            'profitability_truncated_list_avg': profitability_truncated_list_avg,
                                                                            'lowest_theoretical_profitability_truncated_list_avg': lowest_theoretical_profitability_truncated_list_avg}
        try:
            last_eth_block_hex = hex(last_eth_block)
            last_eth_block_data = requests.get('https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=' + str(last_eth_block_hex) + '&boolean=true&apikey=xxxxxx').json()
            eth_difficulty = int(last_eth_block_data['result']['difficulty'], 16)
        except:
            pass
    except:
        print('eth_block_reward_etherscan error')

Отредактировано Renaldas (Фев. 11, 2022 21:32:19)

Офлайн

#2 Фев. 12, 2022 01:55:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

Renaldas
Новичок самоучка по Питону.
Renaldas
Вот один из самых кривых модулей, который втиснут в функцию
Да ты просто программировать не умеешь. Это всё вообще не так делается обычно.
Тут описывал подходы.
Тут приводил пример разработки.



Отредактировано py.user.next (Фев. 12, 2022 01:56:51)

Офлайн

#3 Фев. 12, 2022 13:08:00

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

Renaldas
я тогда не знал, что def - это функция, я ее применял как модуль, как что-то, что будет много раз повторяться
Вот здесь как раз нужно понять: функция - это то что будет использоваться - “вызываться” много раз.
Если пишешь код и понимаешь, что строки кода, которые выполняют по сути одно и тоже, ты копируешь и вставляешь их еще где-то потом,только меняешь значения, то их нужно заключить в функцию.
*
Как только у тебя скопилось много всяких функций, ты их раскладываешь по ящикам - в программировании их называют модулями.Это если представить рабочий стол(основной файл), а под столом шкафчик с ящиками(модули -другие файлы), в которых лежат приборы(функции или классы).Когда пишешь import модуль-файл это равносильно тому, что достал ящик с приборами и положил его на рабочий стол.Теперь когда что-то нужно, ящик у тебя под рукой и ты лезешь в него и достаешь прибор = модуль.функция().Можно написать from модуль import функция это как если открыть ящик, достать прибор и положить его на стол, это как в основном файле вызываешь сразу без точки функция().Но тут одна особенность,если у тебя два одинаковых на вид прибора,которые делают немного разные вещи,и лежат в разных ящиках, то если ты их выложишь рядом на стол, то как поймешь какой из них что делает?,ведь их можно различить только по ящикам в которых они лежат.Из-за этого в коде пишут import ДлинноеНазваниеМодуля as днм и потом используют днм.функция().

Офлайн

#4 Фев. 12, 2022 17:55:29

Renaldas
Зарегистрирован: 2021-02-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

py.user.next
А откуда мне уметь, я же врач по специальности. Наверное, мой уровень программирования примерно равен твоему уровню колупания в каналах зубов. Ну и ничего страшного, определенные практические цели даже неумелым программированием были достигнуты, пробую учиться дальше

Офлайн

#5 Фев. 12, 2022 18:11:40

Renaldas
Зарегистрирован: 2021-02-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

xam1816
К сожалению, так как я учился по принципу эмпирической обратной связи (типа, выполяняется ли практически то, что мне нужно), понять я этого не мог. Как уже писал, я def считал просто как бы модулем программы, и о том, что это функция, которая что-то получает на вход и что-то выдает, сообразил только после месяцев попыток. До этого в def я клал кусок кода, который хотел повторять, вне зависимости от длины, все нужное обзывал глобальными переменными, и как-то крутился.
Получается, то что я выставил тут, должно было бы быть модулем с 20-30 функций в нем, так?

Если взять конкретный пример того “модуля”, что я выставил, то, например переменную с номером блока я должен был бы записать отдельной функцией, и так написать под 20-30 коротеньких функций для каждой переменной, и их объединить в модуль?

 def last_block_number():
    etherscan_request = requests.get('https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=xxx').json()
    last_block = int(etherscan_request['result'], 16)
    return last_block

Отредактировано Renaldas (Фев. 12, 2022 18:12:12)

Офлайн

#6 Фев. 13, 2022 00:48:39

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

Renaldas
и их объединить в модуль?
вы сначала просто код соберите в функции, без потери работоспособности
сделайте функции которые обрабатывают последовательности.Чтобы в коде не было
for i in seq:
делаем что-то с i
на пол страницы

а была описана одна функция
def func(seq):
делаем что-то с seq
return result
и потом в коде когда нужно из последовательности получить результат
result = func(seq)

сделайте функцию которая проверяет на условие
def is_valid(var):
if var == чему-нибудь:
if var in в какой-нибудь последовательности
return True

и потом в коде уже не повторяем весь этот набор условий
а просто пишем
 if is_valid(var):
    some_list.append(var)

сделайте функцию которая приводит в нужный вид
def str_to_other(string):
какую-то строку string мы преобразуем в другую херню
по какому-нибудь условию
return эту херню

ну и в таком духе

Офлайн

#7 Фев. 13, 2022 04:09:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

Renaldas
А откуда мне уметь, я же врач по специальности.
Это плохо, конечно, специальность для программирования ужасная. У строителя какого-нибудь больше шансов, хотя он вроде бы выглядит тупо. Создание программы очень сильно напоминает построение дома. Чтобы построить первый этаж, нужно заложить фундамент. Чтобы построить второй этаж, нужно построить первый этаж. Так что у строителя больше шансов.

А врач будет действовать так: я сейчас применю вот это и тут же применю вот это, а потом применю ещё вот это - и оно всё само заработает, буду ждать. Ха… ха… ха… И ничего не происходит. То есть это такой вредный паттерн мышления, который создаёт ложную уверенность в том, что всё получится. Естественно, когда ничего само не начинает фурычить, врач в этом же паттерне думает, что применил что-то не то и надо было применить другое. Так что ты в замкнутом круге находишься и тебе очень сложно будет выйти из этого паттерна. Будешь нам рассказывать, как ты знаешь сто пятьсот методов лечения разных болезней, а мы тебя мол просто критикуем из: 1) зависти к тому, как ты очень быстро всё осваиваешь в сфере программирования, в отличие от нас, тормозов каких-то напыщенных к тому же; 2) защиты нашей сферы от новичков, которые сейчас загребут у нас все наши деньги, которые нам достаются просто так, а мы останемся ни с чем; 3) осознания того, как мы глупы, что даже не знаем элементарнейшего про наш организм, и боимся открыть это незнание на всеобщее обозрение из-за тебя, эксперта в этой области, посмеющегося над нами в этот момент; ну, и многого-многого другого подобного.

Ведь именно из-за этого я тебе сказал, что ты не умеешь программировать вообще, а не потому, что увидел этот код твой в таком вот виде, который тут редко увидишь. Это даже можно в музей класть. Это действительно большая редкость. Это даже как чёрный квадрат Малевича можно будет продавать потом. И мне, конечно, стало тебя даже жалко, когда я подумал, сколько ты трудился над ним, выдумывая эти километровые имена, запускал это сто пятьсот раз после каждого такого придуманного имени, чтобы получить обратную связь, не сломалось ли чего-нибудь. И тут какой-то хер говорит “а ты программировать-то не умеешь! совсем!”. Да как он может такое говорить! Я же столько трудился! Точно завидует мне.

Renaldas
ой уровень программирования примерно равен твоему уровню колупания в каналах зубов
Ну вот ты заходишь к стоматологу в кабинет, а у него, значит, такой стенд, в котором лежат красивые такие инструменты типа дрель Bosh для сверления стен и закручивания шурупов, потом кувалда от Matrix там или чего-нибудь такого с резиновой ручкой, топор такой английский, ну и так далее. А зашёл ты там пломбу посмотреть или что-то наподобие. И он тебе говорит такой “садитесь!”. Ты такой “куда?”. Он такой “ну вот, вы что не видите, кресло стоит кожаное, вот в нём будем всё проверять”. Ну и всё, и ты ему говоришь “а вы точно стоматолог?”, ты-то знаешь, что он вообще какой-то левый, что он не врач даже, не медик. А он тебе говорит “да, я стоматолог, я честно признаюсь, я практикант, но вы можете на каждый инструмент посмотреть, там везде стоит моя эмблема и на ней написано, что я стоматолог, то есть это всё серьёзно, это операционный кабинет”. Ну, ты видишь, что это всё надо выкинуть, а это всё стоит целую гору денег, которые он на это потратил, всё это расставлял он там, кто-то наносил ему эту лазерную гравировку его эмблемы тоже не за бесплатно. И ты видишь, что он не мошенник, а просто верит, что так можно лечить людей. И он даже сделал им удобное кресло.

Renaldas
Получается, то что я выставил тут, должно было бы быть модулем с 20-30 функций в нем, так?
То, что ты выставил, примерно функций 100-200 займёт. Вообще, функций много не бывает. Пиши функцию, не боись, потому что она как раз тебя спасёт. А вот отсутствие функции, оно как раз тебя угробит. Выглядеть это будет так: через месяц поменяется какая-нибудь форма хешей без предупреждения, и из-за этого тебе нужно будет переписать примерно две тысячи строк; потом через месяц поменяется ещё какой-нибудь функционал, и тебе из-за этого нужно будет поменять ещё две тысячи строк, а из-за них, так как ты их поменял, надо будет возвращаться к первым двумя тысячам строк и менять их снова - то есть получится, что надо в целом пять тысяч строк поменять. И потом ты со страхом будешь ждать “а не поменяют ли там опять что-нибудь через месяц, из-за чего мне придётся выделять неделю своего времени, чтобы просто сохранить программу рабочей, так как она каждый раз ломается, из-за того что там опять что-то поменяли”. Вот чтобы этого не было, нужно чтобы всё было изолировано. Это как на машине: вот ты едешь, раз и прокололось колесо; ты выходишь, это колесо снимаешь, из багажника достаёшь другое колесо и ставишь на место проколотого колеса; дальше едешь как ни в чём ни бывало. Колесо изолировано от машины, благодаря чему ты и можешь это всё проделать за короткий срок. А вот если ты ехал в машине и случайно скальпелем, который там выпал как-то, пробил ногу себе, ты не можешь отстегнуть ногу и другую ногу поставить, надо ехать в больницу, а все дела эти, куда ты ехал, надо отменять. Это произошло потому, что нога от тела не изолирована. Вроде повреждена только нога, а влияет это на всё тело.

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

Вот в строительстве таких понятий, которые нужны для создания изолированности, есть много, а в медицине их практически нет. Поэтому строяку будет проще перейти на программирование, чем медику. Поэтому у тебя с твоим опытом в медицине в коде изолированности вообще никакой не наблюдается. Любое ранение приведёт к тому, что всей программе хана. Ты не сможешь быстро отстегнуть-пристегнуть повреждённый кусок. А у строяка - что-то сломалось, он это просто отдирает докуда-то, не всё и не целиком, а потом просто новое на том месте строит и всё фурычит, как будто и не ломалось.

Так что первым делом тебе мышление надо поменять, до обучения ещё. Иначе ты так и будешь делать хуету всякую и думать что писец какой ты умный, ты же столько лет потратил на чо-то там.



Офлайн

#8 Фев. 13, 2022 09:14:53

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

да блин хорошь над человеком прикалываться киньте …

короч эээ берешь лутца первыи и второй том (изучаем на питон) эт около 2000 ст.
потом берешь первый и второй том его же (прагроммируем на питон) тож около 2000 ст.
и втыкаешь все это (просто следуй правилу столько то страниц в день)
если есть непнятки гугл и что там у тебя в помощь
все у тебя есть база по языку (ну там еще много чего но оно такое не первой необходимости)
дальше более общее
ну там …

алгоритмы
базы данных
структуры данных
итд это если нужно потом подтянешь

а ваша эмпирика очень затратна по времени



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#9 Фев. 13, 2022 09:21:31

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

блин хорошь над человеком прикалываться киньте …
короч эээ берешь лутца первыи и второй том (изучаем питон) эт около 2000 ст.
потом берешь первый и второй том его же (прагроммируем на питон) тож около 2000 ст.
и втыкаешь все это (просто следуй правилу столько то страниц в день)
если есть непнятки гугл и что там у тебя в помощь
все у тебя есть база по языку (ну там еще много чего но оно такое не первой необходимости)
дальше более общее
ну там …
алгоритмы базы данных
структуры данных
итд
это если нужно потом подтянешь
а ваша эмпирика очень затратна по времени
зы кнешно практику забрасывать не стоит но основной упор на изучение вот и все



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Фев. 13, 2022 09:23:47)

Офлайн

#10 Март 1, 2022 02:03:36

Renaldas
Зарегистрирован: 2021-02-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Как "запустить" модуль, в котором нет функций?

Спасибо всем, к сожалению, похоже, на более высокий уровень более правильного программирования, как я вижу, мне не перейти, так как я просто на уровне большинства вас в моей специальности
К счастью, ну хоть работоспособный код получается, какой бы он там кривым не был бы. Похоже, врачам учиться программированию пока что можно только эмпирически, путем обратной связи “работает - не трогаем”, “не работает - меняем до тех пор, пока заработает”. Либо просто менять специальность и уделять годы времени программированию, что, пока, не получается

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version