M14 | L4 – Bucle – Structura repetitiva cu Python

Astăzi vom afla despre:

  • Structura: FOR, WHILE

Aplicațiile pe care le vom folosi sunt:

Replit, python

PROIECTE:

Aplicatii cu structuri repetitive

Structura FOR

Începem cu cuvântul cheie pentru și apoi dăm o variabilă, x, care va fi variabila noastră de contor sau iterator. Cuvântul cheie indică bucla for pentru pasul x prin fiecare dintre valorile din lista de intervale, iar intervalul (4) oferă buclei o listă a numerelor de la 0 la 3, [0,1,2,3], la pas prin. Amintiți-vă că computerul începe de obicei să numere de la 0 în loc să pornească de la 1 așa cum facem noi.

Pentru a spune computerului ce instrucțiuni ar trebui repetate, folosim indentare; indentăm fiecare comandă pe care vrem să o repetăm în buclă apăsând tasta tab din fereastra nouă a fișierului.

import turtle

t = turtle.Pen()

for x in range(4):

t.circle(100)

t.left(90)

Modificați-vă programul de rozetă și salvați-l ca Rosette6.py.

import turtle

t = turtle.Pen()

                                                for x in range(6):

                                                t.circle(100)

                      t.left(60)

În această secțiune, vom folosi funcția turtle.numinput () pe care am văzut-o în capitolul 3 (consultați ColorSpiralInput.py la pagina 47) pentru a scrie un program care cere utilizatorului să introducă un număr și apoi desenează o rozetă cu acel număr de cercuri. Vom seta numărul utilizatorului ca dimensiune a constructorului range (). Apoi, tot ce trebuie să facem este să împărțim 360 de grade la numărul respectiv și vom găsi numărul de grade pentru a face stânga fiecare trecere prin buclă. Tastați și rulați următorul cod ca RosetteGoneWild.py:

import turtle

t = turtle.Pen()

  • Ask the user for the number of circles in their rosette, default to 6 number_of_circles = int(turtle.numinput(„Number of circles”,

„How many circles in your rosette?”, 6))

for x in range(number_of_circles):

t.circle(100)

t.left(360/number_of_circles)

Structura WHILE

# Ask the user for their name

name = input(„What is your name? „)

  • Keep printing names until we want to quit while name != „”:

  • Print their name 100 times

for x in range(100):

  • Print their name followed by a space, not a new line

print(name, end = ” „)

               print()           # After the for loop, skip down to the next line

# Ask for another name, or quit

name = input(„Type another name, or just hit [ENTER] to quit: „)  

print(„Thanks for playing!”)

Spirala familiei:

# SpiralFamily.py – prints a colorful spiral of names

import turtle     # Set up turtle graphics

t = turtle.Pen() 

turtle.bgcolor(„black”)

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

        „purple”, „white”, „brown”, „gray”, „pink” ]

family = []       # Set up an empty list for family names

# Ask for the first name

name = turtle.textinput(„My family”,

                        „Enter a name, or just hit [ENTER] to end:”)

# Keep asking for names

while name != „”:

    # Add their name to the family list

    family.append(name)

    # Ask for another name, or end

    name = turtle.textinput(„My family”,

                        „Enter a name, or just hit [ENTER] to end:”)

# Draw a spiral of the names on the screen

for x in range(100):

    t.pencolor(colors[x%len(family)]) # Rotate through the colors

    t.penup()                         # Don’t draw the regular spiral lines

    t.forward(x*4)                    # Just move the turtle on the screen

    t.pendown()                       # Draw the next family member’s name

    t.write(family[x%len(family)], font = („Arial”, int((x+4)/4), „bold”) )

    t.left(360/len(family) + 2)         # Turn left for our spiral

Pentru a explora bucle imbricate, să desenăm o spirală nu de nume sau linii, ci de spirale! În loc să desenăm un nume în fiecare colț al spiralei noastre, așa cum am făcut în Figura 4-6, am putea desena un spiral mai mic. Pentru a realiza acest lucru, avem nevoie de o buclă mare pentru a desena o spirală mare pe ecran și de o buclă mică în interior pentru a desena spirale mici în jurul spiralei mari.

Înainte de a scrie un program pentru a face acest lucru, să învățăm cum să cuibărim o buclă într-o altă buclă. Mai întâi, porniți o buclă ca de obicei. Apoi, în interiorul acelei bucle, apăsați tabul o dată și începeți a doua buclă:

import turtle

t = turtle.Pen()

t.penup()

turtle.bgcolor(„black”)

  • Ask the user for the number of sides, default to 4, min 2, max 6 sides = int(turtle.numinput(„Number of sides”,

„How many sides in your spiral of spirals? (2-6)”, 4,2,6)) colors = [„red”, „yellow”, „blue”, „green”, „purple”, „orange”]

  • Our outer spiral loop

for m in range(100):

t.forward(m*4)

position = t.position() # Remember this corner of the spiral heading = t.heading() # Remember the direction we were heading print(position, heading)

  • Our „inner” spiral loop

  • Draws a little spiral at each corner of the big spiral for n in range(int(m/2)):

t.pendown()

t.pencolor(colors[n%sides])

t.forward(2*n) t.right(360/sides – 2) t.penup()

t.setx(position[0])

# Go

back to

the

big

spiral’s

x location

t.sety(position[1])

# Go

back to

the

big

spiral’s

y location

t.setheading(heading)

#

Point in the big spiral’s heading

t.left(360/sides + 2)

#

Aim at the

next point on the big spiral

Provocare 1:

Gândiți-vă cum ați putea modifica programul ViralSpiral.py pentru a înlocui spiralele mici cu rozete precum cele din Rosette6.py și RosetteGoneWild.py. Sugestie: înlocuiți mai întâi bucla interioară cu o buclă interioară care va desena o rozetă. Apoi, adăugați codul pentru a schimba culorile și dimensiunile cercurilor din fiecare rozetă. Ca o notă suplimentară, schimbați ușor lățimea stiloului pe măsură ce cercurile dvs. se măresc. Când terminați, salvați noul program ca SpiralRosettes.py.

Provocare 2:

Nu ar fi mișto să desenezi o spirală de spirale cu numele familiei tale? Aruncați o privire la SpiralFamily.py și apoi consultați înapoi codul pentru ViralSpiral.py. Creați o buclă interioară în interiorul buclei for în SpiralFamily.py care atrage spirala mai mică. Apoi, modificați bucla exterioară pentru a vă aminti poziția și poziția broaștei testoase înainte de a desena fiecare spirală mică și setați-o înapoi înainte de a continua la următoarea locație spirală mare. Când îl faceți corect, salvați noul program ca ViralFamilySpiral.py.