Nota
Las funcions que apareixen a continuació no retornen cap valor (no inclouen cap return <expressió>). Contenen iteracions amb for on es fa servir la instrucció print.
Quadrats I. Dissenya una funció qd1(n) que rep un número natural n i escriu un quadrat ple amb tants asteriscs (*) de costat com indica el número n.
>>> qd1(5) ***** ***** ***** ***** *****Presentarem 3 solucions:
primera solució, el la que cada línia (fila del quadrat) es construeix amb l’operador de replicació de strings (str * n). En el fitxer qd1a.py tens la solució sense els comentaris:
def qd1(n): for i in range(n): # Fa n iteracions, una per cada línia del quadrat, amb valors de i = 0..n-1 linia = '*' * n # Crea un string '*...*' amb l'asterisc repetit n vegades print(linia) # o directament, sense la variable linia: print('*' * n)segona solució, amb una funció independent encarregada d’escriure una línia de na asteriscs. En el fitxer qd1b.py tens la solució sense els comentaris:
def escriu_linia(na): ''' Aquesta funció rep un enter na, i escriu na *'s a la mateixa linia, i per acabar escriu un final de linia. ''' for i in range(na): # Fa na iteracions, una per cada asterisc que ha d'escriure en aquesta lìnia. print('*', end='') # El print amb end='' fa que els asteriscs s'escriguin a la mateixa línia. print() # Al acabar s'escriu un final de línia perqué els següents *'s vagin en un altre. def qd1(n): for i in range(n): # Fa n iteracions, una per cada línia, amb valors de i = 0..n-1 escriu_linia(n) # Crida a la funció que escriu una linia passant com a paràmetre # el número d'asteriscs en aquesta línia (totes les línies tenen n *'s).tercera solució, amb dos iteracions for niuades, on la interior és la que escriu els caràcters d’una línia. En el fitxer qd1c.py tens la solució sense els comentaris:
def qd1(n): for i in range(n): # Fa n iteracions, una per cada línia, amb valors de i = 0..n-1 for j in range(n): # For niuat que fa, per cada iteració del for extern, n iteracions, # una per cada asterisc de la linia 'i', amb valors de j = 0..n-1 print('*', end='') # El print amb end='' fa que els asteriscs s'escriguin a la mateixa línia. print() # Després d'escriure els *'s de la linia 'i' s'escriu un final # de línia perqué els de la línia següent vagin en un altre.
Triangles II. Dissenya una funció tr2(n) que rep un número enter i escriu un triangle rectangle buit amb tants asteriscs (*) de base i altura como indica el número.
>>> tr2(5) * ** * * * * *****Presentarem 3 solucions:
primera solució, en la que cada línia (fila del triangle) es construeix amb l’operador de replicació de strings (str * n). En el fitxer tr2a.py tens la solució sense els comentaris:
def tr2(n): # PRIMERA LÍNIA: VÈRTEX SUPERIOR ----------------------------------------------------------- if n >= 1: # Si n == 0 llavors NO s'ha de escriure el vèrtex superior (perquè no hi ha triangle) linia = '*' # El vèrtex està format per un '*' print(linia) # O simplement: print('*') # n-2 LÍNIES DEL MIG: amb NÚMERO D'ESPAIS CREIXENT entre catet vertical i hipotenusa ------- for i in range(n-2): # Quan n >= 3, fa n-2 iteracions, una per cada # línia intermitja, amb valors de i = 0..n-3 linia = '*' + ' '*i + '*' # Crea un string amb i espais entre dos asteriscs: # en la primera iteracio (i=0) hi han 0 espais entre els *'s, # en la segona iteració (i=1) hi han 1 espais entre els *', ... print(linia) # ÚLTIMA LÍNIA: BASE DEL TRIANGLE ---------------------------------------------------------- if n >= 2: # Si n >= 2 llavors s'ha d'escriure la base del triangle linia = '*'*n # La linia de la base està formada per n asteriscs, print(linia) # o simplement: print('*'*n)segona solució, amb una funció independent encarregada d’escriure les línies intermitges (las que no són la del vertés superior ni la de la base). En el fitxer tr2b.py tens la solució sense els comentaris:
def escriu_linia(ne): ''' Aquesta funció rep un enter ne, i escriu en una mateixa línia un asterisc ('*'), seguit de ne espais (' '), seguit d'un segon '*', i acabat amb final de línia. ''' print('*', end='') # Primer asterisc de la línia, amb endl='' per continuar escribint a la mateixa línia. for i in range(ne): # Fa ne iteracions, una per cada espai entre els *'s, amb valors de i = 0..ne-1 print(' ', end='') # El print amb end='' fa que els espais s'escriguin a la mateixa línia. print('*') # Asterisc que acaba la línia seguit del final de línia. def tr2(n): if n >= 1: # PRIMERA LÍNIA: VÈRTEX SUPERIOR print('*') for i in range(n-2): # n-2 LÍNIES DEL MIG escriu_linia(i) if n >= 2: # ÚLTIMA LÍNIA: BASE DEL TRIANGLE print('*'*n)tercera solució, que per les línies intermitges conté dos iteracions for niuades. La iteració interior és la que escriu els espais entre els asteriscs. En el fitxer tr2c.py tens la solució sense els comentaris:
def tr2(n): if n >= 1: # PRIMERA LÍNIA: VÈRTEX SUPERIOR print('*') for i in range(n-2): # n-2 LÍNIES DEL MIG print('*', end='') for j in range(i): # Els i ESPAIS que hi han a la línia intermitja número i = 0..n-3 print(' ', end='') print('*') if n >= 2: # ÚLTIMA LÍNIA: BASE DEL TRIANGLE for i in range(n): # Els n asteriscs que hi han a la base del triangle print('*', end='') print()