Вы находитесь на странице: 1из 12

Урок № 5-6

«Пятнашки»

Цель урока: изучить работу модуля random, генерировать


случайные числа и последовательности. Написать неболь-
шое приложение для генерации пароля, состоящего из
букв и цифр. Создать приложение «Пятнашки».
«Пятнашки»

Модуль random
Модуль random необходим для генерации псевдослу-
чайных чисел. Чтобы начать работу с данным модулем,
прежде необходимо его импортировать.
import random
или
from random import *
Посмотрим, как работает базовая функция random().
Данная функция генерирует число в промежутке [0.0,
1.0).
random()
Однако это не всегда удобно. Генерировать чис-
ла можно в заданном диапазоне от a до b. Функция
uniform() возвращает псевдослучайное вещественное
число float в заданном диапазоне, а randint() – целое
int. В дальнейшем это понадобится нам для генериро-
вания последовательности псевдослучайных чисел в
игре «Пятнашки».
uniform(a,b)#псевдослучайное вещественное число

randint(a,b)#псевдослучайное целое число


Модуль random позволяет работать не только с чис-
лами. Можно выбрать псевдослучайный элемент из за-
данной последовательности (строка, список, кортеж),
перемешать элементы последовательности.
3
Урок № 5-6

choice("qwerty") #случайный элемент из последова-


тельности

shuffle(my_list) #перемешать элементы последова-


тельности
В Приложении 2 приведен пример генерации ново-
го пароля из букв латинского алфавита в нижнем, верх-
нем регистре и цифр.

Случайные цвета
Рассмотрим, как с помощью функции random мож-
но сгенерировать случайные цвета. Чтобы задать цвет,
достаточно указать три составляющие: red, green, blue,
каждая из которых может принимать значение от 0 до
255. Например, черный цвет rgb(0,0,0) или #000000, бе-
лый цвет rgb(255,255,255) или #111111.
r = int(random() * 256)

g = int(random() * 256)

b = int(random() * 256)
Таким образом, 3 числа будут сгенерированы, а их
комбинация образует случайный цвет. Следующая за-
дача, которую необходимо решить – перевести получен-
ное значение из десятичной в шестнадцатеричную си-
стему. Воспользуемся идентификатором %02х.
rgb = "#%02x%02x%02x" % (r,g,b)

4
«Пятнашки»

Проверяем результат на палитре цветов.

Перевод числа из Dec в Hex


Рассмотрим принцип перевода числа в
шестнадцатеричное представление. Возьмем число 115.
Делим на 2, вычисляем остаток от деления и отнимаем
от делимого остаток. Записываем в начало таблички
остаток (0 или 1). Продолжаем делить. В результате
получим двоичное представление числа. В нашем случае
это 115.
1. 115 % 2 = 1
115 // 2 = 57
2. 57 % 2 = 1
57 // 2 = 28
3. 28 % 2 = 0
28 // 2 = 14
4. 14 % 2 = 0
14 // 2 = 7

5
Урок № 5-6

5. 7 % 2 = 3
7 // 2 = 1
6. 3 % 2 = 1
3 // 2 = 1 #первый элемент последовательности
Записываем в таблицу полученные значения.
Продвигаемся с конца: 15 dec == 1110011 bin. Вместо не-
достающего восьмого значения ставим 0 в начало.

Затем необходимо перейти к шестнадцатеричной


системе. При этом учитываем, что А = 10, B = 11, C = 12,
D = 13, E = 14, F = 15.

Итого получаем 115 dec = 0х73 hex.

Работа с клавиатурой
Игра «Пятнашки» предполагает обработку нажа-
тия клавиш (вверх/вниз/влево/вправо). Пользователь
нажал клавишу <Key>. В результате обработки события
ключ предоставляется в формате char.
6
«Пятнашки»

Приложение 1. «Пятнашки»

from tkinter import *


from tkinter import messagebox
from random import *

def isEnd():
global field
for i in range(15):
if field[i]["text"]!=str(i+1):
return
messagebox.showinfo("Congratulations", "You won")
exit(0)
7
Урок № 5-6

def findEmptyCell():
global field
for i in range(16):
if field[i]["text"]=="":
return i

def keyPress(e):
pos = findEmptyCell()
if e.keycode==8320768:#Up ==38
if pos<12:
field[pos]["text"],field[pos+4]["text"]=field[pos+4]
["text"],field[pos]["text"]
if e.keycode == 8124162:#Left ==37
if (pos + 1) % 4 != 0:
field[pos]["text"], field[pos + 1]["text"] =
field[pos + 1]["text"], field[pos]["text"]

if e.keycode == 8255233:#Down ==40


if pos>3:
field[pos]["text"],field[pos-4]["text"]=field
[pos-4]["text"],field[pos]["text"]

if e.keycode == 8189699:#Right ==39


if (pos)%4!=0:
field[pos]["text"],field[pos-1]["text"]=field[pos-1]
["text"],field[pos]["text"]
isEnd()

8
«Пятнашки»

def setField():
n = 0
for i in range(4):
for j in range(4):
field.append(
Label(form, width=6, height=3,
font="Arial 20 bold",
borderwidth=1,relief="solid"))
field[n].grid(row=i, column=j)
n += 1

k = 1
while k < 16:
a = randint(0, 15)
if (field[a]["text"] == ""):
field[a]["text"] = str(k)
k += 1

form = Tk()

form.title("Game")
form.resizable(False,False)
field = []
setField()
form.bind("<Key>",keyPress)
form.mainloop()

9
Урок № 5-6

Приложение 2. Генерируем пароль

from random import *

number = "123456789"
new_string = "qwertyuiopasdfghjklzxcvbnm"
up_string = new_string.upper()
passw = number+new_string+up_string
List = list(passw)
shuffle(List)

user_passw = ''.join([choice(List) for x in range(8)])

print(user_passw)

10
Урок № 5-6
«Пятнашки»

© Компьютерная Академия «Шаг»


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопроизведения,


фрагменты которых использованы в материале, принадлежат их законным владель-
цам. Фрагменты произведений используются в иллюстративных целях в объёме,
оправданном поставленной задачей, в рамках учебного процесса и в учебных целях,
в соответствии со ст. 1274 ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське
право і суміжні права». Объём и способ цитируемых произведений соответствует
принятым нормам, не наносит ущерба нормальному использованию объектов
авторского права и не ущемляет законные интересы автора и правообладателей.
Цитируемые фрагменты произведений на момент использования не могут быть
заменены альтернативными, не охраняемыми авторским правом аналогами, и
как таковые соответствуют критериям добросовестного использования и честного
использования.
Все права защищены. Полное или частичное копирование материалов запрещено.
Согласование использования произведений или их фрагментов производится
с авторами и правообладателями. Согласованное использование материалов
возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое исполь-
зование материалов определяется действующим законодательством Украины.

Вам также может понравиться