Skip to content

Commit 320b230

Browse files
committed
creazione file studente contenente la classe studente
1 parent f5aba37 commit 320b230

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

studente.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
from persona import Persona
2+
from datetime import datetime
3+
import logging
4+
5+
logger = logging.getLogger(__name__)
6+
7+
8+
class Studente(Persona):
9+
10+
@property
11+
def matricola(self):
12+
return self._matricola
13+
14+
@matricola.setter
15+
def matricola(self, matricola):
16+
self._matricola = matricola
17+
18+
@property
19+
def corso_di_studio(self):
20+
return self._corso_di_studio
21+
22+
@corso_di_studio.setter
23+
def corso_di_studio(self, corso_di_sudtio):
24+
self._corso_di_studio = corso_di_sudtio
25+
26+
@property
27+
def alchool(self):
28+
return self._alchool
29+
30+
@alchool.setter
31+
def alchool(self, alchool):
32+
self._alchool = alchool
33+
34+
@alchool.deleter
35+
def alchool(self):
36+
self._alchool = list()
37+
38+
@property
39+
def esami(self):
40+
return self._esami
41+
42+
@esami.setter
43+
def esami(self, esami):
44+
self._esami = esami
45+
46+
def __init__(self, nome: str, cognome: str, sesso: bool, peso: int, data_di_nascita: datetime, matricola: int,
47+
corso_di_studio: str, alchool: list, esami: dict):
48+
"""
49+
Metodo init per la creazione di uno studente
50+
:param nome: nome dello studente, deve essere di tipo str.
51+
:param cognome: cognome dello studente, deve essere di tipo str.
52+
:param sesso: sesso dello studente, deve essere True per maschio False per le femmina.
53+
:param peso: peso dello studente, deve essere un intero.
54+
:param data_di_nascita: data di nascita dello studente, deve essere di tipo datetime.
55+
:param matricola: matricola dello studente, deve essere un intero.
56+
:param corso_di_studio: cordo di studio dello studente, deve essere una stringa.
57+
:param alchool: lista di bevande consumate dallo studente, deve essere una lista di tuple di lunghezza due, al
58+
primo posto il tasso alcholico della bevanda e al secondo il volume della bevanda e.g. [(14, 200), (30, 50)]
59+
si nota che il primo membro della tupla e` una percentuale quiindi i valori devono essere compresi tra 0 e 100.
60+
:param esami: dizionario degli esami conseguiti dallo studente, il dizionario deve avere come chiave il nome
61+
dell'esame e come valore la tupla (crediti, voto, lode), dove crediti e voto sono interi e il voto deve essere
62+
compreso tra 18 e 30, mentre lode e` un boolean, si nota che la lode non puo` essere assegnata se il voto non
63+
e` 30.
64+
"""
65+
66+
for e in esami.values():
67+
assert isinstance(e, tuple)
68+
assert len(e) == 3
69+
assert isinstance(e[0], int) and isinstance(e[1], int) and isinstance(e[2], bool)
70+
assert 18 <= e[1] <= 30
71+
assert e[1] != 30 and e[3] is True
72+
assert isinstance(nome, str)
73+
assert isinstance(cognome, str)
74+
assert isinstance(data_di_nascita, datetime)
75+
for a in alchool:
76+
assert isinstance(a, tuple)
77+
assert len(a) == 2
78+
assert 0 <= a[0] <= 100
79+
80+
super().__init__(nome, cognome, data_di_nascita, sesso, peso)
81+
self._matricola = matricola
82+
self._corso_di_studio = corso_di_studio
83+
self._alchool = alchool
84+
self._esami = esami
85+
86+
def calcolo_media_esami(self):
87+
crediti_totali = sum(map(lambda x: x[0], self._esami.values()))
88+
media = sum(map(lambda x: x[0] * x[1], self._esami.values())) / crediti_totali
89+
return media
90+
91+
def calcola_tasso_alcolemico(self):
92+
coefficente_difusione = 0.73 if self._sesso else 0.66
93+
sum_beverage = sum(map(lambda x: x[0] * x[1], self._alchool))
94+
return sum_beverage * 0.008 * 1.055 / (coefficente_difusione * self._peso)
95+
96+
97+
98+

0 commit comments

Comments
 (0)