Percursos
/
Python
Python
/
Exercícios
/
A conta da luz
A conta da luz

A conta da luz

Exercício de aprendizagem

Introdução

O Python tem três tipos diferentes de números incorporados: inteiros (int), de vírgula flutuante (float) e complexos (complex). As frações (fractions.Fraction) e os decimais (decimal.Decimal) também estão disponíveis através de importação da biblioteca padrão.

Os números inteiros, incluindo os hexadecimais (hex()), octais (oct()) e binários (bin()) sem casas decimais, também são identificados como ints:

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

>>> -12
-12

Os números que contêm um ponto decimal (com ou sem partes fracionárias) são identificados como floats:

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

Aritmética

O Python suporta totalmente a aritmética entre estes diferentes tipos de números e converte os números mais restritos para corresponderem aos seus equivalentes menos restritos quando se usam os operadores aritméticos binários (+, -, *, /, // e %).

Adição e subtração

Os operadores de adição e subtração comportam-se como na matemática normal. Se um ou mais dos operandos for um float, os ints restantes também serão convertidos em floats:

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

Multiplicação

Tal como na adição e na subtração, a multiplicação converte os números mais restritos para corresponderem aos seus equivalentes menos restritos:

>>> 3 * 2
6

>>> 3 * 2.0
6.0

Divisão

A divisão devolve sempre um float, mesmo que o resultado seja um número inteiro:

>>> 6/5
1.2

>>> 6/2
3.0

Divisão inteira

Se precisares de um resultado int, podes usar a divisão inteira para truncar o resultado. A divisão inteira é feita com o operador //:

>>> 6//5
1

>>> 6//2
3

Módulo

O operador de módulo (%) devolve o resto da divisão dos dois operandos:

# 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

Outra forma de ver 5 % 3:

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

>>> decimal_part = 5/3 - whole_part
0.6666666666666667

>>> whole_remainder = decimal_part * 3
2.0

Arredondamento

O Python disponibiliza uma função incorporada round(number, <decimal_places>) para arredondar um número de vírgula flutuante para um determinado número de casas decimais. Se não for especificado o número de casas decimais, o número é arredondado para o inteiro mais próximo e devolve um int:

>>> round(3.1415926535, 2)
3.14

>>> round(3.1415926535)
3

Prioridade e parênteses

O Python permite usar parênteses para agrupar expressões. Isto é útil quando queres alterar a ordem de operações predefinida.

>>> 2 + 3 * 4
14

>>> (2 + 3) * 4
20

O Python segue a regra PEMDAS para a precedência dos operadores. Isto significa que os cálculos dentro de () têm a prioridade mais alta, seguidos de **, depois *, /, //, %, + 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

Precisão e representação

Os inteiros em Python têm precisão arbitrária: o número de algarismos é limitado apenas pela memória disponível do sistema anfitrião.

Os números de vírgula flutuante são normalmente implementados com um double em C (15 casas decimais de precisão), mas a representação varia consoante o sistema anfitrião. Os números complexos têm uma parte real e uma parte imaginary, ambas representadas por números de vírgula flutuante.

Para uma discussão mais detalhada das questões e limitações da aritmética de vírgula flutuante nas várias linguagens de programação, dá uma vista de olhos a 0.30000000000000004.com e ao Tutorial de Python.

Instruções

A empresa para a qual trabalhas quer reduzir a sua pegada de carbono, por isso quer que escrevas um programa para calcular o consumo de energia e o custo de funcionamento dos seus equipamentos eletrónicos.

1. Obter as horas extra

O teu empregador tem um programa que calcula quanto tempo demoram a funcionar os diferentes equipamentos eletrónicos. Neste momento, o tempo está armazenado em horas. Quando o teu empregador somou as horas, reparou que a duração não estava correta. Querem que acrescentes 3 horas extra aos dados de tempo. Também gostariam de saber quantas horas "extra" sobram depois de converteres os dados em dias "completos" (um dia tem 24 horas). O tempo a converter pode não estar em dias completos.

Implementa uma função get_extra_hours() que aceita um número inteiro que representa o número de horas. A função deve fazer o ajuste adequado das "horas extra" e depois return um número inteiro que representa quantas horas é preciso retirar ao total para obteres o tempo em dias "completos".

>>> get_extra_hours(25)
4

2. Obter o valor em kW

O teu empregador quer saber o consumo de energia dos diferentes equipamentos eletrónicos em kW. kW significa quilowatt, e o watt é uma unidade de potência. O quilo, no nome da unidade, é um prefixo do sistema métrico que significa 1000. Um quilowatt == 1000 watts.

Implementa uma função get_kW_value() que aceita um número inteiro que representa o número de watts. A função deve depois return os watts em quilowatts, arredondados a 1 casa decimal.

>>> get_kW_value(1150)
1.2

3. Obter o valor em kWh

Para conseguires calcular o custo de funcionamento dos equipamentos eletrónicos, o teu empregador precisa de saber o consumo de energia em kWh. kWh significa quilowatt-hora, em que a hora é uma unidade de tempo. Um quilowatt-hora == 1000 watts utilizados durante 1 hora. Uma hora é composta por 60 minutos e um minuto é composto por 60 segundos. Uma hora é igual a 3600 segundos. Para calcular o valor em kWh, tens de converter os watts em kW e depois fazer a divisão inteira do resultado por 3600.

Implementa uma função get_kWh_value() que aceita um número inteiro que representa o número de watts. A função deve depois return os quilowatts-hora como um número inteiro.

>>> get_kWh_value(5000000)
1

4. Obter a eficiência

Os equipamentos eletrónicos não são 100% eficientes. Por isso, o teu empregador quer que calcules a eficiência dos equipamentos eletrónicos. Para obteres a eficiência, tens de dividir o fator de potência (um float entre 0 e 100) por 100.

Implementa uma função get_efficiency() que aceita um float que representa o fator de potência. A função deve depois return a eficiência calculada como um float.

>>> get_efficiency(80)
0.8

5. Obter o custo

O teu empregador quer saber o custo de funcionamento dos equipamentos eletrónicos. O custo de funcionamento dos equipamentos eletrónicos é a potência utilizada multiplicada pelo custo por kWh. A potência utilizada é a potência fornecida dividida pela eficiência calculada.

Implementa uma função get_cost(<watts>,<power_factor>,<price>) que aceita um número inteiro que representa o número de watts, um float com o fator de potência e um float com o custo por kWh. A função deve depois return o custo de funcionamento dos equipamentos eletrónicos como um float.

>>> get_cost(5000000, 80, 0.25)
0.3125
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar A conta da luz?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.