LINUX.ORG.RU

Goto в питоне?

 


1

3

Приветствую, народ! решил тут поизучать питона, дабы переписать мегапрограммы моей юности на чтото более менее современное, и везде-распространённое. ну, программы типа рассчёта перегрузки при резкой остановке / ускорении, времени полёта к альфецентавра при заданном ускорении, и подобную фигню. узнал что в питоне нет оператора гото. то есть переходы к специальным блокам с возвратом несделать? а как тогда организовать выбор в меню из нескольких пунктов?

есть переходы к специальным блокам с возвратом несделать? а как тогда организовать выбор в меню из нескольких пунктов?

Функции вызывай.

tailgunner ★★★★★
()

а как тогда организовать выбор в меню из нескольких пунктов?

А в чём вообще проблема? Можешь привести пример?

Esper
()

на чтото более менее современное
goto

ох уж эти ваши деления на ноль. А вообще для этого придумали функции

Dred ★★★★★
()
Ответ на: комментарий от Esper
42 CLS
45 INPUT "‚¢¥¤¨â¥ ¬®¤¥«ì ¬ è¨­ë,­ ¯p¨¬¥p, 2.8i,¨«¨ 2.3GL "; model$
50 INPUT "¢¢¥¤¨â¥ max. ®¡®p®âë ¤¢¨£ â¥«ï:"; m
60 INPUT "¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® £« ¢­®© ¯¥p¥¤ ç¨ (¤¨ä¥p¥­æ¨ « ):"; d
62 PRINT : PRINT : PRINT
65 PRINT "­ ¯p. 175/70HR14 =1.88 m ; 185/70HR14 =1.93 m ; 175/70R13 =1.8 m  "
68 INPUT "¢¢¥¤¨â¥ ¬®¤¥«ì ¯®ªpë誨:"; tyre$
70 INPUT "¢¢¥¤¨â¥ ®ªp㦭®áâì ¯®ªpë誨:"; r
80 INPUT "¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® § ¤­¥£® 室  ª®p®¡ª¨ ¯¥p¥¤ ç:"; a
90 INPUT " ¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® 1.¯¥p¥¤ ç¨:"; a1
100 INPUT " ¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® 2.¯¥p¥¤ ç¨:"; a2
110 INPUT " ¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® 3.¯¥p¥¤ ç¨:"; a3
120 INPUT " ¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® 4.¯¥p¥¤ ç¨:"; a4
130 INPUT " ¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® 5.¯¥p¥¤ ç¨:"; a5
140 INPUT " ¢¢¥¤¨â¥ ¯¥p¥¤ â®ç­®¥ ç¨á«® 6.¯¥p¥¤ ç¨:"; a6

250 REM apreekjini
260 Akop = a * d
270 A1kop = a1 * d
280 A2kop = a2 * d
290 A3kop = a3 * d
300 A4kop = a4 * d
310 A5kop = a5 * d
320 A6kop = a6 * d
REM *******************************************************
321 IF Akop = 0 THEN GOTO 322
at = (((1000 / Akop) / 1000) * 60) * r
322 IF A1kop = 0 THEN GOTO 323
a1r = (((1000 / A1kop) / 1000) * 60) * r
323 IF A2kop = 0 THEN GOTO 324
a2r = (((1000 / A2kop) / 1000) * 60) * r
324 IF A3kop = 0 THEN GOTO 325
a3r = (((1000 / A3kop) / 1000) * 60) * r
325 IF A4kop = 0 THEN GOTO 330
a4r = (((1000 / A4kop) / 1000) * 60) * r
330 IF A5kop = 0 THEN GOTO 340
a5r = (((1000 / A5kop) / 1000) * 60) * r
340 IF A6kop = 0 THEN GOTO 350
a6r = (((1000 / A6kop) / 1000) * 60) * r
350

кстати, и можт кто помнит - что в пауэрбейсике означали двойные решётки у цифр / переменных?

чтото немогу вспомнить, а гуголь нифига не выдаёт:

E##=1##*((2.99792458E8##*100)^2##)
Ej=E##*(10E-7##)
wisedraco ★★
() автор топика

Зачем goto в любом ЯП для выбора в меню из нескольких функций? Пилишь функции, соответствующие твоим меню и дергаешь их из кода при необходимых событиях (пользователь ткнул какую-то кнопку/выбрал элемент).

peregrine ★★★★★
()

в питоне нет оператора гото

есть, ты просто плохо гуглил. Например: https://github.com/snoack/python-goto

Для любителей погорячее ты можешь ввести свой оператор. Либо сделать это препроцессором. Я и не такое видел.

