Есть ли в Python ярлык / переход? - PullRequest
138 голосов
/ 13 января 2009

Есть ли в Python goto или какой-либо эквивалент, позволяющий перейти к определенной строке кода?

Ответы [ 16 ]

2 голосов
/ 27 марта 2015

Вы можете использовать Определенные пользователем исключения для эмуляции goto

пример:

class goto1(Exception):
    pass   
class goto2(Exception):
    pass   
class goto3(Exception):
    pass   


def loop():
    print 'start'
    num = input()
    try:
        if num<=0:
            raise goto1
        elif num<=2:
            raise goto2
        elif num<=4:
            raise goto3
        elif num<=6:
            raise goto1
        else:
            print 'end'
            return 0
    except goto1 as e:
        print 'goto1'
        loop()
    except goto2 as e:
        print 'goto2'
        loop()
    except goto3 as e:
        print 'goto3'
        loop()
1 голос
/ 18 февраля 2018

У меня есть свой способ делать gotos. Я использую отдельные скрипты Python.

Если я хочу зациклить:

file1.py

print("test test")
execfile("file2.py")
a = a + 1

file2.py

print(a)
if a == 10:
   execfile("file3.py")
else:
   execfile("file1.py")

file3.py

print(a + " equals 10")

( ПРИМЕЧАНИЕ: Этот метод работает только в версиях Python 2.x)

1 голос
/ 30 июля 2015

Я хотел получить тот же ответ и не хотел использовать goto. Поэтому я использовал следующий пример (из learnpythonthehardway)

def sample():
    print "This room is full of gold how much do you want?"
    choice = raw_input("> ")
    how_much = int(choice)
    if "0" in choice or "1" in choice:
        check(how_much)
    else:
        print "Enter a number with 0 or 1"
        sample()

def check(n):
    if n < 150:
        print "You are not greedy, you win"
        exit(0)
    else:
        print "You are nuts!"
        exit(0)
0 голосов
/ 31 января 2019

нет, есть альтернативный способ реализации оператора goto

class id:
     def data1(self):
        name=[]
        age=[]   
        n=1
        while n>0:
            print("1. for enter data")
            print("2. update list")
            print("3. show data")
            print("choose what you want to do ?")
            ch=int(input("enter your choice"))
            if ch==1:    
                n=int(input("how many elemet you want to enter="))
                for i in range(n):
                    name.append(input("NAME "))
                    age.append(int(input("age "))) 
            elif ch==2:
                name.append(input("NAME "))
                age.append(int(input("age ")))
            elif ch==3:
                try:
                    if name==None:
                        print("empty list")
                    else:
                        print("name \t age")
                        for i in range(n):
                            print(name[i]," \t ",age[i])
                        break
                except:
                    print("list is empty")
            print("do want to continue y or n")
            ch1=input()
            if ch1=="y":
                n=n+1
            else:
                print("name \t age")
                for i in range(n):
                    print(name[i]," \t ",age[i])
                n=-1
p1=id()
p1.data1()  
0 голосов
/ 26 января 2019

Вместо эквивалента Python Goto я использую оператор break следующим образом для быстрых тестов моего кода. Это предполагает, что у вас есть структурированная кодовая база. Тестовая переменная инициализируется в начале вашей функции, и я просто перемещаю блок «If test: break» в конец вложенного блока if-then или цикла, который я хочу проверить, изменяя возвращаемую переменную в конце кода чтобы отразить блочную или циклическую переменную, которую я тестирую.

def x:
  test = True
  If y:
     # some code
     If test:
            break
  return something
0 голосов
/ 02 июня 2018

Для форварда Гото вы можете просто добавить:

while True:
  if some condition:
    break
  #... extra code
  break # force code to exit. Needed at end of while loop
#... continues here

Это помогает только для простых сценариев (т. Е. Их вложение приведет вас в беспорядок)

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