Перейти к содержимому

Как запустить цикл заново python

  • автор:

Повторный запуск цикла

Всем доброго времени суток.
Не нашел решения на форуме.

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

Суть такова: после ответа на вопрос «Играть заново да\нет?»
при ответе «да» и аналогичных указанных, переходим на начал игры. При любом другом ответе — стоп-игра и вывод сообщения «пока!».

Через функцию сделал. Все вроде работает.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
from random import shuffle def game(): liv = 2 # жизнь doors = [-1,1,0] while liv > 0: shuffle(doors) print(doors) # проверка print("Выбирите число от 1 до 3", end=" ") choice = int(input()) - 1 if doors[choice] ==-1: print ("\n Жизнь уменьшилась на 1") if doors[choice] ==1: print ("\nЖизнь увеличилась на 1") if doors[choice] ==0: print ("\nЖизнь стабильна") liv = liv + doors[choice] if liv ==0: print("\nИгра окончена") start=input(f'Играть заново дает?\n') if start == "Да" or start == "да" or start =="д": game() else: print ('пока!') game()

Захотелось сделать без функции и. тупил часа 2. Даже пробовал методом тыка подвигать 23 и 25 строку и поменять «continue» на «break».
Ничего не помогло. По итогу или не работает «да» или даже при «нет» идет запуск цикла со строки 2.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
from random import shuffle while True: liv = 2 # жизнь doors = [-1,1,0] while liv > 0: shuffle(doors) print(doors) # проверка print("Выбирите число от 1 до 3", end=" ") choice = int(input()) - 1 if doors[choice] ==-1: print ("\n Жизнь уменьшилась на 1") if doors[choice] ==1: print ("\nЖизнь увеличилась на 1") if doors[choice] ==0: print ("\nЖизнь стабильна") liv = liv + doors[choice] print ('liv=',liv) if liv ==0: print("\nИгра окончена") start=input(f'Играть заново дает?\n') if start == "Да" or start == "да" or start =="д": continue else: print ('пока!') break

Как повторно запустить цикл к While?

Нужно чтобы при при вводе «Да» от пользователя, цикл while перезапустился заново. Но у меня программа заканчивает весь процесс. Попробовал разные методы, не помогло. Как можно решить?

def started(): pop = 0 i = 0 while pop < 5: for i in range(1): sys = random.randint(1, 10) en = int(input("Угадай: ")) if en == sys: pop = 0 print("Угадал") else: pop += 1 print("Неверно, Верный ответ - " + str(sys)) s = 5 - pop print("Попыток осталось " + str(s)) if pop == 5: restart = input("Ты использовал все попытки, Заново? ") if restart == "Да": return else: break started() 

Отслеживать
задан 24 фев в 13:30
13 2 2 бронзовых знака

Ну это же в любом учебнике, первым примером после изучения цикла while описано: restart ='Да' while restart =='Да': ТЕЛО ЦИКЛА;restart = input("Ты использовал все попытки, Заново? ")

24 фев в 13:43

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

заместо return поставить started()

import random def started(): pop = 0 i = 0 while pop < 5: for i in range(1): sys = random.randint(1, 10) en = int(input("Угадай: ")) if en == sys: pop = 0 print("Угадал") else: pop += 1 print("Неверно, Верный ответ - " + str(sys)) s = 5 - pop print("Попыток осталось " + str(s)) if pop == 5: restart = input("Ты использовал все попытки, Заново? ") if restart == "Да": started() else: break started() 

Отслеживать
ответ дан 24 фев в 13:44
349 2 2 серебряных знака 13 13 бронзовых знаков

 if pop == 5: restart = input("Ты использовал все попытки, Заново? ") if restart == "Да": return else: break 

В этом месте после if restart == "Да": добавить pop=0 return убрать.

Отслеживать
ответ дан 24 фев в 13:43
2,350 1 1 золотой знак 8 8 серебряных знаков 10 10 бронзовых знаков

def started(): pop = 0 while pop < 5: for i in range(1): sys = random.randint(1, 10) en = int(input("Угадай: ")) if en == sys: pop = 0 print("Угадал") else: pop += 1 print("Неверно, Верный ответ - " + str(sys)) s = 5 - pop print("Попыток осталось " + str(s)) if pop == 5: restart = input("Ты использовал все попытки, Заново? ") if restart == "Да": return else: break while True: started() 

Отслеживать
ответ дан 24 фев в 13:48
Aliaksei Lz Aliaksei Lz
369 2 2 серебряных знака 4 4 бронзовых знака

  • python
  • while
  • return
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как выйти из цикла и сразу начать его заново python?

когда создаешь запрос от пользователя
если продолжить то 1 иной вариант завершает цикл.

number = random.randint(1, 100) while True: print(number) userNumber = int(input("Введите число: ")) if number == userNumber: print("Победа") user = int(input("Еще разок ? если да то 1 если нет то 2: ")) if user == 1: number = random.randint(1, 100) continue else: break elif number < userNumber: print("введите число меньше") elif number >userNumber: print("введите число больше")

