M14 | L7 – Functii cu PythonFunctii cu Python

Astăzi vom afla despre:

  • Modularizarea aplicatiilor cu functii

Aplicațiile pe care le vom folosi sunt:

Replit, python

PROIECTE:

Jocuri

Definim o funcție în Python folosind cuvântul cheie def (scurt pentru definiție), urmat de numele funcției, paranteze () și două puncte (:). Iată prima linie a funcției random_spiral () pe care o vom construi:

def random_spiral():

#RandomSpiralsFunction.py

import random

import turtle

t = turtle.Pen()

t.speed(0)

turtle.bgcolor(„black”)

colors = [„red”, „yellow”, „blue”, „green”, „orange”, „purple”,

          „white”, „gray”]

def random_spiral():

    t.pencolor(random.choice(colors)) 

    size = random.randint(10,40)       

    x = random.randrange(-turtle.window_width()//2,

                         turtle.window_width()//2)

    y = random.randrange(-turtle.window_height()//2,

                         turtle.window_height()//2)

    t.penup()

    t.setpos(x,y)

    t.pendown()

    for m in range(size):

        t.forward(m*2)

        t.left(91)

for n in range(50):

    random_spiral()

Desenam un Smiley

#RandomSmileys.py

import random

import turtle

t = turtle.Pen()

t.speed(0)

t.hideturtle()

turtle.bgcolor(„black”)

def draw_smiley(x,y):     

    t.penup()

    t.setpos(x,y)

    t.pendown()

    # Head

    t.pencolor(„yellow”)

    t.fillcolor(„yellow”)

    t.begin_fill()

    t.circle(50)

    t.end_fill()

    # Left eye

    t.setpos(x-15, y+60)

    t.fillcolor(„blue”)

    t.begin_fill()

    t.circle(10)

    t.end_fill()

    # Right eye

    t.setpos(x+15, y+60)

    t.begin_fill()

    t.circle(10)

    t.end_fill()

    # Mouth

    t.setpos(x-25, y+40)

    t.pencolor(„black”)

    t.width(10)

    t.goto(x-10, y+20)

    t.goto(x+10, y+20)

    t.goto(x+25, y+40)

    t.width(1)

for n in range(50):

    x = random.randrange(-turtle.window_width()//2,

                         turtle.window_width()//2)

    y = random.randrange(-turtle.window_height()//2,

                         turtle.window_height()//2)

    draw_smiley(x,y)

Valori returnabile

# PingPong_Calculator.py

def convert_in2cm(inches):

    return inches * 2.54

def convert_lb2kg(pounds):

    return pounds / 2.2

height_in = int(input(„Enter your height in inches: „))

weight_lb = int(input(„Enter your weight in pounds: „))

height_cm = convert_in2cm(height_in)

weight_kg = convert_lb2kg(weight_lb)

ping_pong_tall = round(height_cm / 4)

ping_pong_heavy = round(weight_kg * 1000 / 2.7)

feet = height_in // 12

inch = height_in % 12

print(„At”, feet, „feet”, inch, „inches tall, and”, weight_lb,

      „pounds,”)

print(„you measure”, ping_pong_tall, „Ping-Pong balls tall, and „)

print(„you weigh the same as”, ping_pong_heavy, „Ping-Pong balls!”)

Evenimente

Pentru click:

import turtle

t = turtle.Pen()

t.speed(0)

turtle.onscreenclick(t.setpos)

turtle.bgcolor(„blue”)

t.pencolor(„green”)

t.width(99)

Penrtru tastatura:

import turtle

t = turtle.Pen()

t.speed(0)

                                t.turtlesize(2,2,2) def up():

t.forward(50) def left():

t.left(90) def right():

t.right(90) turtle.onkeypress(up, „Up”) turtle.onkeypress(left, „Left”) turtle.onkeypress(right, „Right”) turtle.listen()

Evenimente cu paramaetri:

import random

import turtle

t = turtle.Pen()

t.speed(0)

turtle.bgcolor(„black”)

colors = [„red”, „yellow”, „blue”, „green”, „orange”, „purple”, „white”, „gray”]

def spiral(x,y):

t.pencolor(random.choice(colors))

size = random.randint(10,40)

t.penup()

t.setpos(x,y)

t.pendown()

for m in range(size):

t.forward(m*2)

t.left(91)

                    turtle.onscreenclick(spiral)

Click Smiley:

#ClickAndSmile.py

import random

import turtle

t = turtle.Pen()

t.speed(0)

t.hideturtle()

turtle.bgcolor(„black”)

def draw_smiley(x,y):

    t.penup()

    t.setpos(x,y)

    t.pendown()

    # Face

    t.pencolor(„yellow”)

    t.fillcolor(„yellow”)

    t.begin_fill()

    t.circle(50)

    t.end_fill()

    # Left eye

    t.setpos(x-15, y+60)

    t.fillcolor(„blue”)

    t.begin_fill()

    t.circle(10)

    t.end_fill()

    # Right eye

    t.setpos(x+15, y+60)

    t.begin_fill()

    t.circle(10)

    t.end_fill()

    # Mouth

    t.setpos(x-25, y+40)

    t.pencolor(„black”)

    t.width(10)

    t.goto(x-10, y+20)

    t.goto(x+10, y+20)

    t.goto(x+25, y+40)

    t.width(1)

turtle.onscreenclick(draw_smiley)

ClicKaleidoscope:

import random

import turtle

t = turtle.Pen()

t.speed(0)

t.hideturtle()

turtle.bgcolor(„black”)

colors = [„red”, „yellow”, „blue”, „green”, „orange”, „purple”, „white”, „gray”]

def draw_kaleido(x,y):

t.pencolor(random.choice(colors))

size = random.randint(10,40)

draw_spiral(x,y, size)

draw_spiral(-x,y, size)

draw_spiral(-x,-y, size)

draw_spiral(x,-y, size)

def draw_spiral(x,y, size):

t.penup()

t.setpos(x,y)

t.pendown()

for m in range(size):

t.forward(m*2)

t.left(92)

turtle.onscreenclick(draw_kaleido)

Provocare 1:

Creați un mashup al programelor ClickAndSmile.py și ClickKaleidoscope.py pentru a desena o față zâmbitoare în patru colțuri oglindite ale ecranului când faceți clic, la fel cum a făcut programul kaleido-scope cu spirale. Dacă doriți o provocare avansată, desenați două dintre fețele zâmbitoare răsturnate cu capul în jos, astfel încât să arate într-adevăr oglindite pe axa x.

Provocare 2:

Modificați calculatorul Ping-Pong astfel încât să solicite utilizatorului un număr de bile Ping-Pong ca intrare. Puneți-i să spună utilizatorului cât de înalte ar fi acele bile de Ping-Pong dacă ar fi suprapuse una pe cealaltă și cât de mult ar cântări acel număr de bile de Ping-Pong.

Provocare 3:

Schimbați programul ArrowDraw.py pentru a permite utilizatorului să întoarcă broasca țestoasă în trepte mai mici – să zicem 45 de grade (sau chiar 30 sau 15) – pentru a le oferi un control mai bun al broaștei țestoase. Apoi, adăugați mai multe opțiuni cheie, cum ar fi permisiunea utilizatorului să apăsați simbolul mai mare decât (>) pentru a face lungimea desenului mai lungă, simbolul mai mic decât (<) pentru a scurta lungimea desenului, tasta W pentru a face stiloul mai larg , și tasta T pentru a face stiloul mai subțire. Pentru a-l face un program de desen excelent, adăugați feedback sub forma desenării unui șir pe ecran pentru a afișa lățimea stiloului, lungimea segmentului și direcția broaștei țestoase după fiecare modificare.

Pentru o atingere finală, adăugați posibilitatea de a face clic pentru a repoziționa broasca țestoasă. (Sugestie: creați o funcție care acceptă doi parametri (x, y), ridică stiloul țestoasei, se mută la (x, y), apoi pune stiloul înapoi. Apoi, treceți numele acestei funcții la turtle.onscreenclick () pentru a finaliza aplicația.)