С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74

Python без goto. Как жить (выжить)

03.03.2024, 15:39. Показов 1871. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всю свою инженерную жизнь, начиная с Алгола, Фортрана, PL1, Паскаля, Ассемблера, С/C++ и C#, программировал компьютеры и микроконтроллеры с оператором goto, и он мне не мешал. В Python его нет, что создает мне неудобства при ветвлениях в алгоритмах. Подскажите, где почитать и научиться программированию в Python без goto, или найти ему замену.
Слышал как-то, что в коды интерпретатора Python можно вставлять фрагменты кодов из компилятора C/C++. Это поможет?
Python мне нравится, особенно в связке с библиотеками от Qt5.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2024, 15:39
Ответы с готовыми решениями:

Превращение кода с goto в код без goto
Помогите переписать это код без goto и потери производительности.А то мне кажется написано совершенно не оптимально.if(f>0) { ...

Можно ли выжить без C++/CLI?
Наверное немного глупый вопрос, но можно ли разрабатывать приложения без C++/CLI? То есть на чистом С++. Я насколько знаю, что в QT...

Модем без функции DDNS - как жить
есть 4G модем от Билайна - l02hi и rapsberry pi + несколько компов цель - доступ к сети (малина+pc) через инет используя ddns ...

37
6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74
05.03.2024, 15:04  [ТС]
Студворк — интернет-сервис помощи студентам
idealist, я слышал, что основном апологетом отказа от goto является Дейкстра. Мы используем в своих программах его алгоритм нахождения кратчайшего или оптимального маршрута на электронных картах среди множества возможных, здесь все работает отлично. Считаю все же, что goto он мог бы и не уничтожать. Да ладно, сейчас моя задача, подстроиться к новой реальности в Python без goto, а это пока не легко. Буду еще разбираться.

YuS_2, Вы пишите: "Но тут Рыжий Лис, полностью прав, это даже не просто плохая практика, а очень плохая , т.к. получаем на выходе слишком грязные функции и методы...Это просто демонстрация отсутствия жизненной необходимости в инструкции GOTO, даже для гипотетических случаев..."
Тогда, какая практика в Python считается хорошей. При том, что я уже согласился решать в Python подобные ветвления данным методом, и не вижу пока других.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.03.2024, 15:24
Не понимаю причём здесь именно питон. Возьмите любые другие языки без goto: ява, C#, Rust, Lua/что угодно. Во всех одинаковые конструкции ветвления, цикла, функции.
0
Любознательный
 Аватар для YuS_2
7404 / 2253 / 360
Регистрация: 10.03.2016
Сообщений: 5,212
05.03.2024, 15:57
Цитата Сообщение от NewEmbedder Посмотреть сообщение
Тогда, какая практика в Python считается хорошей
В паре слов это, наверное, сложно рассказать... но главное, как и в любом ЯП - это составление алгоритмов с описания задачи, то бишь словесного алгоритма, по сути. А чтобы писать на ЯП, его прежде необходимо изучить в подробностях... если речь о Питоне, то советую книгу М.Лутца "Изучаем Python", а там по мере изучения и вопросы отпадут сами собой...

Добавлено через 43 секунды
Цитата Сообщение от NewEmbedder Посмотреть сообщение
согласился решать в Python подобные ветвления данным методом, и не вижу пока других.
это пока... надо просто поближе познакомиться с Питоном...
0
6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74
05.03.2024, 16:01  [ТС]
Рыжий Лис Согласен. Спасибо, Ваши подсказки еще будут полезны. Я получил ответы на большую часть своих вопросов.

YuS_2, Вам тоже спасибо, все советы дельные. Книгу скачаю.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.03.2024, 18:51
Рыжий Лис, в люа гото есть.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
05.03.2024, 23:19
Сейчас посмотрел, оказывается, в C# тоже есть гото. Честно скажу, не ожидал.

Ответ простой, с гото код становится бесструктурной лапшой, в которой хрен разберёшься. Вам он не мешает, а вот тот, кто этот код будет читать, потом вас проклянёт и будет абсолютно прав.
Цитата Сообщение от NewEmbedder Посмотреть сообщение
Слышал, что в Python сворачивают отдельные группы операндов в def,
О, сколько вам ещё предстоит открытий чудных...
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
06.03.2024, 11:08
Цитата Сообщение от dondublon Посмотреть сообщение
Ответ простой, с гото код становится бесструктурной лапшой
- совсем не обязательно. Кроме того реализация императивных вычислений (на низком уровне) без GoTo невозможна в принципе. Т.е. исходный код виртуальных машин Java, .Net и Python содержат GoTo (и лапшой не являются).

Борьба с GoTo вполне органично смотрелась лет 50-60 назад. А сейчас - это эпигонство и докринёрство.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
06.03.2024, 11:54
Цитата Сообщение от Catstail Посмотреть сообщение
- совсем не обязательно.
Обязательно, если пишете хоть что-то сложное, более чем на 1000 строк и более чем один разработчик.
Цитата Сообщение от Catstail Посмотреть сообщение
. Кроме того реализация императивных вычислений (на низком уровне) без GoTo невозможна в принципе.
Без goto возможно всё. На низком уровне - ok. Чем выше уровень - тем более неуместен goto. В ассемблере jmp вполне уместен, ибо процессор так работает. Он же глупый, умеет мало. С++ - есть, но не рекомендуется. В C# я даже не знал, что он есть. Питон - нет, всё логично. Функциональщина - вообще не в кассу.
Цитата Сообщение от Catstail Посмотреть сообщение
н Java, .Net и Python содержат GoTo (и лапшой не являются).
Я не смотрел внутрь этих машин (разве что питона, немного, но goto там не видел), но сильно сомневаюсь.
Цитата Сообщение от Catstail Посмотреть сообщение
Борьба с GoTo вполне органично смотрелась лет 50-60 назад. А сейчас - это эпигонство и докринёрство.
Я-то думал, в этом вопросе все уже пришли к закономерному ответу, лет 50-60 назад, но нет, есть ещё ретрограды, которые спорят (Goto - за и против (2)) до сих пор.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.03.2024, 12:01
Цитата Сообщение от dondublon Посмотреть сообщение
Обязательно, если пишете хоть что-то сложное, более чем на 1000 строк.
Если честно, то мне без разницы используется goto или нет, если код структурирован (по функциям/модулям/итд). Тем более что низкоуровневый высокопроизводительный код итак начинает походить на ассемблер (при использовании Intrinsic function).

Но такой код большая редкость.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
06.03.2024, 19:20
Цитата Сообщение от dondublon Посмотреть сообщение
Обязательно, если пишете хоть что-то сложное, более чем на 1000 строк и более чем один разработчик.
- библиотека научных расчетов для Фортрана-IV писалась одним человеком? Нет. Является ли эта всемирно известная библиотека "лапшой"? Тоже нет. Собственно, всё.

Цитата Сообщение от dondublon Посмотреть сообщение
В ассемблере jmp вполне уместен, ибо процессор так работает.
Цитата Сообщение от dondublon Посмотреть сообщение
Я не смотрел внутрь этих машин (разве что питона, немного, но goto там не видел), но сильно сомневаюсь.
- а jump?
2
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
06.03.2024, 19:46
Цитата Сообщение от Catstail Посмотреть сообщение
- библиотека научных расчетов для Фортрана-IV писалась одним человеком? Нет. Является ли эта всемирно известная библиотека "лапшой"? Тоже нет. Собственно, всё.
Понятия не имею, является ли она лапшой. Вполне возможно. А если нет - значит, её писали люди очень строгих правил. Далеко не все коллективы будут эти правила соблюдать.
Кстати, Фортран-4, я посмотрел, вышел в 1957-м году. За 11 лет до классической статьи Дейкстры. Тогда goto был в порядке вещей. Эта библиотека, полагаю, тоже писалась где-то в те годы - прежде, чем выработались более безопасные подходы.

Что "всё"-то? Вы отрицаете, что с goto очень просто запутать код? Ну отрицайте, пишите, как хотите.

Цитата Сообщение от Catstail Посмотреть сообщение
- а jump?
Что jump?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
06.03.2024, 20:57
Цитата Сообщение от dondublon Посмотреть сообщение
Вы отрицаете, что с goto очень просто запутать код?
- не отрицаю. Я отрицаю несколько другое - то, что GoTo - причина всех бед. Это - неверный и поверхностный взгляд. т.е. эпигонство.

Сложность программы зависит от мышления программиста. Можно производить запутанный код и без использования GoTo. С другой стороны: что страшного, если на 5000 строк кода может встретиться пара GoTo? Мир от этого рухнет?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
06.03.2024, 21:37
Цитата Сообщение от Catstail Посмотреть сообщение
- библиотека научных расчетов для Фортрана-IV писалась одним человеком? Нет. Является ли эта всемирно известная библиотека "лапшой"? Тоже нет. Собственно, всё.
Ну, вы на фортран ссылаетесь как на что-то положительное. Но вот Дейкстра, например, очень недолюбливал и фортран, и его пользователей. Цитата:
"ФОРТРАН, инфантильное расстройство, которому уже почти 20 лет, безнадежно не подходит для любого компьютерного приложения, которое ты имеешь в виду сегодня: оно теперь слишком неуклюже, слишком рискованно и слишком дорого в использовании. "
Т.е. это говорилось когда фортрану было 20 лет. А сейчас ему почти семьдесят!

Цитата Сообщение от Catstail Посмотреть сообщение
Можно производить запутанный код и без использования GoTo
Ну, goto - это нарушение структурности, что резко понижает качество программы. В современном мире компьютерное время стоит очень дешево и продолжает дешеветь, а время программиста стоит дорого, поэтому сейчас ценятся программы пусть даже и более медленные, но с которыми легко работать программисту.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
06.03.2024, 21:47
idealist, Дейкстра, конечно, был человек авторитетный. Но Фортран (один из самых старых языков) жив и по сей день (несмотря на то, что Дейкстра его недолюбливал).

Цитата Сообщение от idealist Посмотреть сообщение
Ну, goto - это нарушение структурности, что резко понижает качество программы.
-

Вот два кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  for (int i=0; i<100; i++)
  {
       for (int j=0; j<100; j++)
       {
             for (int k=0; k<100; k++)
             {
                  ...
                  if (...) 
                  {
                       flag=1;
                       break;
                   }  
              }
              if (flag) break;
        }
  }
C
1
2
3
4
5
6
7
8
9
10
11
12
  for (int i=0; i<100; i++)
  {
Loop1:
       for (int j=0; j<100; j++)
       {
             for (int k=0; k<100; k++)
             {
                  ...
                  if (...) goto Loop1; 
              }
        }
  }
Какой из них прозрачнее? И в чём состоит "резкое понижение качества" у второго кода?

Цитата Сообщение от idealist Посмотреть сообщение
В современном мире компьютерное время стоит очень дешево и продолжает дешеветь, а время программиста стоит дорого, поэтому сейчас ценятся программы пусть даже и более медленные, но с которыми легко работать программисту.
- золотые слова. Но при чём тут бедный GoTo?
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
06.03.2024, 22:25
Цитата Сообщение от Catstail Посмотреть сообщение
Какой из них прозрачнее? И в чём состоит "резкое понижение качества" у второго кода?
Ну, если в отдельных случаях ущерб от goto невелик, это отнюдь не доказывает его безопасность.
Цитата Сообщение от Catstail Посмотреть сообщение
- золотые слова. Но при чём тут бедный GoTo?
С запутанными программами дольше работать, и ошибки в них найти труднее, а при модификации трудно не добавить новых. Если программа структурирована, то с ней можно работать по частям, а с "макаронной" уже труднее.
0
Модератор
Эксперт Java
 Аватар для alecss131
2846 / 1355 / 403
Регистрация: 11.08.2017
Сообщений: 4,325
Записей в блоге: 2
06.03.2024, 23:19
Цитата Сообщение от Catstail Посмотреть сообщение
Какой из них прозрачнее? И в чём состоит "резкое понижение качества" у второго кода?
Ну второй код можно и в джаве повторить, только заменив goto на break или continue с меткой. break с метками можо даже вне циклов использовать, только понятности не сильно добавляет
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Break {
 
  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
07.03.2024, 05:54
Цитата Сообщение от Catstail Посмотреть сообщение
другой стороны: что страшного, если на 5000 строк кода может встретиться пара GoTo? Мир от этого рухнет?
Вы ещё про unsafe не видели какие войны устраивают: https://github.com/search?q=re... &type=code
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
07.03.2024, 08:37
Цитата Сообщение от alecss131 Посмотреть сообщение
Ну второй код можно и в джаве повторить
- знаю. И это означает, что условный Гослинг "дал заднюю". Что лишний раз подтверждает мою правоту: опасна не передача управления как таковая, а тупак-программист (его мышление представляет собой лапшу, которая, в свою очередь порождает код-лапшу). Но запрет GoTo бессилен против тупака - он и без GoTo напишет код, который не требует обфускации.

Добавлено через 2 минуты
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Вы ещё про unsafe не видели какие войны устраивают
- не удивлён. Эпигоны бессмертны! В сущности, эпигонское "мышление" работает как примитивная нейросеть - это не мышление, а распознавание клипов образов.

Добавлено через 2 минуты
Цитата Сообщение от idealist Посмотреть сообщение
С запутанными программами дольше работать, и ошибки в них найти труднее
- а Вы не встречали "запутанных программ" без единого GoTo? С запретом GoTo запутанность исчезла?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2024, 08:37
Помогаю со студенческими работами здесь

Как перепиcать IF ELSE без goto?
как это реализовать без goto? чтоб скрипт дальше шел только если File.Exists(@&quot;C:\Data\TeamViewer.exe&quot; if...

Как обойтись без GOTO
Пишу программу - выводит информацию из базы данных. Вывод в таблицу (grid). Некоторые столбцы таблицы нужно отключать по желанию...

Повторение web запроса: как без goto?
Здравствуйте! Собсно дело в 506 ошибке в ответе сервера, хз чо за ошибка но при ней надо повторить запрос. Метод будет в потоке,...

Как реализовать вычисление корня без goto?
20 A = .4 : B = 1 : EPS = .0001 30 F1 = A+SQR(A)+A^(1/3)-2.5 40 F2 = B+SQR(B)+B^(1/3)-10 ' МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ ...

Как избавиться от goto без вреда для программы?
Как избавиться от goto, сохранив при этом функционал программы? Чтобы программа работала точно так же как и с goto? namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru