Влад Григорьев, вот это я хакер,использовал google lens,чтобы скопировать текст с картинки)))
Вот это написано в учебнике
Вы можете определить функцию внутри другой функции:
def outer(a, b)
definner(c. d):
return c d
return inner(a. ь)
outer(4, 7)
11
Внутренние функции могут быть полезны при выполнении некоторых сложных
Задач больше одного раза внутри другой функции. Это позволит избежать использованния циклов или дублирования кода, Рассмотрим пример работы со строкой,
когда внутренняя функция добавляет текст к своему аргументу:
def knights(saying):
def inner(quote)
return "We are the knights who say: "1s quote
Animkim, Elvis, извиняюсь,где-то обрезалось вот фул(это другой)
from tkinter import*
HEIGHT=500
WIDTH=800
window=Tk()
window.title('Bubble Blaster')
c=Canvas(window,width=WIDTH,height=HEIGHT,bg='darkblue')
c.pack()
ship_id=c.create_polygon(5,5,5,25,30,15,fill='red')
ship_id2=c.create_oval(0,0,30,30,outline='red')
ship_id3=c.create_polygon(2,15,27,5,27,25,fill='red')
SHIP_R=15
MID_X=WIDTH/2
MID_Y=HEIGHT/2
c.move(ship_id,MID_X,MID_Y)
c.move(ship_id2,MID_X,MID_Y)
c.move(ship_id3,MID_X,MID_Y)
SHIP_SPD=20
c.itemconfig(ship_id3,state=HIDDEN)
def move_ship(event):
key=event.keysym
if key=="Up":
c.move(ship_id,0,-SHIP_SPD)
c.move(ship_id2,0,-SHIP_SPD)
c.move(ship_id3,0,-SHIP_SPD)
elif key=="Down":
c.move(ship_id,0,SHIP_SPD)
c.move(ship_id2,0,SHIP_SPD)
c.move(ship_id3,0,SHIP_SPD)
elif key=="Left":
c.itemconfig(ship_id3,state=NORMAL)
c.itemconfig(ship_id,state=HIDDEN)
c.move(ship_id,-SHIP_SPD,0)
c.move(ship_id2,-SHIP_SPD,0)
c.move(ship_id3,-SHIP_SPD,0)
elif key=="Right":
c.itemconfig(ship_id3,state=HIDDEN)
c.itemconfig(ship_id,state=NORMAL)
c.move(ship_id,SHIP_SPD,0)
c.move(ship_id2,SHIP_SPD,0)
c.move(ship_id3,SHIP_SPD,0)
c.bind_all('',move_ship)
def move_ship1(event):
c.move(ship_id,0,-SHIP_SPD)
c.move(ship_id2,0,-SHIP_SPD)
c.move(ship_id3,0,-SHIP_SPD)
def move_ship2(event):
c.move(ship_id3,0,SHIP_SPD)
c.move(ship_id,0,SHIP_SPD)
c.move(ship_id2,0,SHIP_SPD)
def move_ship3(event):
c.itemconfig(ship_id3,state=NORMAL)
c.itemconfig(ship_id,state=HIDDEN)
c.move(ship_id,-SHIP_SPD,0)
c.move(ship_id2,-SHIP_SPD,0)
c.move(ship_id3,-SHIP_SPD,0)
def move_ship4(event):
c.itemconfig(ship_id3,state=HIDDEN)
c.itemconfig(ship_id,state=NORMAL)
c.move(ship_id,SHIP_SPD,0)
c.move(ship_id2,SHIP_SPD,0)
c.move(ship_id3,SHIP_SPD,0)
c.bind_all('',move_ship1)
c.bind_all('',move_ship2)
c.bind_all('',move_ship3)
c.bind_all('',move_ship4)
from random import randint
bub_id=list()
bub_r=list()
bub_speed=list()
MIN_BUB_R=10
MAX_BUB_R=30
MAX_BUB_SPD=10
GAP=100
def create_bubble():
x=WIDTH+GAP
y=randint(0,HEIGHT)
r=randint(MIN_BUB_R,MAX_BUB_R)
id1=c.create_oval(x-r,y-r,x+r,y+r,fill='white')
bub_id.append(id1)
bub_r.append(r)
bub_speed.append(randint(1,MAX_BUB_SPD))
def move_bubbles():
for i in range(len(bub_id)):
c.move(bub_id[i],-bub_speed[i],0)
def get_coords(id_num):
pos=c.coords(id_num)
x=(pos[0]+pos[2])/2
y=(pos[1]+pos[3])/2
return x,y
def del_bubble(i):
del bub_r[i]
del bub_speed[i]
c.delete(bub_id[i])
del bub_id[i]
def clean_up_bubs():
for i in range (len(bub_id)-1,-1,-1):
x,y=get_coords(bub_id[i])
if x<-GAP:
del_bubble(i)
from math import sqrt
def distance(id1,id2):
x1,y1=get_coords(id1)
x2,y2=get_coords(id2)
return sqrt((x2-x1)**2+(y2-y1)**2)
def collision():
points=0
for bub in range(len(bub_id)-1,-1,-1):
if distance(ship_id2,bub_id[bub])<(SHIP_R+bub_r[bub]):
points+=(bub_r[bub]+bub_speed[bub])
del_bubble(bub)
return points
c.create_text(50,30,text='TIME',fill='white')
c.create_text(150,30,text='SCORE',fill='white')
time_text=c.create_text(50,50,fill='white')
score_text=c.create_text(150,50,fill='white')
def show_score(score):
c.itemconfig(score_text,text=str(score))
def show_time(time_left):
c.itemconfig(time_text,text=str(time_left))
from time import sleep,time
BUB_CHANCE=10
TIME_LIMIT=30
BONUS_SCORE=1000
score=0
bonus=0
end=time()+TIME_LIMIT
#MAIN GAME LOOP
while time()
if randint(1,BUB_CHANCE)==1:
create_bubble()
move_bubbles()
clean_up_bubs()
score+=collision()
if (int(score/BONUS_SCORE))>bonus:
bonus+=1
end+TIME_LIMIT
show_score(score)
show_time(int(end-time()))
print(score)
window.update()
sleep(0.03)
c.create_text(MID_X,MID_Y,\
text='GAME OVER',fill='white',font=('Helvetica',30))
c.create_text(MID_X,MID_Y+30,\
text='Score: '+str(score),fill='white')
c.create_text(MID_X,MID_Y+45,\
text='Bonus time: '+str(bonus*TIME_LIMIT),fill='white')
и вот та самая обрезанная(ну он вроде работает некорректно)
from tkinter import*
HEIGHT=500
WIDTH=600
window=Tk()
window.title("космический корабль")
c=Canvas(window,width=WIDTH,height=HEIGHT,bg='darkblue')
c.pack()
ship=c.create_polygon(30,0,0,40,60,40,fill='ivory',outline='cyan')
BOTTOM_Y=(HEIGHT-50)
MID_X=WIDTH/2
c.move(ship,MID_X,BOTTOM_Y)
MOVE_Q=10
def ship_move(press):
if press.keysym=='LEFT':
c.move(ship,-MOVE_Q,0)
elif press.keysym=='RIGHT':
c.move(ship,MOVE_Q,0)
if press.keysym=='UP':
make_shoot()
if press.keysym=='DOWN':
make_nuclearbang()
c.bind_all('',ship_move)
from random import randint
enemy_id=list()
enemy_spd=list()
def create_enemy():
y=0
x=randint(40,WIDTH-40)
spd=randint(2,5)
id1=c.create_oval(x-20,y-20,x+20,y+20,fill='tomato',outline='linen')
enemy_id.append(id1)
enemy_spd.append(spd)
def move_enemy():
for k in range(len(enemy_id)):
c.move(enemy_id[k],0,enemy_spd[k])
shoot_id=list()
shoot_speed=15
def make_shoot():
if len(shoot_id)<3:
pos=c.coords(ship)
x=pos[0]
y=pos[1]
id1=c.create_oval(x-6,y-6,x+6,y+6,fill='yellow',outline='magenta')
shoot_id.append(id1)
newshoot_id2=list()
new_speed=5
def make_nuclearbang():
pos=c.coords(ship)
x=pos[0]
y=pos[1]
id3=c.create_oval(x-25,y-25,x+25,y+25,fill='yellow',outline='red')
shoot_id2.append(id3)
def move_shoot():
for i in range(len(shoot_id,)):
c.move(shoot_id[i],0,-shoot_speed)
def move_nuclearshoot():
for c in range(len(newshoot_id2,)):
c.move(shoot_id2[c],0,-newshoot_speed)
def coords_shoot(id_num):
pos=c.coords(id_num)
x=(pos[0]+pos[2])/2
y=(pos[1]+pos[3])/2
return x,y
def coords_newshoot(id_num):
pos=c.coords(id_num)
x=(pos[0]+pos[2])/2
y=(pos[1]+pos[3])/2
return x,y
def del_shoot(i):
c.delete(shoot_id[i])
del_shoot_id[i]
def del_newshoot(c):
c.delete(newshoot_id2[c])
del_newshoot_id2[c]
def clean_shoot():
for i in range(len(shoot_id)-1,-1,-1):
x,y=coords_shoot(shoot_id[i])
if y < 0:
del_shoot(i)
def clean_nuckearshoot():
for c in range(len(newshoot_id2)-1,-1,-1):
x,y=coords_shoot(shoot_id2[c])
if y < 0:
del_newshoot(c)
def coords_enemy(id_num):
pos=c.coords(id_num)
x=(pos[0]+pos[2])/2
y=(pos[1]+pos[3])/2
return x,y
def del_enemy(i):
c.delete(enemy_id[i])
del enemy_id[i]
def clean_enemy():
for i in range(len(enemy_id)-1,-1,-1):
x,y=coords_enemy(enemy_id[i])
if y > HEIGHT:
del_enemy(i)
from math import sqrt
def distance(id1,id2):
x1,y1=coords_enemy(id1)
x2,y2=coords_shoot(id2)
return sqrt((x2-x1)**2+(y2-y1)**2)
def bum():
for i in range(len(enemy_id)-1,-1,-1):
for n in range(len(shoot_id)-1,-1,-1):
if distance(enemy_id[i],shoot_id[n])<26:
del_enemy(i)
del_shoot(n)
def bigbum():
for i in range(len(enemy_id)-1,-1,-1):
for w in range(len(newshoot_id2)-1,-1,-1):
if distance(enemy_id[i],newshoot_id2[w])<45:
del_enemy(i)
del_shoot(w)
from time import sleep,time
while True:
if randint(1,40)==1:
create_enemy()
move_enemy()
move_shoot()
move_nuclearshoot()
clean_shoot()
clean_nuckearshoot()
clean_enemy()
bum()
bigbum()
window.update()
sleep(0.05)
Просто изучаю Python и на автомате добавил
А почему не открывается?
Ну да кажется легко,но тут ключевое слово-самому
Возможно,и напишу какой-нибудь интерфейс,но этим все закончится.
Ведь самые простые программы,которые я писал(потом покажу)были написаны с инструкциями и пояснениями (потому что непрошаренному пользователю(по моему мнению) сложно писать без подсказок.
Использую книгу)))
ну так если ограничения убрать?