Таким способом спрашиваем запустить цикл занного или нет.

Спасибо что прочитали !

Ответ написан более трёх лет назад
Нравится 1 1 комментарий

Очень частный случай, в моем случае это не помогает, мне же надо чтобы цикл начался заново а не продолжился пропустив это значение, как этого добиться?

vse_niki_zanyati @vse_niki_zanyati

def function (args) : # - вызываем функцию с циклом
while True: # - начало цикла
# то что вы хотели делать
if (ваше условие):
break # - остановка цикла
function (args) # - снова вызываем функцию и снова попадаем в цикл

Ответ написан более трёх лет назад
Можно дойти до максимальной глубины рекурсии
vse_niki_zanyati @vse_niki_zanyati
Notrdam, ну это да, но вроде этого он и хочет

from my_func import my_func

while True: #цикл бесконечный

____if my_condition==True:#условие:
________my_func()#выходим из цикла, там хотим вернёмся, хотим нет, хотим заново запустим цикл
________#либо а=my_func() ; что-то принесём в цикл
________#либо my_func(a) ;что-то возъмём с собой
________#либо b=my_func(a);и то, и другое

____#что-то делаем
____continue

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python

Палиндромы leetcode, в VS все правильно, на сайте другой ответ, что делать?

  • 1 подписчик
  • 2 часа назад
  • 54 просмотра

Как сделать «двойной break», то есть выйти из вложенного цикла, в Python?

Обложка поста Как сделать «двойной break», то есть выйти из вложенного цикла, в Python?

Если бы мы программировали, например, на Java, то мы могли бы воспользоваться механизмом меток:

outterLoop: for(int i=0; i > > 

Однако в Python такого механизма нет. Требуется предложить наиболее удобное в использовании и читаемое решение.

Возможные варианты ответа
  • Поместить цикл в тело функции, а затем сделать return из неё:def func():ts="teste"tfor i in range(len(s)):ttfor j in range(i+1, len(s)):tttif s[i]==s[j]:ttttprint(i,j)ttttreturnfunc()Почему это плохая идея: разумеется, сама задача в условии — лишь абстрактный пример. В жизни циклов может быть гораздо больше, и создавать по функции для каждого из них как-то неестественно, не так ли?
  • Выбросить исключение и поймать его снаружи цикла:try:ts="teste"tfor i in range(len(s)):ttfor j in range(i+1, len(s)):tttif s[i]==s[j]:ttttprint(i,j)ttttraise Exception()except:tprint("the end")Почему это плохая идея: здесь мы используем механизм исключений как особую форму goto, но ведь на самом деле ничего исключительного в коде не произошло — это обычная ситуация. Как минимум, причины такого злоупотребления этим механизмом будут непонятны другим программистам.
  • Можно создать булевую переменную, которая будет хранить информацию о том, нужно ли выходить из внешнего цикла на данной итерации:exitFlag=Falses="teste"for i in range(len(s)):tfor j in range(i+1, len(s)):ttif s[i]==s[j]:tttprint(i,j)tttexitFlag=Truetttbreaktif(exitFlag):ttbreakПочему это плохая идея: из всех перечисленных выше идей эта, пожалуй, лучшая. Тем не менее, это весьма низкоуровневый подход, и в языке Python есть возможность реализовать задуманное гораздо лучше.
  • Использовать вместо двух циклов for один while :s="teste"i=0j=1while i

Где там вообще хоть слово про двойной цикл или про перебор двух индексов? Нам нужно перебирать пары. Значит, по идее, мы должны написать что-то вроде этого:

s = "teste" for i, j in unique_pairs(len(s)): if s[i] == s[j]: print(i, j) break 

Отлично, так мы будем перебирать пары. Но как нам добиться именно такой формы записи? Всё очень просто, нужно создать генератор. Делается это следующим образом:

def unique_pairs(n): for i in range(n): for j in range(i+1, n): yield i, j 

«Как это работает?» — спросите вы. Всё просто. При вызове unique_pairs(int) код в теле функции не вычисляется. Вместо этого будет возвращён объект генератора. Каждый вызов метода next() этого генератора (что неявно происходит при каждой итерации цикла for ) код в его теле будет выполняться до тех пор, пока не будет встречено ключевое слово yield . После чего выполнение будет приостановлено, а метод вернёт указанный объект (здесь yield действует подобно return). При следующем вызове функция начнёт выполняться не с начала, а с того места, на котором остановилась в прошлый раз. При окончании перебора будет выброшено исключение StopIteration .

Итак, самый true pythonic way в решении этой задачи:

def unique_pairs(n): for i in range(n): for j in range(i+1, n): yield i, j s = "a string to examine" for i, j in unique_pairs(len(s)): if s[i] == s[j]: print(i, j) break 

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

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

itertools.combinations(s, 2) 

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

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Свои варианты предлагайте в комментариях!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *