Как вернуться к началу программы в питоне

Но я не могу понять, как вы это делаете в Python:/Любые идеи?

Код, который я пытаюсь выполнить, это

#Alan Toolkit for conversions def start() : print («Welcome to the converter toolkit made by Alan.») op = input («Please input what operation you wish to perform. 1 for Fahrenheit to Celsius, 2 for meters to centimetres and 3 for megabytes to gigabytes») if op == «1»: f1 = input («Please enter your fahrenheit temperature: «) f1 = int(f1) a1 = (f1 — 32) / 1.8 a1 = str(a1) print (a1+» celsius») elif op == «2»: m1 = input («Please input your the amount of meters you wish to convert: «) m1 = int(m1) m2 = (m1 * 100) m2 = str(m2) print (m2+» m») if op == «3»: mb1 = input («Please input the amount of megabytes you want to convert») mb1 = int(mb1) mb2 = (mb1 / 1024) mb3 = (mb2 / 1024) mb3 = str(mb3) print (mb3+» GB») else: print («Sorry, that was an invalid command!») start()

Итак, в основном, когда пользователь заканчивает свое преобразование, я хочу, чтобы он вернулся к вершине. Я до сих пор не могу использовать примеры цикла на практике, так как каждый раз, когда я использую функцию def для цикла, в ней говорится, что «op» не определен.

5 способов выйти из вложенного цикла в Python

7 ответов

3 Решение River Tam [2013-09-13 20:24:00]

Python, как и большинство современных языков программирования, не поддерживает «goto». Вместо этого вы должны использовать функции управления. Существует два способа сделать это.

1. Loops

Пример того, как вы могли бы сделать именно то, что делает ваш пример SmallBasic, выглядит следующим образом:

while True : print «Poo»

2. Рекурсия

def the_func() : print «Poo» the_func() the_func()

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

Отредактировано для ответа на вопрос более конкретно

#Alan Toolkit for conversions invalid_input = True def start() : print («Welcome to the converter toolkit made by Alan.») op = input («Please input what operation you wish to perform. 1 for Fahrenheit to Celsius, 2 for meters to centimetres and 3 for megabytes to gigabytes») if op == «1»: #stuff invalid_input = False # Set to False because input was valid elif op == «2»: #stuff invalid_input = False # Set to False because input was valid elif op == «3»: # you still have this as «if»; I would recommend keeping it as elif #stuff invalid_input = False # Set to False because input was valid else: print («Sorry, that was an invalid command!») while invalid_input : # this will loop until invalid_input is set to be True start()

Используйте бесконечный цикл:

Как работает return в Python / Как работает return в Питоне


while True: print(‘Hello world!’)

Это, безусловно, может применяться и к вашей функции start() ; вы можете выйти из цикла с помощью break или использовать return для полного завершения функции, которая также завершает цикл:

Читайте также:
Maple программа для математики как пользоваться

def start(): print («Welcome to the converter toolkit made by Alan.») while True: op = input («Please input what operation you wish to perform. 1 for Fahrenheit to Celsius, 2 for meters to centimetres and 3 for megabytes to gigabytes») if op == «1»: f1 = input («Please enter your fahrenheit temperature: «) f1 = int(f1) a1 = (f1 — 32) / 1.8 a1 = str(a1) print (a1+» celsius») elif op == «2»: m1 = input («Please input your the amount of meters you wish to convert: «) m1 = int(m1) m2 = (m1 * 100) m2 = str(m2) print (m2+» m») if op == «3»: mb1 = input («Please input the amount of megabytes you want to convert») mb1 = int(mb1) mb2 = (mb1 / 1024) mb3 = (mb2 / 1024) mb3 = str(mb3) print (mb3+» GB») else: print («Sorry, that was an invalid command!»)

Если вы должны добавить опцию для выхода, это может быть:

if op.lower() in : print(«Goodbye!») return

2 Shashank [2013-09-13 20:23:00]

У Python есть операторы потока управления вместо операторов goto . Одной из реализаций потока управления является цикл Python while . Вы можете дать ему логическое условие (логические значения либо True, либо False в Python), и цикл будет выполняться несколько раз, пока это условие не станет ложным. Если вы хотите зацикливаться навсегда, все, что вам нужно сделать, это запустить бесконечный цикл.

Будьте осторожны, если вы решите запустить следующий пример кода. Нажмите Control + C в своей оболочке, пока он запущен, если вы когда-либо захотите убить процесс. Обратите внимание, что этот процесс должен быть на переднем плане, чтобы это работало.

