Buclele condiționale sunt un mod de a repeta ceva atâta vreme cât o condiție este satisfăcută, sau Adevărată. Dacă condiția este întotdeauna satisfăcută (nu devine niciodată Falsă), atunci bucla poate deveni infinită. Dacă condiția este falsă la început, codul din buclă nu va rula niciodată! În Python buclele condiționale sunt definite folosind declarația while
:
word = ''
sentence = ''
print('Please enter some words.')
print('Include a period (.) when you are finished.')
while '.' not in word:
word = input('next word: ')
sentence = word + ' ' + sentence
print()
print('Aha! You said:')
print(sentence)
Numim această parte a codului ‘condițional’: '.' not in word
De valoarea Adevărat sau nu întoarsă de condiție depinde executarea codului din bucla while
.
Citește codul de mai sus și încearcă să rezumi în minte ce face (care va fi rezultatul final).
Apoi copiază într-un fișier, cum ar fi sentence.py
și rulează-l - vezi exact ce face. Seamănă cu ce credeai tu ?
Note
Dacă folosești Python 2, atunci trebuie să înlocuiești input
cu raw_input
pentru ca programul să se execute corect.
The turtle has been up to its usual tricks again, robbing liquor stores and building up huge gambling debts. It’s time for turtle to be put into a cell that it can’t get out of.
Hai să facem o nouă variantă de forward()
. Una care va întoarce țestoasa complet dacă încearcă să meargă mai departe de 100 de la origine. Vom avea nevoie de o buclă while
și de cateva funcții noi:
turtle.distance(0,0)
- Distanța țestoasei de la origine
turtle.towards(0,0)
- Unghiul pentru a se întoarce la origine
turtle.setheading(angle)
- Setează direcția țestoasei
Poți să încerci să te joci cu țestoasa direct în interpretor pentru a verifica exact ce fac, daca dorești.
Acum va trebui să implementăm logica celulei, poate într-o buclă while
și folosind niște logică condițională. Este puțin cam complicat dar continuă! Să nu îți fie frică să vorbești cu cineva mai experimentat sau cu alt student.
def forward(distance):
while distance > 0:
if turtle.distance(0,0) > 100:
angle = turtle.towards(0,0)
turtle.setheading(angle)
turtle.forward(1)
distance = distance - 1
Buclele pot fi întrerupte cu comanda break
. Este util în mod special când ai scris o buclă infinită, care este o buclă unde condiția este întotdeauna Adevărată.
Scrie o buclă while
cu o condiție care este întotdeauna Adevărată pentru a desena o spirală. Întrerupe bucla când țestoasa ajunge la o anumită distanță față de centru. Folosește funcția turtle.distance(x, y)
pentru a afla distanța țestoasei față de punctul definit de coordonatele x
și y
.
Pentru a face asta ai nevoie de funcțiile turtle.xcor()
și turtle.ycor()
, care returnează poziția țestoasei pe axele X si respectiv Y.
Note
Pentru a desena o spirală, țestoasa trebuie să se rotească cu o valoare constantă și să înainteze cu o valoare din ce în ce mai mare.
def draw_spiral(radius):
original_xcor = turtle.xcor()
original_ycor = turtle.ycor()
speed = 1
while True:
turtle.forward(speed)
turtle.left(10)
speed += 0.1
if turtle.distance(original_xcor, original_ycor) > radius:
break
Poți să creezi o condiție pentru această buclă, în așa fel încât să nu ai nevoie de bucla infinită while True
sau de break
? Ce versiune este mai ușor de înțeles?