Diferència entre revisions de la pàgina «ASIX/M03/UF3/A02»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
m
m
 
Línia 1: Línia 1:
*[[ASIX/M03/UF3/A02/PR1|Pr1. Fitxers]]
+
[[Category:M03]]
 +
{{titol|Pr1. Gestió de fitxers}}
 +
{{capcalera|Guillem Solà i Boeck|22}}
 +
==Exercici 1==
 +
'''Realitza un algorisme que llegeixi les 100 primeres línies del fitxer de text diccionari.txt penjat al moodle i les imprimeixi'''
 +
<source lang='python'>
 +
arxiu = open('castellano.txt','r')
 +
 
 +
for i in range(100):
 +
  cadena2 = arxiu.readline()
 +
  print(cadena2, end="")
 +
 
 +
arxiu.close
 +
</source>
 +
 
 +
==Exercici 2==
 +
'''Modifica el programa anterior per crear un fitxer nou anomenat primeres.txt amb les 100 primeres paraules del diccionari. No ha sortir per pantalla, hauràs d’obrir el fitxer nou'''
 +
<source lang='python'>
 +
fi = open('castellano.txt','r')
 +
fo = open('primers.txt','w')
 +
 
 +
for i in range(100):
 +
  cadena2 = arxiu.readline()
 +
  fo.write(cadena2)
 +
 
 +
fi.close
 +
fo.close
 +
</source>
 +
 
 +
==Exercici 3==
 +
'''Obri el fitxer diccionari.txt i elimina tots el caràcters <code>‘</code> que apareixen al començament d’algunes paraules, així com tot el que hi ha després de la /. Crea un nou fitxer, diccio2.txt amb les paraules netes. Utilitza la llibreria estàndard de python string. Aquesta llibreria no l’has d’importar
 +
'''
 +
<source lang='python'>
 +
fi = open('castellano.txt','r')
 +
fo = open('diccio2.txt','w')
 +
 
 +
for i in fi:
 +
  cadena2 = fi.readline()
 +
  if cadena2.startswith("'")
 +
    cadena2 = cadena2[1:]
 +
  pos = cadena2.find('/')
 +
 
 +
  if pos != -1:
 +
    cadena2 = cadena2[:pos]+"\n" #Afegit perquè si eliminem la resta de la línia, també ens mengem el salt de línia, i amb això, l'afegim
 +
 
 +
  fo.write(cadena2)
 +
 
 +
fi.close
 +
fo.close
 +
</source>
 +
 
 +
==Exercici 4==
 +
'''Realitza un algorisme que llegeixi totes les paraules que comencin per una paraula donada per l’usuari. Has de fer servir el nou diccionari, diccio2.txt.
 +
'''
 +
<source lang='python'>
 +
lletra = input("Per quina lletra començarà la paraula? ")
 +
 
 +
fi = open('diccio2.txt','r')
 +
 
 +
fir i in fi:
 +
  cadena2 = fi.readline()
 +
 
 +
if cadena2.startswith(lletra):
 +
  print(cadena2)
 +
 
 +
fi.close
 +
 
 +
</source>
 +
 
 +
 
 +
==Exercici 5==
 +
'''Realitza un algorisme que torni una paraula en random del diccionari. Has de fer servir el nou diccionari, diccio2.txt. Per saber de quant és el random, compta el número de paraules que té. Potser útil fer servir llistes'''
 +
<source lang='python'>
 +
def treuInfo(fitxer):
 +
  text = []
 +
  f = open(fitxer,'r')
 +
  text = f.readlines()
 +
 
 +
  f.close
 +
 
 +
  return text
 +
 
 +
def numerosAlea(limit):
 +
  import random
 +
  return random.randint(0,limit)
 +
 
 +
lst=[]
 +
lst=treuInfo("diccio2.txt")
 +
total=len(lst)
 +
pos=numeroAlea(total)
 +
print(pos)
 +
print(lst[pos])
 +
</source>
 +
 
 +
==Exercici 6==
 +
'''Tenim un fitxer que es diu alumnes.txt amb el següent contingut:'''
 +
<source>
 +
joe 10 15 20 30 40
 +
bill 23 16 19 22
 +
sue 8 22 17 14 32 17 24 21 2 9 11 17
 +
grace 12 28 21 45 26 10
 +
john 14 32 25 16 89
 +
</source>
 +
 
 +
'''Hi ha una línia per cada estudiant i en cadascuna hi ha el nom de l’estudiant i una sèrie de notes de pràctiques. Realitza un programa que mostri els estudiants que han lliurat més de X pràctiques. El número de pràctiques es demanarà a l’usuari. Realitza el control d’excepcions i validació de l’entrada de dades. El número de pràctiques no pot ser negatiu ni lletres.'''<br/>
 +
''Nota: pots fer servir el mètode split'' https://www.tutorialspoint.com/python3/string_split.htm
 +
 
 +
===Sortida esperada===
 +
<source>
 +
Quantes pràctiques ha de fer?: a
 +
Has d'introduir un número.
 +
 
 +