while True: # do stuff here pass

Строка # do stuff here — это просто комментарий. Он ничего не выполняет. pass является просто заполнителем в python, который в основном говорит «Привет, я строка кода, но пропустите меня, потому что я ничего не делаю».

Теперь позвольте сказать, что вы хотите неоднократно просить пользователя вводить информацию навсегда и всегда и только выйти из программы, если пользователь вводит символ «q» для выхода.

Вы можете сделать что-то вроде этого:

while True: cmd = raw_input(‘Do you want to quit? Enter ‘q’!’) if cmd == ‘q’: break

cmd будет просто хранить все входы пользователя (пользователю будет предложено ввести что-то и нажать enter). Если cmd хранит только букву «q» , код будет принудительно break из замкнутого цикла. Оператор break позволяет избежать любого цикла. Даже бесконечный!

Очень полезно узнать, хотите ли вы когда-либо программировать пользовательские приложения, которые часто работают на бесконечных циклах. Если пользователь не вводит точно букву «q» , пользователь будет просто запрашиваться повторно и бесконечно до тех пор, пока процесс не будет насильно убит или пользователь не решит, что у него достаточно этой раздражающей программы и просто хочет выйти.

2 K DawG [2013-09-13 20:27:00]

Вы можете легко сделать это с помощью циклов, существует два типа циклов

Для Циклы:

for i in range(0,5): print ‘Hello World’

Пока Циклы:

count = 1 while count

Каждая из этих циклов печатает «Hello World» пять раз

def start(): Offset = 5 def getMode(): while True: print(‘Do you wish to encrypt or decrypt a message?’) mode = input().lower() if mode in ‘encrypt e decrypt d’.split(): return mode else: print(‘Please be sensible try just the lower case’) def getMessage(): print(‘Enter your message wanted to :’) return input() def getKey(): key = 0 while True: print(‘Enter the key number (1-%s)’ % (Offset)) key = int(input()) if (key >= 1 and key ord(‘Z’): num -= 26 elif num < ord(‘A’): num += 26 elif symbol.islower(): if num >ord(‘z’): num -= 26 elif num < ord(‘a’): num += 26 translated += chr(num) else: translated += symbol return translated mode = getMode() message = getMessage() key = getKey() print(‘Your translated text is:’) print(getTranslatedMessage(mode, message, key)) if op.lower() in : print(«Goodbye!») return

Читайте также:
Как составлять коррекционную программу

0 A.J. [2013-09-13 20:22:00]

напишите цикл for или while и поместите весь свой код внутри него? Программирование типа Goto ушло в прошлое.

Вам нужно использовать цикл while. Если вы сделаете цикл while и нет инструкции после цикла, он станет бесконечным циклом и не остановится, пока вы не остановите его вручную.

Источник: qarchive.ru

Как сделать возврат в коде к определённому моменту?

Привет! Вопрос из разряда «Для чайников». Мне нужно сделать возврат к строке в начале кода. Допустим у меня есть условный оператор, при невыполнении условия которого мне нужно вернуться к началу программы или к предыдущему шагу. Как мне это сделать?

  • Вопрос задан более трёх лет назад
  • 7917 просмотров

1 комментарий

Простой 1 комментарий

AnnTHony

привести код программы для начала
Решения вопроса 1

solotony

покоряю пик Балмера

есть несколько реализаций goto для python. можно заменить конструкцией

while True: . continue # это переход в начало . break

но проблема этой (и подобной) конструкций — выход из вложенных циклов

альтернатива — использовать try except

Ответ написан более трёх лет назад
что в данном случае значит True у цикла?

answer = 0 print(‘ Вы открыли текстовый квест. Чтобы начать его, нажмите Enter’) input() print(‘Перед началом квеста вы должны узнать, как нужно отвечать на вопросы.’) print(‘На вопросы нужно отвечать строго числами, которые указаны перед вариантами ответов!’) print(‘Начинаем! Приятной игры!’) while True: print(‘Вы очнулись на корабле. Вокруг ни души.

Нужно осмотреться. Здесь есть 3 прохода.’) print(‘1)Прямо по коридору’) print(‘2)По коридору налево’) print(‘3)Зайти в каюту’) answer = input() if answer == 1: print(‘Здесь ещё одна развилка. Есть три прохода. Выбирайте’) print(‘1)Пройти в дверь прямо’) print(‘2)Пройти направо по коридору’) print(‘3)Повернуть налево и открыть тяжёлую дверь’)

