ҚАЗАҚ ИННОВАЦИЯЛЫҚ ГУМАНИТАРЛЫҚ ЗАҢ УНИВЕРСИТЕТІ
«Жобалауды талдау» пәнінің зертханалық
сабақтарының әдістемелік нұсқаулығы
Семей, 2018 ж.
Зертханалық сабақтарының әдістемелік нұсқаулығы 5В070300 «Ақпараттық жүйелер» мамандығының 3 курс студенттеріне арналып құрастырылған.
Құрастырушы: И.К.Каскабаева, аға оқытушы, магистр кафедра «Информатика және математика»
№ 14 зертханалық сабақ
Тақырып: Python бағдарламалау тілінде күрделі бағдарламаларды құру.
Сабақ мақсаты: Python бағдарламалау тілінде бірнеше күрделі бағдарламаларды құра отырып, олардың функцияларын, модульдерін бір – бірінен ажырату.
Тапсырма:
«Каратэ» символының бағдарламасын құр
«Күн жүйесі немесе планета айналымы» бағдарламасын құр.
«Табиғат. Қарапайым Теректер» бағдарламасын құр
«Түс өзгерту өлшемі» бағдарламасын құр
«Жылан» ойынының бағдарламасын құр.
Қажетті құралдар: ДК, Python бағдарламалау тілі
Зертханалық жұмысты орындауға арналған әдістемелік нұсқаулар:
Әдiстемелiк нұсқаулармен танысу.
Python бағдарламлау тілінде «Каратэ» символының бағдарламасын құру
#!/usr/bin/env python3
""" turtle-example-suite:
tdemo_yinyang.py
Another drawing suitable as a beginner's
programming example.
The small circles are drawn by the circle
command.
"""
from turtle import *
def yin(radius, color1, color2):
width(3)
color("black", color1)
begin_fill()
circle(radius/2., 180)
circle(radius, 180)
left(180)
circle(-radius/2., 180)
end_fill()
left(90)
up()
forward(radius*0.35)
right(90)
down()
color(color1, color2)
begin_fill()
circle(radius*0.15)
end_fill()
left(90)
up()
backward(radius*0.35)
down()
left(90)
def main():
reset()
yin(200, "black", "white")
yin(200, "white", "black")
ht()
return "Done!"
if __name__ == '__main__':
main()
Python бағдарламлау тілінде «Күн жүйесі немесе планета айналымы» бағдарламасын құру.
#!/usr/bin/env python3
""" turtle-example-suite:
tdemo_yinyang.py
Another drawing suitable as a beginner's
programming example.
The small circles are drawn by the circle
command.
"""
from turtle import *
def yin(radius, color1, color2):
width(3)
color("black", color1)
begin_fill()
circle(radius/2., 180)
circle(radius, 180)
left(180)
circle(-radius/2., 180)
end_fill()
left(90)
up()
forward(radius*0.35)
right(90)
down()
color(color1, color2)
begin_fill()
circle(radius*0.15)
end_fill()
left(90)
up()
backward(radius*0.35)
down()
left(90)
def main():
reset()
yin(200, "black", "white")
yin(200, "white", "black")
ht()
return "Done!"
if __name__ == '__main__':
main()
mainloop()
Python бағдарламлау тілінде «Табиғат. Қарапайым Теректер» бағдарламасын құру.
#!/usr/bin/env python3
""" turtlegraphics-example-suite:
tdemo_forest.py
Displays a 'forest' of 3 breadth-first-trees
similar to the one in tree.
For further remarks see tree.py
This example is a 'breadth-first'-rewrite of
a Logo program written by Erich Neuwirth. See
http://homepage.univie.ac.at/erich.neuwirth/
"""
from turtle import Turtle, colormode, tracer, mainloop
from random import randrange
from time import perf_counter as clock
def symRandom(n):
return randrange(-n,n+1)
def randomize( branchlist, angledist, sizedist ):
return [ (angle+symRandom(angledist),
sizefactor*1.01**symRandom(sizedist))
for angle, sizefactor in branchlist ]
def randomfd( t, distance, parts, angledist ):
for i in range(parts):
t.left(symRandom(angledist))
t.forward( (1.0 * distance)/parts )
def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):
# benutzt Liste von turtles und Liste von Zweiglisten,
# fuer jede turtle eine!
if level > 0:
lst = []
brs = []
for t, branchlist in list(zip(tlist,branchlists)):
t.pensize( size * widthfactor )
t.pencolor( 255 - (180 - 11 * level + symRandom(15)),
180 - 11 * level + symRandom(15),
0 )
t.pendown()
randomfd(t, size, level, angledist )
yield 1
for angle, sizefactor in branchlist:
t.left(angle)
lst.append(t.clone())
brs.append(randomize(branchlist, angledist, sizedist))
t.right(angle)
for x in tree(lst, size*sizefactor, level-1, widthfactor, brs,
angledist, sizedist):
yield None
def start(t,x,y):
colormode(255)
t.reset()
t.speed(0)
t.hideturtle()
t.left(90)
t.penup()
t.setpos(x,y)
t.pendown()
def doit1(level, pen):
pen.hideturtle()
start(pen, 20, -208)
t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] )
return t
def doit2(level, pen):
pen.hideturtle()
start(pen, -135, -130)
t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] )
return t
def doit3(level, pen):
pen.hideturtle()
start(pen, 190, -90)
t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] )
return t
# Hier 3 Baumgeneratoren:
def main():
p = Turtle()
p.ht()
tracer(75,0)
u = doit1(6, Turtle(undobuffersize=1))
s = doit2(7, Turtle(undobuffersize=1))
t = doit3(5, Turtle(undobuffersize=1))
a = clock()
while True:
done = 0
for b in u,s,t:
try:
b.__next__()
except:
done += 1
if done == 3:
break
tracer(1,10)
b = clock()
return "runtime: %.2f sec." % (b-a)
if __name__ == '__main__':
main()
mainloop()
Python бағдарламлау тілінде «Түс өзгерту өлшемі» бағдарламасын құру.
# colormixer
|
|
|
|
|
from turtle import Screen, Turtle, mainloop
|
|
|
|
class ColorTurtle(Turtle):
|
|
|
|
def __init__(self, x, y):
|
|
Turtle.__init__(self)
|
|
self.shape("turtle")
|
|
self.resizemode("user")
|
|
self.shapesize(3,3,5)
|
|
self.pensize(10)
|
|
self._color = [0,0,0]
|
|
self.x = x
|
|
self._color[x] = y
|
|
self.color(self._color)
|
|
self.speed(0)
|
|
self.left(90)
|
|
self.pu()
|
|
self.goto(x,0)
|
|
self.pd()
|
|
self.sety(1)
|
|
self.pu()
|
|
self.sety(y)
|
|
self.pencolor("gray25")
|
|
self.ondrag(self.shift)
|
|
|
|
def shift(self, x, y):
|
|
self.sety(max(0,min(y,1)))
|
|
self._color[self.x] = self.ycor()
|
|
self.fillcolor(self._color)
|
|
setbgcolor()
|
|
|
|
def setbgcolor():
|
|
screen.bgcolor(red.ycor(), green.ycor(), blue.ycor())
|
|
|
|
def main():
|
|
global screen, red, green, blue
|
|
screen = Screen()
|
|
screen.delay(0)
|
|
screen.setworldcoordinates(-1, -0.3, 3, 1.3)
|
|
|
|
red = ColorTurtle(0, .5)
|
|
green = ColorTurtle(1, .5)
|
|
blue = ColorTurtle(2, .5)
|
|
setbgcolor()
|
|
|
|
writer = Turtle()
|
|
writer.ht()
|
|
writer.pu()
|
|
writer.goto(1,1.15)
|
|
writer.write("DRAG!",align="center",font=("Arial",30,("bold","italic")))
|
|
return "EVENTLOOP"
|
|
|
|
if __name__ == "__main__":
|
|
msg = main()
|
|
print(msg)
|
|
mainloop()
|
Python бағдарламлау тілінде «Жылан» ойынының бағдарламасын құру
from tkinter import *
import random
# Globals
WIDTH = 800
HEIGHT = 600
SEG_SIZE = 20
IN_GAME = True
# Helper functions
def create_block():
""" Creates an apple to be eaten """
global BLOCK
posx = SEG_SIZE * random.randint(1, (WIDTH-SEG_SIZE) / SEG_SIZE)
posy = SEG_SIZE * random.randint(1, (HEIGHT-SEG_SIZE) / SEG_SIZE)
BLOCK = c.create_oval(posx, posy,
posx+SEG_SIZE, posy+SEG_SIZE,
fill="red")
def main():
""" Handles game process """
global IN_GAME
if IN_GAME:
s.move()
head_coords = c.coords(s.segments[-1].instance)
x1, y1, x2, y2 = head_coords
# Check for collision with gamefield edges
if x2 > WIDTH or x1 < 0 or y1 < 0 or y2 > HEIGHT:
IN_GAME = False
# Eating apples
elif head_coords == c.coords(BLOCK):
s.add_segment()
c.delete(BLOCK)
create_block()
# Self-eating
else:
for index in range(len(s.segments)-1):
if head_coords == c.coords(s.segments[index].instance):
IN_GAME = False
root.after(100, main)
# Not IN_GAME -> stop game and print message
else:
c.create_text(WIDTH/2, HEIGHT/2,
text="GAME OVER!",
font="Arial 20",
fill="red")
class Segment(object):
""" Single snake segment """
def __init__(self, x, y):
self.instance = c.create_rectangle(x, y,
x+SEG_SIZE, y+SEG_SIZE,
fill="white")
class Snake(object):
""" Simple Snake class """
def __init__(self, segments):
self.segments = segments
# possible moves
self.mapping = {"Down": (0, 1), "Right": (1, 0),
"Up": (0, -1), "Left": (-1, 0)}
# initial movement direction
self.vector = self.mapping["Right"]
def move(self):
""" Moves the snake with the specified vector"""
for index in range(len(self.segments)-1):
segment = self.segments[index].instance
x1, y1, x2, y2 = c.coords(self.segments[index+1].instance)
c.coords(segment, x1, y1, x2, y2)
x1, y1, x2, y2 = c.coords(self.segments[-2].instance)
c.coords(self.segments[-1].instance,
x1+self.vector[0]*SEG_SIZE, y1+self.vector[1]*SEG_SIZE,
x2+self.vector[0]*SEG_SIZE, y2+self.vector[1]*SEG_SIZE)
def add_segment(self):
""" Adds segment to the snake """
last_seg = c.coords(self.segments[0].instance)
x = last_seg[2] - SEG_SIZE
y = last_seg[3] - SEG_SIZE
self.segments.insert(0, Segment(x, y))
def change_direction(self, event):
""" Changes direction of snake """
if event.keysym in self.mapping:
self.vector = self.mapping[event.keysym]
# Setting up window
root = Tk()
root.title("PythonicWay Snake")
c = Canvas(root, width=WIDTH, height=HEIGHT, bg="#003300")
c.grid()
# catch keypressing
c.focus_set()
# creating segments and snake
segments = [Segment(SEG_SIZE, SEG_SIZE),
Segment(SEG_SIZE*2, SEG_SIZE),
Segment(SEG_SIZE*3, SEG_SIZE)]
s = Snake(segments)
# Reaction on keypress
c.bind("", s.change_direction)
create_block()
main()
root.mainloop()
Өзін-өзі бақылауға арналған сұрақтар:
Python бағдарламалау тілінде модульдерге анықтама беріңіз.
Модульдердің айырмашылығы неде?
Функцияларды ата.
Есеп беру түрі: Орындалған тапсырманың электронды нұсқасын оқытушыға тексерту, сұрақтарына ауызша жауап беру.
Достарыңызбен бөлісу: |