Track
/
Python
Python
/
Esercizi
/
Bolletta della luce
Bolletta della luce

Bolletta della luce

Esercizio di apprendimento

Introduzione

Python ha tre diversi tipi di numeri predefiniti: interi (int), in virgola mobile (float) e complessi (complex). Le frazioni (fractions.Fraction) e i decimali (decimal.Decimal) sono disponibili anch'essi, importandoli dalla libreria standard.

Anche i numeri interi, compresi i numeri esadecimali (hex()), ottali (oct()) e binari (bin()) senza cifre decimali, sono identificati come ints:

# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>

>>> -12
-12

I numeri che contengono un punto decimale (con o senza parte frazionaria) sono identificati come floats:

>>> 3.45
3.45
>>> type(3.45)
<class 'float'>

Aritmetica

Python supporta pienamente l'aritmetica tra questi diversi tipi di numero e converte i numeri più ristretti per allinearli ai loro omologhi meno ristretti quando si usano gli operatori aritmetici binari (+, -, *, /, // e %).

Addizione e sottrazione

Gli operatori di addizione e sottrazione si comportano come nella matematica normale. Se uno o più operandi è un float, anche gli int rimanenti verranno convertiti in float:

>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0

Moltiplicazione

Come per l'addizione e la sottrazione, la moltiplicazione converte i numeri più ristretti per allinearli ai loro omologhi meno ristretti:

>>> 3 * 2
6

>>> 3 * 2.0
6.0

Divisione

La divisione restituisce sempre un float, anche se il risultato è un numero intero:

>>> 6/5
1.2

>>> 6/2
3.0

Divisione con arrotondamento per difetto

Se serve un risultato di tipo int, puoi usare la divisione con arrotondamento per difetto per troncare il risultato. La divisione con arrotondamento per difetto si esegue con l'operatore //:

>>> 6//5
1

>>> 6//2
3

Modulo

L'operatore modulo (%) restituisce il resto della divisione dei due operandi:

# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0

# The result of % is 2 here, because 3 only goes into 5 once, with 2 leftover
>>> 5 % 3
2

Un altro modo per vedere 5 % 3:

>>> whole_part = int(5/3)
1

>>> decimal_part = 5/3 - whole_part
0.6666666666666667

>>> whole_remainder = decimal_part * 3
2.0

Arrotondamento

Python fornisce una funzione predefinita round(number, <decimal_places>) per arrotondare un numero in virgola mobile a un dato numero di cifre decimali. Se non viene specificato il numero di cifre decimali, il numero viene arrotondato all'intero più vicino e viene restituito un int:

>>> round(3.1415926535, 2)
3.14

>>> round(3.1415926535)
3

Priorità e parentesi

Python ti permette di usare le parentesi per raggruppare le espressioni. È utile quando vuoi modificare l'ordine predefinito delle operazioni.

>>> 2 + 3 * 4
14

>>> (2 + 3) * 4
20

Python segue la regola PEMDAS per la precedenza degli operatori. Questo significa che i calcoli all'interno delle () hanno la priorità più alta, seguiti da **, poi *, /, //, %, + e -:

>>> 2 + 3 - 4 * 4
-11

>>> (2 + 3 - 4) * 4
4

# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 64, then 2 + 192
>>> 2 + 3 * 4 ** 4
770

Precisione e rappresentazione

In Python i numeri interi hanno precisione arbitraria: il numero di cifre è limitato solo dalla memoria disponibile del sistema che li ospita.

I numeri in virgola mobile sono di solito implementati usando un double in C (15 cifre decimali di precisione), ma la loro rappresentazione varia in base al sistema che li ospita. I numeri complessi hanno una parte real e una parte imaginary, entrambe rappresentate da numeri in virgola mobile.

Per una trattazione più dettagliata dei problemi e dei limiti dell'aritmetica in virgola mobile tra i vari linguaggi di programmazione, dai un'occhiata a 0.30000000000000004.com e a The Python Tutorial.

Istruzioni

L'azienda per cui lavori vuole ridurre la propria impronta di carbonio, quindi ti chiede di scrivere un programma per calcolare il consumo elettrico e il costo di funzionamento dei propri apparecchi elettronici.

1. Ottieni le ore extra

Il tuo datore di lavoro ha un programma che calcola il tempo necessario per far funzionare diversi apparecchi elettronici. Al momento, il tempo è memorizzato in ore. Quando il datore di lavoro ha aggiunto le ore, si è accorto che la durata non era corretta. Vuole che tu aggiunga 3 ore extra ai dati temporali. Vorrebbe anche sapere quante ore «extra» ci sono dopo aver convertito i dati in giorni «interi» (un giorno equivale a 24 ore). Il tempo da convertire potrebbe non essere in giorni interi.

Implementa una funzione get_extra_hours() che accetta un intero che rappresenta il numero di ore. La funzione deve applicare la correzione appropriata per le «ore extra», quindi return un intero che rappresenta quante ore devono essere rimosse dal totale per ottenere il tempo in giorni «interi».

>>> get_extra_hours(25)
4

2. Ottieni il valore in kW

Il tuo datore di lavoro vuole conoscere il consumo elettrico dei diversi apparecchi elettronici in kW. kW sta per kilowatt, dove il watt è un'unità di potenza. Kilo nel nome dell'unità è un prefisso del sistema metrico che significa 1000. Un kilowatt == 1000 watt.

Implementa una funzione get_kW_value() che accetta un intero che rappresenta il numero di watt. La funzione deve quindi return i watt in kilowatt arrotondati a una cifra decimale.

>>> get_kW_value(1150)
1.2

3. Ottieni il valore in kWh

Per poter calcolare il costo di funzionamento degli apparecchi elettronici, il tuo datore di lavoro deve conoscere il consumo elettrico in kWh. kWh sta per kilowattora, dove l'ora è un'unità di tempo. Un kilowattora == 1000 watt utilizzati per 1 ora. Un'ora è composta da 60 minuti e un minuto è composto da 60 secondi. Un'ora equivale a 3600 secondi. Per calcolare il valore in kWh, devi convertire i watt in kW, quindi eseguire la divisione intera del risultato per 3600.

Implementa una funzione get_kWh_value() che accetta un intero che rappresenta il numero di watt. La funzione deve quindi return i kilowattora come intero.

>>> get_kWh_value(5000000)
1

4. Ottieni l'efficienza

Gli apparecchi elettronici non sono efficienti al 100%. Quindi, il tuo datore di lavoro vuole che tu calcoli l'efficienza degli apparecchi elettronici. Per ottenere l'efficienza, devi dividere il fattore di potenza (un numero in virgola mobile tra 0 e 100) per 100.

Implementa una funzione get_efficiency() che accetta un numero in virgola mobile che rappresenta il fattore di potenza. La funzione deve quindi return l'efficienza calcolata come numero in virgola mobile.

>>> get_efficiency(80)
0.8

5. Ottieni il costo

Il tuo datore di lavoro vuole conoscere il costo di funzionamento degli apparecchi elettronici. Il costo di funzionamento degli apparecchi elettronici è la potenza utilizzata moltiplicata per il costo per kWh. La potenza utilizzata è la potenza fornita divisa per l'efficienza calcolata.

Implementa una funzione get_cost(<watts>,<power_factor>,<price>) che accetta un intero che rappresenta il numero di watt, un numero in virgola mobile che rappresenta il fattore di potenza e un numero in virgola mobile che rappresenta il costo per kWh. La funzione deve quindi return il costo di funzionamento degli apparecchi elettronici come numero in virgola mobile.

>>> get_cost(5000000, 80, 0.25)
0.3125
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Bolletta della luce?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.