true_admin ★★★★★
()

Толсто.

По сабжу - ответ на вопрос лежит в изучении парадигмы функционального программирования.

ei-grad ★★★★★
()

узнал что в питоне нет оператора гото
а как тогда организовать выбор в меню из нескольких пунктов?

Напиши на ассемблере, там есть плюшки и поприкольнее «гото». Не забудь SSE4.2 нужно использовать для этого обязательно!

erfea ★★★★★
()
Ответ на: комментарий от wisedraco

Нагогнокодил что-то похожее за 2 минуты без гоуту:

import sys
import itertools as it

def main():
    model = input('Пример приглашения: ')
    m = float(input('Дальше приглашений не будет: '))
    d = float(input())
    tyre = input()
    r = float(input())
    a = [float(s) for s in it.islice(sys.stdin, 7)]
    (at, a1r, a2r, a3r, a4r, a5r, a6r) = [
        (1000 / x / d / 1000 * 60 * r) if x else 0 for x in a
    ]
    print('{at}, {a1r}, {a2r}, {a3r}, {a4r}, {a5r}, {a6r}'.format(**locals()))

if __name__ == '__main__':
    main()

Ну, или в твоём стиле «пишу одно и то же по 7 раз»:

...
if Akop:
    at = 1000 / Akop / 1000 * 60 * r
if A1kop:
    a1r = 1000 / A1kop / 1000 * 60 * r
if A2kop:
    a2r = 1000 / A2kop / 1000 * 60 * r
if A3kop:
    a3r = 1000 / A3kop / 1000 * 60 * r
if A4kop:
    a4r = 1000 / A4kop / 1000 * 60 * r
if A5kop:
    a5r = 1000 / A5kop / 1000 * 60 * r
if A6kop:
    a6r = 1000 / A6kop / 1000 * 60 * r
...

Зачем тебе там вообще гоуту?

Esper
()
Ответ на: комментарий от wisedraco

Не на питоне пойдет (на нем я не пишу ничего, подписан на тег просто ради того, чтобы смотреть на веяния в нем)? Скажем на C или C++ или C#? На худой конец и на Java могу накалякать.

peregrine ★★★★★
()
Ответ на: комментарий от annulen

Лучше уж пхп. На фоне гор уже существующего говно-кода на пхп ещё одна маленькая какашка никак не отразится.

rupert ★★★★★
()

goto в питоне есть. Там только нет меток/номеров для него - это задача файловой системы:

#cat 0
def goto(x): 
  exec open(str(x))
goto(42)
#...
#cat 321
if Akop = 0: goto(322)
at = (((1000 / Akop) / 1000) * 60) * r
goto(322)
#cat 322
if A1kop = 0: goto(323)
a1r = (((1000 / A1kop) / 1000) * 60) * r
goto(323)
#...

DonkeyHot ★★★★★
()
Последнее исправление: DonkeyHot (всего исправлений: 2)

мой учитель информатики за каждое goto в программе снимал 2 балла, т.е. одно goto = тройбан, два goto - сразу двойка

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Странный он. Лучше бы while запрещал. Почему? Сразу было бы видно, что он псих и лучше от него держаться подальше и анализировать его действия с точки зрения логики смысла не имеет.

Stahl ★★☆
()
Ответ на: комментарий от Esper

Нагогнокодил что-то похожее за 2 минуты без гоуту:

О, бог'шой мерси! Буду изучать и «многа думать» :)

Зачем тебе там вообще гоуту?

думаешь, я помню? я энто лет 20 или около того, назад, писал...:))

wisedraco ★★
() автор топика
Ответ на: комментарий от peregrine

Скажем на C или C++ или C#?

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

wisedraco ★★
() автор топика
Ответ на: комментарий от anonymous

сэнкс! здорово! распечатаю все эти примеры и буду думать (ц). всётаки на конкретных примерах намного легче понять и уразуметь...

wisedraco ★★
() автор топика
Ответ на: комментарий от DonkeyHot

goto в питоне есть. Там только нет меток/номеров

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

wisedraco ★★
() автор топика
Ответ на: комментарий от Stahl

Сразу было бы видно, что он псих и лучше от него держаться подальше и анализировать его действия с точки зрения логики смысла не имеет.

Его логика очевидна - он не хочет плодить таких, как ТС. И если у тебя в школьных задачах возникает необходимость использовать goto, то тебе стоит полечиться.

Esper
()
Ответ на: комментарий от Esper

если возникает необходимость использовать goto, то тебе стоит полечиться.

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