Quantes pràctiques ha de fer?: -2
 +
No pots posar números negatius o 0
 +
 
 +
Quantes pràctiques ha de fer?: 5
 +
 
 +
alumne:  sue , Nº pràctiques:  12
 +
alumne:  grace , Nº pràctiques:  6
 +
</source>
 +
===Solució===
 +
<source lang='python'>
 +
archivo=open('alumnes.txt','r')
 +
lista=[]
 +
pract=int(input("Quantes pràctiques a de fer per aprovar: ")
 +
while pract>0:
 +
try:
 +
for line in archivo.readlines():
 +
lista=line.split()
 +
#print(lista)
 +
elements=(len(lista)-1)
 +
 
 +
if elements>=pract:
 +
print(lista)
 +
#print(elements)
 +
else:
 +
print("Ha de ser major de 0")
 +
 
 +
except ValueError:
 +
print("Només pots possar numeros")
 +
 
 +
 
 +
archivo.close()
 +
</source>
 +
==Exercici 7==

Revisió de 14:13, 16 abr 2020


Guillem Solà i Boeck (host A10BPC22)

Exercici 1

Realitza un algorisme que llegeixi les 100 primeres línies del fitxer de text diccionari.txt penjat al moodle i les imprimeixi

arxiu = open('castellano.txt','r')

for i in range(100):
  cadena2 = arxiu.readline()
  print(cadena2, end="")

arxiu.close

Exercici 2

Modifica el programa anterior per crear un fitxer nou anomenat primeres.txt amb les 100 primeres paraules del diccionari. No ha sortir per pantalla, hauràs d’obrir el fitxer nou

fi = open('castellano.txt','r')
fo = open('primers.txt','w')

for i in range(100):
  cadena2 = arxiu.readline()
  fo.write(cadena2)

fi.close
fo.close

Exercici 3

Obri el fitxer diccionari.txt i elimina tots el caràcters que apareixen al començament d’algunes paraules, així com tot el que hi ha després de la /. Crea un nou fitxer, diccio2.txt amb les paraules netes. Utilitza la llibreria estàndard de python string. Aquesta llibreria no l’has d’importar

fi = open('castellano.txt','r')
fo = open('diccio2.txt','w')

for i in fi:
  cadena2 = fi.readline()
  if cadena2.startswith("'")
    cadena2 = cadena2[1:]
  pos = cadena2.find('/')

  if pos != -1:
    cadena2 = cadena2[:pos]+"\n" #Afegit perquè si eliminem la resta de la línia, també ens mengem el salt de línia, i amb això, l'afegim

  fo.write(cadena2)

fi.close
fo.close

Exercici 4

Realitza un algorisme que llegeixi totes les paraules que comencin per una paraula donada per l’usuari. Has de fer servir el nou diccionari, diccio2.txt.

lletra = input("Per quina lletra començarà la paraula? ")

fi = open('diccio2.txt','r')

fir i in fi:
  cadena2 = fi.readline()

if cadena2.startswith(lletra):
  print(cadena2)

fi.close


Exercici 5

Realitza un algorisme que torni una paraula en random del diccionari. Has de fer servir el nou diccionari, diccio2.txt. Per saber de quant és el random, compta el número de paraules que té. Potser útil fer servir llistes

def treuInfo(fitxer):
  text = []
  f = open(fitxer,'r')
  text = f.readlines()

  f.close
  
  return text

def numerosAlea(limit):
  import random
  return random.randint(0,limit)

lst=[]
lst=treuInfo("diccio2.txt")
total=len(lst)
pos=numeroAlea(total)
print(pos)
print(lst[pos])

Exercici 6

Tenim un fitxer que es diu alumnes.txt amb el següent contingut:

joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89

Hi ha una línia per cada estudiant i en cadascuna hi ha el nom de l’estudiant i una sèrie de notes de pràctiques. Realitza un programa que mostri els estudiants que han lliurat més de X pràctiques. El número de pràctiques es demanarà a l’usuari. Realitza el control d’excepcions i validació de l’entrada de dades. El número de pràctiques no pot ser negatiu ni lletres.
Nota: pots fer servir el mètode split https://www.tutorialspoint.com/python3/string_split.htm

Sortida esperada

Quantes pràctiques ha de fer?: a
Has d'introduir un número.

Quantes pràctiques ha de fer?: -2
No pots posar números negatius o 0

Quantes pràctiques ha de fer?: 5

alumne:  sue , Nº pràctiques:  12
alumne:  grace , Nº pràctiques:  6

Solució

archivo=open('alumnes.txt','r')
lista=[]
pract=int(input("Quantes pràctiques a de fer per aprovar: ")
while pract>0:
	try: 
	for line in archivo.readlines():
		lista=line.split()
		#print(lista)
		elements=(len(lista)-1)

		if elements>=pract:
			print(lista)
			#print(elements)
	else:
	print("Ha de ser major de 0")

	except ValueError:
	print("Només pots possar numeros")


archivo.close()

Exercici 7