Sunteți pe pagina 1din 4

Laborator 3

Obiective:
1. String-uri
2. Funcții/ Recursivitate

Verde – Exemple Roșu- Exerciții

A Exerciții (ipython):
Încercați mental să aflați rezultatul (ce se va printa) fără să rulați și apoi verificați
răspunsul:

1
In[]: s = “Am 6 mere!”
in[]: len(s)
In[]: a =” “ “ Hello
...Python ! “ ” ”
In[]: a
In[]: len(a)
In[]: print(a)

2
In[]: text=’Stringurile pot fi accesate prin indexare’
In[]: print(text[1], text[11], text[-1], text[-4])

3. Vrem să extragem o parte dintr-un string (slice-ing ) folosim operatorul două puncte:
s[start: stop: step]. Oricare din start, stop și step poate lipsi

In[]: str=’Python imi place!’


In[]: str[1:3]
In[]: str[: 6]
In[]: str[6 :]
In[]: str[-5 :]
In[]: str[0: -5]
In[]: str[: : 3]
In[]: str[:]
In[]: str[: : -1]
4.
In[]: s1=’hello‘
In[]: s2 =”Python”
In[]: print(s1+s2)
In[]: print(s1 + ‘ ‘ + s2)
In[]: print(5*s2)

5. # metode aplicate pe stringuri


In[]: s=’ New York’
In[]: print(s.lower())
In[]: print(s.split())

6.
s = 'CopaCabana'
nr = 0
for letter in s:
if letter == 'a':
nr+ = 1
print(‘Litera a:’, + str(nr))

Urmați modelul și scrieți scriptul care numără toate vocalele: a, e, i,o,u dintr-un șir dat.
Convertiți șirul să fie scris doar cu litere mici.

B Exerciții (spyder):
Incercați mental să aflați rezultatul (ce se va printa) fără să rulați și apoi verificați
răspunsul:
1.
In[]: a = 10
In[]: def f(x):
return x + a
In[]: a = 3
In[]: f(1)

2.

In[]: x = 12
In[]: def g(x):
x=x+1
def h(y):
return x + y
return h(6)
In[]: g(x)
3.
def gg(x, y = 5):
def bar(x):
return x + 1
return bar(y * 2)

In[]: gg(3)

4.
def ff(x, y = 5):
def bar(x):
return x + 1
return bar(y * 2)

In[]: ff(3, 0)

5.
def mx (x):
def bar (z, x = 0):
return z + x
return bar(3, x)
In[]: mx(2)

6.
def bb(x):
def bar (z, x = 0):
return z + x
return bar(3)

In[]: bb(5)

7. Folosind operatorul (mod) % scrieți o funcție care primește ca argument un singur


număr și returnează True atunci când numărul este impar și False în caz contrar.

8. Folosind bucla while scrieți o funcție iterativă ppI(baza, exp) care întoarce valoarea
numerică a rezultatului bazaexp prin multiplicări succesive. Nu aveti voie sa folositi
baza**exp (presupunem ca baza este int sau float, exp este int >=0)

9. Aceeasi problema ca la nr 8, dar recursiv, ppR(baza, exp).

10. Scrieți funcția cmmdcI(a,b) care calculează iterativ cel mai mare divizor comun a
numerelor a si b.

Soluția : trebuie să găsim cel mai mare număr t astfel încât t împarte atât a și b, fără rest.
var A
Setați variabila t egală cu cea mai mică dintre cele două argumente de intrare folosind
funcția min ()
Reduceți iterativ această valoare t cu 1 până când este indeplinită condiția t împarte atât
a și b, fără rest.
Care este valoarea întoarsă de funcție?

Testați: cmmdcI(17,12)
cmmdcI(9,12)
cmmdcI(357,238)

Var B
Folosim algoritmul lui Euclid cu împărțiri succesive. La fiecare iterație se calculează
câtul și restul. Ne oprim din algoritm când am obținut restul 0, iar cmmdc este ultimul
cât.
Exemplu: cmmdcI(1071, 462)

1071 = 2 * 462 + 147


462 = 3 * 147 + 21
147 = 7 * 21 + 0

După cum observați la fiecare iterație nu avem nevoie de cât, ne interesează doar restul.

Cat timp b este diferit de 0, ceea ce fac la fiecare iterație este sa salvez restul b = a % b

11. Scrieți funcția cmmdcR(a,b) care calculează recursiv cel mai mare divizor comun a
numerelor a si b.

Link-uri utile:
https://en.wikipedia.org/wiki/Euclidean_algorithm#Worked_example