При нажатии 1 он заново воспроизводит всю программу. Что можно сделать с этим? Спасибо заранее
Ответы на вопрос 2

fox_12

Расставляю биты, управляю заряженными частицами
not_success = True while (not_success):
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Вот код. Если нажать 1, то он воспроизведёт программу с начала, а мне это не нужно.

answer = 0 print(‘ Вы открыли текстовый квест. Чтобы начать его, нажмите Enter’) input() print(‘Перед началом квеста вы должны узнать, как нужно отвечать на вопросы.’) print(‘На вопросы нужно отвечать строго числами, которые указаны перед вариантами ответов!’) print(‘Начинаем! Приятной игры!’) while answer != 5: print(‘Вы очнулись на корабле. Вокруг ни души.

Нужно осмотреться. Здесь есть 3 прохода.’) print(‘1)Прямо по коридору’) print(‘2)По коридору налево’) print(‘3)Зайти в каюту’) answer = input() if answer == 1: print(‘Здесь ещё одна развилка. Есть три прохода. Выбирайте’) print(‘1)Пройти в дверь прямо’) print(‘2)Пройти направо по коридору’) print(‘3)Повернуть налево и открыть тяжёлую дверь’) answer = input()
Ответ написан более трёх лет назад

Читайте также:
Размер чаевых в программе молодые ножи

Adamos

Вы так и собрались писать всю программу в одну линию? В результате код будет на 90% состоять из отступов.
Вам нужно один раз сохранить все эти блоки строк в плоском массиве и определять по каждому ответу, к какому (номеру) перейти следующим шагом.
Раз уж взялись реализовывать книжку-квест, так и следуйте ее логике: на стр. N есть вот такой текст и варианты перехода: на стр. L, M и K.

Adamos, дело в том, что о массивах я ничего ещё не знаю. Я учу Python не так давно, а этот квест — просто задание из программы обучения.

Adamos

sylniyduxom, ну, вот вам и причина поизучать массивы.
Приведенный вами спагетти-код ничему хорошему вас не научит.

Adamos, ладно, спасибо! Я поищу кое-что в интернете. Просто программа обучения требует чтобы я учился строго всему в своё время.

Adamos, я знаю как объявлять простой массив типа massive = [‘Земля’, ‘Венера’, ‘Юпитер’, ‘Меркурий’]

Adamos

sylniyduxom, ну, теперь можно переходить к симулятору противостояния Внутренних Планет и Внешних Спутников:
[
[‘Земля’, ‘Венера’, ‘Марс’, ‘Меркурий’],
[‘Ганимед’, ‘Титан’, ‘Каллисто’, ‘Альматея’]
]
%)

Источник: qna.habr.com

Как вернуться на определённую строку в коде? python

Как вернуться на определённую строку кода и чтобы при этом не завершался цикл. Без def.

Ответы (2 шт):

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

Это сделано сознательно, чтобы такой возможности не было.

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

Например вы при каком-то условии хотите повторить часть с команды print(«2») :

while True: print(«1») time.sleep(1) something = True while something: print(«2») time.sleep(1) print(«3») time.sleep(1) if something_other: something = False # Окончание внутреннего цикла

(Команда continue в вашем коде излишня.)

Аналог goto ? Да действительно, встроенных инструментов, полностью реализующих функционал goto , нет (почему так сделано — отдельный вопрос). Однако есть огромное количество идиом, позволяющих частично или полностью эмулировать это.

  • if else statement ;
  • try except statement ;
  • выбор ключа в словаре;
  • динамическое програмирование и т.п.
  • for statement ;
  • while statement ;
  • встроенные высокоуровневые функции (модуль itertools ) и т.п.

Есть и другие варианты, более специфичные. Также всегда есть возможность именовать одинаковые участки кода с помощью функций.

Если все-таки нужно написать именно аналог goto , то вот варианты:

  • написать функцию, меняющую байткод функции с goto (а конкретно, добавляющую где надо opcode JUMP_ABSOLUTE );
  • написать свою кодировку с goto , ассоциированный декодер, зарегистрировать его, и писать в начале скрипта #*- coding: my_goto_codec -*- ;
  • написать функцию, наподобие exec , реализующую анализ инструкций вручную.

Как видите, гораздо проще пользоваться встроенными средствами, нежели городить трёхэтажные велосипеды с сомнительной полезностью. Лично я знаю только одну проблему, которую достаточно трудно решить подручными средствами в питоне — break из всех вложенных циклов в самое начало. Пожалуй, это единственное место, где goto был бы полезен.

Источник: husl.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru