This repository has been archived on 2019-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
s1-tp/S2/TP1/tp1.py

278 lines
6.2 KiB
Python
Raw Normal View History

2015-01-25 22:46:34 +01:00
# Jean-loup Beaussart
# TP1: Gestion d'une promo d'étudiants - Structures itérables
2015-01-25 22:44:15 +01:00
# coding=utf-8
# PREUD'HOMME Geoffrey
# Donné le 20/01/2015
# TP1 Gestion d'une promotion d'étudians
2015-01-25 22:46:34 +01:00
# http://www.fil.univ-lille1.fr/~L1S2API/CoursTP/tp1_structures_iterables.html
from etudiants import *
# Question 1
print("\n *** Question 1 ***")
assert(type(l_etudiants) == type([]))
for i in l_etudiants:
assert(type(i) == type(tuple()))
assert(len(i) == 5)
for j in i:
assert(type(i[0]) == type(i[1]) == type(i[2]) == type(i[3]) == type(""))
assert(type(i[4]) == type(1))
print("La liste l_etudiant est correcte")
# Question 2
print("\n *** Question 2 ***")
print("Il y a ", len(l_etudiants), " étudiants dans la liste")
# Question 3
print("\n *** Question 3 ***")
print(l_etudiants[11501230%len(l_etudiants)])
# Question 4
print("\n *** Question 4 ***")
formations = ["LICAM", "MASS", "PEIP", "SESI"]
erreur = False
for i in l_etudiants:
if not i[3] in formations:
print("L'étudiant ", i[1], " ", i[2], " n'est pas dans une des quatre formations.")
erreur = True
if not erreur:
print("Tous les étudiants sont dans une formation.")
# Question 5
print("\n *** Question 5 ***")
def nbre_prenoms(prenom):
""" str -> int, renvoie le nombre d'étudiants qui ont prenom comme prénom.
CU: prenom est un str
"""
assert(type(prenom) == type(""))
prenomARechercher = prenom.upper()
nb=0
for i in l_etudiants:
if i[2] == prenomARechercher:
nb += 1
return nb
print("Il y a ", nbre_prenoms("Alexandre"), " étudiants qui s'appellent Alexandre")
print("Il y a ", nbre_prenoms("Camille"), " étudiantes qui s'appellent Camille")
# Question 6
print("\n *** Question 6 ***")
prenomsUniques = set()
for i in l_etudiants:
prenomsUniques.add(i[2])
print("Il y a ", len(prenomsUniques), " prénoms différents")
# Question 7
print("\n *** Question 7 ***")
lPrenoms=[i[2] for i in l_etudiants]
freq = ["", 0]
for i in prenomsUniques:
tmp = lPrenoms.count(i)
if tmp > freq[1]:
freq = i, tmp
print("Le prénom le plus courant est ", freq[0], " avec ", freq[1], " personnes portant ce prénom.")
# Question 8
print("\n *** Question 8 ***")
idUniques = set()
for i in l_etudiants:
idUniques.add(i[0])
if len(idUniques) != len(l_etudiants):
print("Erreur, il existe au moins un id qui n'est pas unique")
else:
print("Tous les id sont uniques")
# Question 9
print("\n *** Question 9 ***")
nbLICAM = nbMASS = nbPEIP = nbSESI = 0
for i in l_etudiants:
if i[3] == "LICAM":
nbLICAM += 1
elif i[3] == "MASS":
nbMASS += 1
elif i[3] == "PEIP":
nbPEIP += 1
else:
nbSESI += 1
print("Il y a ", nbLICAM, " étudiants en LICAM ", nbMASS, " en MASS ", nbPEIP, " en PEIP et ", nbSESI, " en SESI.")
# Question 10
print("\n *** Question 10 ***")
def liste_formation(form):
""" str -> liste de quadruplets, renvoie la liste des étudiants dans la formation passée en paramètre
CU: form est un str qui vaut: SESI, LICAM, MASS ou PEIP
"""
assert(type(form) == type(""))
assert(form == "SESI" or form == "PEIP" or form == "LICAM" or form == "MASS")
ret = list()
for i in l_etudiants:
if i[3] == form:
ret.append((i[0], i[1], i[2], i[4]))
return ret
print("Liste des PEIP:\n", liste_formation("PEIP"))
# Geoffrey
2015-01-25 22:44:15 +01:00
def question(numero):
print('\n***', 'Question', numero, "***")
question(1)
test = type(l_etudiants) is list
for i in l_etudiants:
if not (type(i) is tuple and len(i) == 5 and type(i[4]) is int):
test = False
for j in range(4):
if not type(i[j]) is str:
test = False
print('Le test a retourné', test)
question(2)
print('l_etudiants', 'contient', len(l_etudiants), 'étudiants')
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
question(3)
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
# TODO
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
print('L\'indice de ma fiche étudiant est forcément inférieur au nombre de fiche, diviser ce premier nombre par ce deuxième revient à garder le premier')
question(4)
test4 = True
for i in l_etudiants:
if not i[3] in ('LICAM', 'MASS', 'PEIP', 'SESI'):
test4 = False
print('Le test a retourné', test4)
question(5)
def nbre_prenoms(prenom):
"""
str int
Renvoie le nombre détudiants dont le prénom est passé en paramètre
"""
## n = 0
## for i in l_etudiants:
## if i[2] == prenom:
## n += 1
## return n
return [i[2] for i in l_etudiants].count(prenom)
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
nbreAlexandre = nbre_prenoms('Alexandre')
terminaisonAlexandre = 's' if nbreAlexandre > 1 else ''
print('Il y a', nbreAlexandre, 'étudiant' + terminaisonAlexandre, 'nommé' + terminaisonAlexandre, 'Alexandre')
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
nbreCamille = nbre_prenoms('Camille')
terminaisonCamille = 'e' + 's' if nbreCamille > 1 else ''
print('Il y a', nbreCamille, 'étudiant' + terminaisonCamille, 'nommé' + terminaisonCamille, 'Camille')
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
question(6)
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
listePrenoms = [i[2] for i in l_etudiants]
ensemblePrenoms = set(listePrenoms)
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
print('Il y a', len(ensemblePrenoms), 'prénoms différents parmi tous les étudiants')
question(7)
nbresPrenoms = dict((i, nbre_prenoms(i)) for i in ensemblePrenoms)
prenomsPlusFrequent = set()
nbrePrenomsPlusFrequents = 0
for i in nbresPrenoms:
if nbresPrenoms[i] > nbrePrenomsPlusFrequents:
prenomsPlusFrequent = {i}
nbrePrenomsPlusFrequents = nbresPrenoms[i]
elif nbresPrenoms[i] == nbrePrenomsPlusFrequents:
prenomsPlusFrequent.add(i)
terminaison = 's' if len(prenomsPlusFrequent) > 1 else ''
print('Le'+terminaison+' prénom le'+terminaison+' plus fréquent'+terminaison, 'sont' if len(prenomsPlusFrequent) > 1 else 'est', ', '.join(prenomsPlusFrequent))
question(8)
ids = set()
test8 = True
for i in l_etudiants:
if i[0] in ids:
test = False
else:
ids.add(i[0])
question(9)
parcours = dict()
for i in l_etudiants:
if not i[3] in parcours:
parcours[i[3]] = 0
parcours[i[3]] += 1
print('Il y a', ', '.join(list(str(parcours[i])+' étudiants en '+i for i in parcours))+'.')
question(10)
def liste_formation(formation):
"""
...
"""
return list(i[0:2]+(i[4],) for i in l_etudiants if i[3] == formation)
2015-01-25 22:46:34 +01:00
2015-01-25 22:44:15 +01:00
print(liste_formation('PEIP'))