Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2021 17:11:34

y4n23x
Зарегистрирован: 2021-07-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

дилетант спрашивает про петлю и змея

Привет мир, у меня есть проблема.
Вроде змей сейчас в моде, поэтому хочется на нем сделать текстовую игру.
Порывшись в документации на официальном сайте, посмотрев уроки и исходники различных программ я обнаружил, что везде предлагают петлю ‘while true’, когда мне нужно ‘go to’.
Понимаю, что ‘go to’ стало атавизмом, но для моей цели в конце программы предполагается вопрос: ‘Поиграем ещё?’

Вопрос: как сделать так, чтобы была возможность поиграть в игру несколько раз?



 koloda = [6,7,8,9,10,2,3,4,11] * 4
import random
random.shuffle(koloda)
print('Поиграем?')
count = 0
while True:
    choice = input('Будете брать карту? y/n\n')
    if choice == 'y':
        current = koloda.pop()
        print('Вам попалась карта достоинством %d' %current)
        count += current
        if count > 21:
            print('Извините, но вы проиграли')
            break
        elif count == 21:
            print('Поздравляю, вы набрали 21!')
            break
        else:
            print('У вас %d очков.' %count)
    elif choice == 'n':
        print('У вас %d очков и вы закончили игру.' %count)
        break
print('До новых встреч!')

Отредактировано y4n23x (Июль 21, 2021 17:12:24)

Офлайн

#2 Июль 21, 2021 19:02:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

дилетант спрашивает про петлю и змея

y4n23x
как сделать так, чтобы была возможность поиграть в игру несколько раз?
использовать
y4n23x
что везде предлагают петлю ‘while true’



Офлайн

#3 Июль 21, 2021 21:43:12

y4n23x
Зарегистрирован: 2021-07-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

дилетант спрашивает про петлю и змея

получается так

 #старое
#koloda = [6,7,8,9,10,2,3,4,11] * 4
#import random
#random.shuffle(koloda)
#count = 0
choice1 = input('Поиграем? y/n\n') #добавил 1 выбор в начале петли
#while True:
 if choice1 == 'y':
#    choice2 = input('Будете брать карту? y/n\n')
 #   if choice2 == 'y':
  #      current = koloda.pop()
   #     print('Вам попалась карта достоинством %d' %current)
    #    count += current
     #   if count > 21:
      #      print('Извините, но вы проиграли')
      #      count = 0
            choice1 = input('Поиграем ещё? y/n\n') #добавил 2 выбор вместо break'а 
      #  elif count == 21:
      #     print('Поздравляю, вы набрали 21!')
      #      count = 0
            choice1 = input('Поиграем ещё? y/n\n') #добавил 2 выбор вместо break'а 
      #  else:
      #      print('У вас %d очков.' %count)
  #  elif choice2 == 'n':
   #     print('У вас %d очков и вы закончили игру.' %count)
    #    count = 0
        choice1 = input('Поиграем ещё? y/n\n') #добавил 2 выбор вместо break'а 
# elif choice1 == 'n':
#  print('До новых встреч!')
#  break
#забыл добавить else; при вводе кириллицы программа останавливается

Офлайн

#4 Июль 21, 2021 21:58:12

Ocean
Зарегистрирован: 2021-03-14
Сообщения: 131
Репутация: +  9  -
Профиль   Отправить e-mail  

дилетант спрашивает про петлю и змея

y4n23x
Вот так тебе будет удобнее разбираться и нет дублирования строк


   
import random
 
def game(koloda):
    """Основной цикл игры"""
    count = 0
    print("Игра началась. У вас 0 очков")
    while True:
        choice = input('Будете брать карту? y/n\n')
        if choice == 'y':
            current = koloda.pop()
            print('Вам попалась карта достоинством %d' %current)
            count += current
            if count > 21:
                print('Извините, но вы проиграли')
                break
            elif count == 21:
                print('Поздравляю, вы набрали 21!')
                break
            else:
                print('У вас %d очков.' %count)
        elif choice == 'n':
            print('У вас %d очков и вы закончили игру.' %count)
            break
    new_game()
 
def new_game():
    """реализует ветку диалога и запуск игры заново"""
    new_game = input('Cыграем еще раз? (y/n) ')
    while True:
        if new_game == 'y':
            game(create_deck())
        if new_game == 'n':
            print('До новых встреч!')
            break
        else:
            new_game = input('Ошибочный ввод. Нажмите "y", чтобы сыграть еще раз или "n", чтобы выйти из игры ')
 
def create_deck():
    """тасует колоду перед каждой игрой, иначе на 37 ходу твоя программа остановится, потому что в списке koloda не останется элементов"""
    koloda = [6, 7, 8, 9, 10, 2, 3, 4, 11] * 4
    random.shuffle(koloda)
    return koloda
 
def main():
    """запускает первую игру"""
    print('Поиграем?')
    game(create_deck())
 
if __name__ == "__main__":
    main()

Офлайн

#5 Июль 22, 2021 01:43:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

дилетант спрашивает про петлю и змея

y4n23x
Порывшись в документации на официальном сайте, посмотрев уроки и исходники различных программ я обнаружил, что везде предлагают петлю ‘while true’, когда мне нужно ‘go to’.
Общий шаблон такой: если тебе нужно несколько вложенных бесконечных циклов, то ты их прячешь в подпрограммы. Таким образом в структурной парадигме программирования избавляются от goto.

Пример
Вот ты придумал такую конструкцию:
  
>>> n1 = 0
>>> while True:
...     print('Первый цикл')
...     print('Действие 1 1')
...     print('Действие 1 2')
...     print('Действие 1 3')
...     n2 = 0
...     while True:
...         print('Второй цикл')
...         print('Действие 2 1')
...         print('Действие 2 2')
...         print('Действие 2 3')
...         n3 = 0
...         while True:
...             print('Третий цикл')
...             print('Действие 3 1')
...             print('Действие 3 2')
...             print('Действие 3 3')
...             n3 += 1
...             if n3 > 3:
...                 break
...         n2 += 1
...         if n2 > 3:
...             break
...     n1 += 1
...     if n1 > 3:
...         break
... 
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
>>>
И ты её переделываешь в такую конструкцию:
  
>>> def f1():
...     n1 = 0
...     while True:
...         print('Первый цикл')
...         print('Действие 1 1')
...         print('Действие 1 2')
...         print('Действие 1 3')
...         f2()
...         n1 += 1
...         if n1 > 3:
...             break
... 
>>> def f2():
...     n2 = 0
...     while True:
...         print('Второй цикл')
...         print('Действие 2 1')
...         print('Действие 2 2')
...         print('Действие 2 3')
...         f3()
...         n2 += 1
...         if n2 > 3:
...             break
... 
>>> def f3():
...     n3 = 0
...     while True:
...         print('Третий цикл')
...         print('Действие 3 1')
...         print('Действие 3 2')
...         print('Действие 3 3')
...         n3 += 1
...         if n3 > 3:
...             break
... 
>>> f1()
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Первый цикл
Действие 1 1
Действие 1 2
Действие 1 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Второй цикл
Действие 2 1
Действие 2 2
Действие 2 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
Третий цикл
Действие 3 1
Действие 3 2
Действие 3 3
>>>
Внутри подпрограмм ты точно так же можешь дробить всё на подпрограммы. Если внутри подпрограммы тоже появляется несколько вложенных циклов, то ты эти циклы точно так же превращаешь в подпрограммы.


tags: while true goto



Отредактировано py.user.next (Июль 22, 2021 01:49:54)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version