Главная страница
Навигация по странице:

  • Работа со списками

  • Доступ к элементам списка

  • Изменение элементов списка

  • Выбор случайного элемента

  • Практическое задание

  • 1 урок Введение и подготовка


    Скачать 2.7 Mb.
    Название1 урок Введение и подготовка
    Дата24.01.2023
    Размер2.7 Mb.
    Формат файлаdocx
    Имя файлаKonspekt_Python (2).docx
    ТипУрок
    #903253
    страница7 из 7
    1   2   3   4   5   6   7

    10 урок: Случайные числа, списки.




    Урок 9 Случайные числа, списки

    Что такое случайность? Случайность он же random, это некое явление или событие которое в идеале невозможно предсказать, например, когда вы подбрасываете монетку, или выбираете случайного персонажа в какой-либо игре. Даже гуляя вы можете поскользнуться на банановой кожуре и она может быть выше 0%. Но что значит вероятность? Все эти проценты, как они связаны с искусственным интеллектом. Все дело в том что многие вещи в искусственном интеллекте могут быть завязаны на применении случайных чисел, что бы программа была непредсказуемой, а значит более похожей на поведение человека. Случайное число представляет собой число можно только угадать. Представим игральный кубик, у него 6 граней со сторонами от 1 до 6. Всего 6 возможных чисел. Вероятность – величина которая показывает наступление того или иного события. 100% - событие произойдет несмотря ни на что. Так, например, вероятность того, что завтра наступил ночь. Но если мы хотим, чтобы на кубике выпало например число 3, то вероятность выпада уже будет 1/6*100%. 



    Давайте для начала посмотрим как работает рандом.

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

    Чтобы создать генератор случайных чисел, первым делом импортируйте в начале кода модуль random. Затем воспользуйтесь функцией randint()  — она выведет в окне консоли случайное целое число. Функция randint() содержит два аргумента — наименьшее и наибольшее из возможных значений. В этом примере могут быть сгенерированы числа

    1, 2, 3, 4, 5, 6,7 ,8, 9, 10.

    import random import time
    while True:
    r = random. randint (1,10)
    if r == 1:
    print ("win")
    else:
    print ("lose")

    Какая вероятность выпада нашего числа?

    И теперь нам выводятся разные фразы выигрыша и проигрыша.

     

     

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

    Вернемся к коду с прошлого и урока и допишем код с вероятностью

    10%, что он может на нас обидеться.

    if random.randint(1,10) == 10:

    blockMood = “hadenought”

    mc.postToChat(“ That’s it. I’ve had enough!”)

    FAR AWAY = 15
    blockMood = "happy"
    friend = mc.player.getTilePos ()
    friend.x = friend.x + 5
    friend.y = mc.getHeight (friend.z, friend.z)
    me. setBlock(friend.z, friend.y, friend.z, block.DIAMOND_BLOCK.id) while True:
    pos = mc.player.getTilePos ()
    distance = distanceBetweenPoints (pos, friend)
    if blockMood == "happy":
    if distance < FAR AWAY:
    target = pos.clone ()
    else:
    blockMood = "sad"
    mc.postToChat (" Please return. I miss you..
    elif blockMood == "sad":
    if distance <= 2:
    blockMood = "happy"
    mc.postToChat (" Hooray! Let's go!")

    if random.randint (1,10) == 10:
    blockMood = "hadenough"
    mc.postToChat ("«bot> That's it. I've had enough!")
    elif blockMood == "hadenough";
    if random.randint (1,50) == 50:
    blockMood = "happy"
    I
    mc.postToChat (" Okay, I'11 forgive you")


    if friend != target:
    line = medraw.getLine (friend.x, friend.y, friend., target.x, target.y, target.z)
    for nextBlock in line[:-1]:
    mc. setBlock (friend.x, friend.y, friend.z, block.AIR.id)
    friend = nextBlock.clone ()
    friend.y = mc.getHeight (friend.x, friend.z)
    mc. setBlock (friend.x, friend.y, friend., block.DIAMOND_BLOCK.id) time.sleep (0.25)
    target = friend.clone ()
    time.sleep (0.25)

     

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

    elif blockMood == “hadenough”:

    if random.randint(1,50) == 50:

    blockMood = “happy” mc.postToChat(“ Okay, I’ll forgive you”)



     В данном случае мы использовали ключевое слово elif. У нас в самом начале указано слово if и проверяет равно ли его настроение счастливому, если же условие не выполняется, то код указанный ниже не выполняется и дальше под elif сравнивается другое состояние грустный ли бот , но если это уже не выполняется то проверяется под elif что наш бот обиделся, если это так то выполняется код указанный под этим условием. 


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

    Настало время вспомнить первые уроки, давайте напишем программу, которая будет телепортировать нашего персонажа в случайные места. Ваша задача — сделать так, чтобы игрок переместился, изменив свои координаты xи на случайные. Для этого сначала  нужно  узнать  текущие координаты игрока и прибавить к каждой из них случайное число. Чтобы изменить координаты и z, используйте значения от ‒10 до 10, а для координаты — от 0 до 10.

     From mcpi.minecraft import Minecraft
    mc = Minecraft.create ()
    import random www
    ROS = mc.player.getPos ()
    x = pos.x
    y = pos. y
    2 = pos.z
    × = x + Fandon-sandinti(-10, 10) mc.player. setPos (x, Y, z)

    mc.player.setPos(x,y,z)

     

    Здесь отсутствует фрагмент кода для генерации случайных смещений по осям и — добавьте его сами. После этого игрок сможет прыгнуть в неизвестность Позвольте случаю перенести его в новые потрясающие места!

    • Давайте сделаем программу еще более непредсказуемой! После прыжка в случайное место разместите под ногами игрока блок случайно выбранного типа. Если вы телепортируете игрока туда, откуда он не сможет выбраться, запустите еще раз, и герой окажется в более безопасном месте.

    Списки


    В повседневной жизни мы составляем списки покупок, вещей в дорогу или перечисляем по  пунктам порядок каких-либо действий. В Python списки устроены похожим образом: они позволяют хранить целые наборы данных в определенной последовательности. Данными могут быть строки, числа, булевы значения и даже другие списки. Обычная переменная содержит единственное значение. Списки  же позволяют помещать в одну переменную множество значений, например числа от 1 до 100 или имена друзей. В других языках программирования списки часто называются массивами. При создании программ для Minecraft в списках можно хранить идентификаторы блоков, координаты игрока и много чего еще. Всё это добавляет вашим программам гибкости.

    Работа со списками


     Создать список несложно — для этого заключите набор перечисленных через запятую значений в квадратные скобки. Впрочем, в квадратных скобках может и не быть значений — тогда получится пустой список. 9. Списки, словари и удары по блокам 211 Список ингредиентов для вермишелевого супа может выглядеть так:

     

    »> noodleSoup = ["вода",
    "соевый соус", "зеленый лук", "вермишель"
    "говядина"1
    Список noodleSoup содержит несколько значений, и все они являются строками. Пустой список выглядит так:

    »> print (noodleSoup [0])
    вода

    empryList = {}



    Он ничего не содержит, однако вы можете добавить в него значения позже. В Python можно не  только хранить в  списках любые значения, но и объединять значения разных типов в один список. 

    давайте научимся получать доступ к данным списка и изменять их.

     Доступ к элементам списка 


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

    Обратите внимание: первому элементу соответствует индекс 0. Соответственно, у второго элемента будет индекс 1, у третьего — 2 и так далее. Дело в том, что, работая со списками, компьютер ведет отсчет элементов с нуля. Отсчет с  нуля может показаться странным, однако для этого есть причины: первые компьютеры были очень медленными и обладали малым объемом памяти. Отсчет с нуля позволял повысить быстродействие и эффективность программ. И хотя с тех пор компьютеры стали гораздо мощнее, они по-прежнему считают с нуля. Попытавшись обратиться к элементу, которого нет в списке, вы получите сообщение об  ошибке.

    Изменение элементов списка 


    Отдельные значения, хранящиеся в  списке, можно менять  — точно так же как можно менять значения переменных. Это допустимо, потому что списки являются изменяемыми. Чтобы присвоить элементу новое значение, нужно обратиться к нему по индексу и задать значение так же, как мы присваивали его переменной (при помощи знака «равно»). Давайте заменим ингредиент говядина в списке noodleSoup на курица. Это пятый элемент списка, а значит, ему соответствует индекс 4 (вспомните: мы ведем отсчет от 0). Присвоить элементу 4 новое значение можно так:

    » noodleSoup [4] = "курица"

    Выбор случайного элемента 


    Наверное, вы уже заметили, что мы используем в  коде случайные значения. Это делает работу программы при каждом запуске непредсказуемой. Иногда бывает нужно получить случайный элемент из списка — например, выбрать случайный блок из списка блоков. Для этого хорошо подходит функция choice() из модуля random. Эта функция принимает список в качестве аргумента и возвращает случайный элемент. В коде листинга 9.5 список colors содержит названия разных цветов. Программа выбирает одно из них с помощью choice() и выводит его на экран:

    import random
    colors = ["красный",
    ",
    " синий",
    "пурпурный"]
    print (random.choice (colors))
    "желтый", "оранжевый"

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

    Практическое задание:

    •   Выбор случайного идентификатора блока из всего диапазона значений осложняется тем, что некоторым значениям не  соответствует какой либо тип блока. Один из способов решить эту проблему — создать список с подходящими идентификаторами и выбирать из него случайное значение с помощью choice(). Ваша задача  - составить список идентификаторов блоков, выбрать из него случайное значение и создать соответствующий блок в позиции игрока. (Подсказка: Первым делом создайте список идентификаторов. Затем получите случайный элемент, вызвав функцию random.choice(). Далее используйте функцию setBlock(), чтобы создать в игровом мире блок выбранного типа.)

    Вы уже знаете, что аргументами функций setBlock() и setBlocks() являются координаты блока и его идентификатор. Однако у этих функций есть еще один, необязательный аргумент — состояние блока. Все блоки в Minecraft находятся в одном из шестнадцати состояний, которые обозначаются числами от 0 до 15. Для шерстяных блоков каждому состоянию соответствует свой цвет. С блоком «динамит» (идентификатор 46) ничего не случится, если вы ударите по нему в его обычном состоянии (состояние 0), однако в состоянии 1 он взорвется. При этом, хотя у блока любого типа есть все 16 состояний, они не обязательно различаются между собой. Чтобы задать состояние блока, функциям setBlock() или setBlocks() нужно передать дополнительный аргумент, в данном примере state. Следующий код создает блок шерсти розового цвета:

     

    Практическое задание:

    •     Создайте стену из блоков шерсти, причем цвет укажите при помощи случайного числа





    Стр.

    1   2   3   4   5   6   7


    написать администратору сайта