Unicode4all ★★★★★
()
Ответ на: комментарий от wisedraco

Буду изучать и «многа думать»

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

думаешь, я помню?

Я думаю, раз ты этот код выложил в этот тред, ты до сих пор видишь в нём нужду в goto.

Esper
()
Ответ на: комментарий от anonymous

А у меня гогнокодистее.

Слишком толсто. Хотя за идею разделять строку на будущие флоаты по любым нецифровым символам - респект, очень смешно получилось.

Esper
()
Ответ на: комментарий от Esper

Я думаю, раз ты этот код выложил в этот тред, ты до сих пор видишь в нём нужду в goto.

это когда-то написанная программа ( хорошо или идиотски написанная - в данном случае не принципиально важно), которая работает, то есть делает то, для чего написана.

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

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

от, как-то так....

wisedraco ★★
() автор топика
Ответ на: комментарий от Unicode4all

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

если возникает необходимость использовать goto, то тебе стоит полечиться.

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

За такое цитирование в приличном обществе бьют, иногда даже ногами.

Расскажи лучше, в каких школах учителя заставляют детей решать задачи на ассемблере.

Esper
()
Ответ на: комментарий от I-Love-Microsoft

одно goto = тройбан, два goto - сразу двойка

Он вообще знал, что 3-2 != 2?

buddhist ★★★★★
()
Ответ на: комментарий от wisedraco

Мой тебе совет — изучи лучше что-то одно, а то, как я понимаю, ты и си хочешь потрогать, и на пайтон посмотреть.

Zermond
()
Ответ на: комментарий от true_admin

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

buddhist, с математикой у него всё было в порядке ;)

I-Love-Microsoft ★★★★★
()

Надо еще петицию к производителям процессоров составить чтобы, убрали команды безусловного перехода из набора инструкций. С формулировкой «пацаны говорят что они ненужны®».

Rupricht ★★
()
Ответ на: комментарий от no-such-file

Ого, да это же эталонный индусский код из палаты мер и весов

«Китайский» же. Но, в любом случае, это индокитайский код, который писался, когда это понятие ещё не было мейнстримом :)

KRoN73 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

единственное место, где я признаю оператор goto - только участок инициализации модуля ядра Linux (может и других ОС, не в курсе), и только с областью видимости ограниченной этой одной функцией ;)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от wisedraco
#include <stdio.h>

void borscht()
{
    printf("Борщ - традиционное блюдо восточной Европы, ");
}

void shchi()
{
    printf("Щи да каша - пища наша, ");
}

void grechnevayaKasha()
{
    printf("Гречневая каша сама себя хвалит, ")
}

void macaroni()
{
    printf("Летающий Макаронный Монстр одобряет макароны, ")
}

int main()
{
    printf("Что будешь хавать сегодня на обед?\n");
    printf("1. Борщ\n");
    printf("2. Щи\n");
    printf("3. Гречневую кашу\n");
    printf("4. Макароны\n");
    printf("Введите номер блюда: ");
    int input;
    scanf( "%d", &input );
    switch ( input ) {
        case 1:
            borscht();
            break;
        case 2:
            shchi();
            break;
        case 3:
            grechnevayaKasha();
            break;
        case 4:
            macaroni();
            break;
        default:
            printf( "Неправильный ввод.\n" );
            return 1;
    }
    printf("ожидайте ваш заказ.")
    return 0;
}

Код не проверял, всякие фреймворки могут предлагать иные способы выбора, но суть и идея от этого не изменятся.

peregrine ★★★★★
()

ваяешь свой микроинтерпретатор

где твоя бес програрамма конвертится во входной список где каждый элемент это номер строки-бейсика а второй элемент это питон код эквивалентный бейсик-коду твоей программы под этим номером а третий элемент это либо номер куда переходит если гоуто либо например 0 как признак «без прыжкового» перехода к следующему по списку ака +1

а твой интерпретатор в цикле пока не дойдёт до магического +inf

имеет одну переменную указатель ip в рамках твоего списка.

anonymous
()
Ответ на: комментарий от anonymous

Там есть своё goto. Называется call/cc.

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

gototheultimate
()
Ответ на: комментарий от wisedraco

есть у меня мысль си тоже поковырять, но он вроде как ощутимо сложнее пайтона, а я и с пайтоном не сильно справляюсь

Никогда этого не понимал. Да, есть сложные задачи, но блин, что там не осиливать в языке как таковом? Примитивный набор несложных правил оформления. Понятно когда надо что-то не тривиальное, но до этого еще долго добираться

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.