Программирование аркадных игр и обучение информатике

Программирование аркадных игр
и обучение информатике

Chapter 6: Возвращение к циклам

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

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

Существуют видео объяснения с ответами, и код ответа “анимируется”. Просто нажмите на кнопку “шаг” и вы увидите, как действует код.

6.1 Последний символ функции Print

По умолчанию, функция print выводит символ возвращения каретки в конце только что напечатаной строки. Этот символ двигает вывод следующей строки на следующую линию. Чаще всего, это то, что нам нужно. Но иногда это не так. Если мы хотим продолжать выводить текст на той же строке, мы можем поменять стандартный последний символ, выводимый в конце. Например:

print ("Розовый")
print ("Осьминог")

Это выведет:
Розовый
Осьминог

И, используя новую опцию установки последнего(end) символа, мы можем создать код:

print ("Розовый", end="")
print ("Осьминог")

Это выведет:
РозовыйОсьминог

Мы также можем поставить пробел, вместо пустого символа:

print ("Розовый", end=" ")
print ("Осьминог")

Это выведет:
Розовый Осьминог

Вот ещё один пример, используя переменную:

i=0
print (i, end=" ")
i=1
print (i, end=" ")

Это выведет:
0 1

6.2 Продвинутые задачи циклов

  1. Напишите код, выводящий на экран десять звёздочек (*):
    * * * * * * * * * *
    

    Используйте цикл for внутри которого будет помещён print, выводящий звёздочки по одной, вместо того чтобы сразу вывести все десять с помощью одного print'a за раз. Это можно сделать с помощью двух строк кода, цикла for и выражения print.

    После того, как вы разобрались или сдалить, щёлкните здесь для получения ответа.

  2. Напишите код, который выведет следующее:
    * * * * * * * * * *
    * * * * *
    * * * * * * * * * * * * * * * * * * * *
    

    Это то же самое, что и предыдущая проблема, к которой добавился вывод пяти и двадцати звёзд. Скопируйте код предыдущего решения, меняя циклы for по надобности.

    Когда вы решите задачу или сдадитесь, щёлкните здесь для получения ответа.

  3. Используйте два цикла for, один внутри другого, чтобы вывести следующий прямоугольник 10x10:
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    

    Поработайте над этим хотя бы 10 минут, прежде чем подсмотреть ответ. Посмотрите на задачу 1. Код в задаче Problem 1, генерирующий одну строчку звёздочек, должен повториться 10 раз.

    После того, как решение было найдено, либо вы сдались, щёлкните здесь для просмотра ответа.

  4. Используйте два цикла for, один внутри другого, чтобы вывести на экран следующий прямоугольник размером 5х10:
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    

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

    После того, как решение было найдено, либо вы сдались, щёлкните здесь для просмотра ответа.

  5. Используйте два for, один внутри другого, чтобы вывести на экран следующий треугольник 20x5:
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    

    Опять же, схоже с задачами 3 и 4, но с другим диапазоном циклов.

    щёлкните здесь для просмотра ответа.

  6. Напишите код, который выведет следующее:
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    

    Используйте два цикла. Первую строчку выведите циклом, а не через:

    print("0 1 2 3 4 5 6 7 8 9")
    

    Подсказка: сначала создайте цикл, выводящий первую строчку. Затем поместите его внутри цикла, посторяющегося 10 раз. Используйте переменные i или j. Этот и следующий примеры помогут осознать, что эти переменные делают.

    Поработайте над этой задачей хотябы 10 минут, прежде чем смотреть ответ. Процесс проведения 10 минут времени работая над ответом намного важнее, чем сам ответ. Щёлкните здесь для ответа.

  7. Поменяйте предыдущую программу, чтобы она выводила:
    0 0 0 0 0 0 0 0 0 0 
    1 1 1 1 1 1 1 1 1 1 
    2 2 2 2 2 2 2 2 2 2 
    3 3 3 3 3 3 3 3 3 3 
    4 4 4 4 4 4 4 4 4 4 
    5 5 5 5 5 5 5 5 5 5 
    6 6 6 6 6 6 6 6 6 6 
    7 7 7 7 7 7 7 7 7 7 
    8 8 8 8 8 8 8 8 8 8 
    9 9 9 9 9 9 9 9 9 9 
    
    Щёлкните здесь для ответа.
  8. Напишите код, выводящий следующее:
    0
    0 1
    0 1 2
    0 1 2 3
    0 1 2 3 4
    0 1 2 3 4 5
    0 1 2 3 4 5 6
    0 1 2 3 4 5 6 7
    0 1 2 3 4 5 6 7 8
    0 1 2 3 4 5 6 7 8 9
    

    Подсказка: это - то же самое, что и задача 6, но цикл внутри цикла повторяется не фиксированное количество раз. Не используйте range(10), пытайтесь задавать его ситуационно.

    После 10 минут размышлений над ответом, щёлкните здесь для ответа.

  9. Напишите код, выводящий следующее:
    0 1 2 3 4 5 6 7 8 9
      0 1 2 3 4 5 6 7 8
        0 1 2 3 4 5 6 7
          0 1 2 3 4 5 6
            0 1 2 3 4 5
              0 1 2 3 4
                0 1 2 3
                  0 1 2
                    0 1
                      0
    

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

    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8
    0 1 2 3 4 5 6 7
    0 1 2 3 4 5 6
    0 1 2 3 4 5
    0 1 2 3 4
    0 1 2 3
    0 1 2
    0 1
    0
    

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

    После работы над этой задачей как минимум десять минут, щёлкните здесь для ответа.

  10. Напишите код, выводящий следующее (С выравниванием дело будет сложнее, хотя бы справьтесь с выводом чисел):
      1   2   3   4   5   6   7   8   9 
      2   4   6   8  10  12  14  16  18 
      3   6   9  12  15  18  21  24  27 
      4   8  12  16  20  24  28  32  36 
      5  10  15  20  25  30  35  40  45 
      6  12  18  24  30  36  42  48  54 
      7  14  21  28  35  42  49  56  63 
      8  16  24  32  40  48  56  64  72 
      9  18  27  36  45  54  63  72  81 
    

    Подсказка: попытайтесь изменить код из первой задачи, чтобы вывести:

     0  0  0  0  0  0  0  0  0  0 
     0  1  2  3  4  5  6  7  8  9 
     0  2  4  6  8  10  12  14  16  18 
     0  3  6  9  12  15  18  21  24  27 
     0  4  8  12  16  20  24  28  32  36 
     0  5  10  15  20  25  30  35  40  45 
     0  6  12  18  24  30  36  42  48  54 
     0  7  14  21  28  35  42  49  56  63 
     0  8  16  24  32  40  48  56  64  72 
     0  9  18  27  36  45  54  63  72  81 
    

    Затем измените код для вывода:

     1  2  3  4  5  6  7  8  9 
     2  4  6  8  10  12  14  16  18 
     3  6  9  12  15  18  21  24  27 
     4  8  12  16  20  24  28  32  36 
     5  10  15  20  25  30  35  40  45 
     6  12  18  24  30  36  42  48  54 
     7  14  21  28  35  42  49  56  63 
     8  16  24  32  40  48  56  64  72 
     9  18  27  36  45  54  63  72  81 
    

    В конце концов, используйте if для вывода пробелов, если печатаемое число меньше 10.

    После работы над этой задачей как минимум 10 минут, щёлкните здесь для ответа.

  11. Напишите код, выводящий следующее:
                      1
                    1 2 1
                  1 2 3 2 1
                1 2 3 4 3 2 1
              1 2 3 4 5 4 3 2 1
            1 2 3 4 5 6 5 4 3 2 1
          1 2 3 4 5 6 7 6 5 4 3 2 1
        1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
      1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
    

    Подсказка, сначала напишите код, выводящий:

    1 
    1 2 
    1 2 3 
    1 2 3 4 
    1 2 3 4 5 
    1 2 3 4 5 6 
    1 2 3 4 5 6 7 
    1 2 3 4 5 6 7 8 
    1 2 3 4 5 6 7 8 9 
    

    Затем напишите код, выводящий:

    1 
    1 2 1 
    1 2 3 2 1 
    1 2 3 4 3 2 1 
    1 2 3 4 5 4 3 2 1 
    1 2 3 4 5 6 5 4 3 2 1 
    1 2 3 4 5 6 7 6 5 4 3 2 1 
    1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 
    1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 
      

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

    После работы над этой задачей как минимум 10 минут, щёлкните здесь для правильного ответа.

  12. Напишите код, выводящий следующее:
                      1
                    1 2 1
                  1 2 3 2 1
                1 2 3 4 3 2 1
              1 2 3 4 5 4 3 2 1
            1 2 3 4 5 6 5 4 3 2 1
          1 2 3 4 5 6 7 6 5 4 3 2 1
        1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
      1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
        1 2 3 4 5 6 7 8
          1 2 3 4 5 6 7
            1 2 3 4 5 6
              1 2 3 4 5
                1 2 3 4
                  1 2 3
                    1 2
                      1
    

    Это может быть достигнуто, комбинируя 9 и 11 задачи.

    После работы над этой задачей как минимум 10 минут, щёлкните здесь для правильного ответа.

  13. Напишите код, выводящий следующее:
                      1
                    1 2 1
                  1 2 3 2 1
                1 2 3 4 3 2 1
              1 2 3 4 5 4 3 2 1
            1 2 3 4 5 6 5 4 3 2 1
          1 2 3 4 5 6 7 6 5 4 3 2 1
        1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
      1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
        1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
          1 2 3 4 5 6 7 6 5 4 3 2 1
            1 2 3 4 5 6 5 4 3 2 1
              1 2 3 4 5 4 3 2 1
                1 2 3 4 3 2 1
                  1 2 3 2 1
                    1 2 1
                      1
    
    
    

    После работы над этой задачей как минимум 10 минут, щёлкните здесь для правильного ответа.

6.3 Повторение пройденного

Попробуйте тест с несколькими вариантами ответов. Проверьте, сможете ли вы ответить на эти вопросы.

  1. Что выведет эта программа?
    x=0
    while x < 10:
        print (x)
        x=x+2
    
  2. Что выведет эта программа?
    x=1
    while x < 64:
        print (x)
        x=x*2
    
  3. Что выведет эта программа?
    x=5
    while x >= 0:
        print (x)
        if x == "1":
            print ("Полетели!")
        x=x-1
    
  4. Исправьте следующий код:
    x=input("Введите число, которое больше нуля: ")
    
    while x <= 0:
        print "Введённое число слишком маленькое. Введите число, которое больше нуля: "
    
  5. Почините следующий код:
    x=10
    
    while x < 0:
        print (x)
        x-1
    
    print ("Полетели")
    
  6. Что выведет эта программа?
    print (3==1+2)
    x=5
    print (x==5)
    print (3<4)
    print (4<4)
    print ("Hi" == "Hi")
    print ("hi" == "Hi")
    print ("a" < "b")
    t=5==5
    print (t)
    done=False
    if done:
        print ("I am done.")
    else:
        print ("I am not done.")
    

You are not logged in. Log in here and track your progress.