Created
July 2, 2019 23:42
-
-
Save requeijaum/eaa46ce675216d2679da5d1dceaa3d7f to your computer and use it in GitHub Desktop.
Marcelo me pediu pra corrigir isso. Ele finalmente aprendeu Python!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
Verificado por Rafael Requião em 03jul2019 | |
1 - Soma, subtração, multiplicação, divisão, resto da divisão, exponenciação e raiz quadrada. | |
> OK | |
2 - Calcular fatorial de um número. | |
> OK | |
3 - Mostrar lista de operações disponíveis; solicitar operação; solicitar operandos; mostrar resultado da operação selecionada. | |
> OK | |
4 - O programa deve executar repetidamente até que seja indicado o seu término. | |
> OK | |
5 - Mostrar operação de encerrar a execução do programa. | |
> OK | |
6 - Cada operação realizada (e seu resultado) deve ser armazenada em uma lista, como se fosse uma memória das últimas operações | |
> OK | |
7 - Mostrar opção de visualizar as últimas operações; mostrar operações individualmente, como uma lista. Linha-por-linha. Permitir uma opção de visualizar outra operação ou retornar para o menu principal da calculadora. | |
> OK | |
BONUS - refatorei o loop e tratei a exceção que ocorre quando nenhum valor para OP é informado; | |
o mesmo ocorre caso OP seja um número fora do conjunto [0,9] (de zero até nove). | |
''' | |
# variáveis globais | |
memoria = [] | |
op = None | |
# iniciar programa | |
print("\n\tCALCULADORA VIRTUAL\n") | |
print("\n\tGrupo:\n\t - Victor Almeida\n\t - Luiza Bittar\n\t - Marcelo Oliveira\n") | |
def obterOperacao(): | |
global op | |
# tratar casos quando não é fornecido um valor para "op" | |
try: | |
op = int(input("\nEscolha qual operação deseja executar:\n 1 - Soma\n 2 - Subtração\n 3 - Multiplicação\n 4 - Divisão\n 5 - Resto de divisão\n 6 - Exponenciação\n 7 - Raíz Quadrada\n 8 - Fatorial\n 9 - Acessar a memória\n 0 - Sair\n\n")) | |
except ValueError: | |
print("Por favor, informe um número válido!") | |
op = "" | |
pass | |
while op != 0: | |
if op == 1: | |
num1 = float(input("\nQual o primeiro número a ser somado?\n")) | |
num2 = float(input("Qual o segundo número a ser somado?\n")) | |
memoria.append("%f + %f = %f" % (num1, num2, num1 + num2)) | |
print("O resultado da soma é: ", num1 + num2, "\n\n") | |
op = "" | |
elif op == 2: | |
num1 = float(input("\nQual o primeiro número a ser subtraído? \n")) | |
num2 = float(input("Qual o segundo número a ser subtraído? \n")) | |
memoria.append("%f - %f = %f" % (num1, num2, num1 - num2)) | |
print("O resultado da subtração é: ", num1 - num2, "\n\n") | |
op = "" | |
elif op == 3: | |
num1 = float(input("\nQual o primeiro número a ser multiplicado?\n")) | |
num2 = float(input("Qual o segundo número a ser multiplicado?\n")) | |
memoria.append("%f * %f = %f" % (num1, num2, num1 * num2)) | |
print("O resultado da multiplicação é: ", num1 * num2, "\n\n") | |
op = "" | |
elif op == 4: | |
num1 = float(input("\nQual o primeiro número a ser dividido?\n")) | |
num2 = float(input("Qual o segundo número a ser dividido?\n")) | |
if num2 == 0: | |
print("Não é possível dividir por zero.\n\n") | |
else: | |
memoria.append("%f / %f = %f" % (num1, num2, num1 / num2)) | |
print("O resultado da divisão é", num1 / num2, "\n\n") | |
op = "" # execucao incondicional :-P | |
elif op == 5: | |
num1 = float(input("\nQual o primeiro número a ser dividido?\n")) | |
num2 = float(input("Qual o segundo número a ser dividido?\n")) | |
if num2 == 0: | |
print("Não é possível dividir por zero.\n\n") | |
else: | |
memoria.append("%f / %f tem como resto: %f" % (num1, num2, num1 % num2)) | |
print("O resto da divisão é: ", num1 % num2, "\n\n") | |
op = "" | |
elif op == 6: | |
num1 = float(input("\nQual a base da potência? \n")) | |
num2 = float(input("Qual o expoente da potência? \n")) | |
if num1 == 0 and num2 == 0: | |
print("A potência é indeterminada.\n\n") | |
else: | |
memoria.append("%f ^ %f = %f" % (num1, num2, num1 ** num2)) | |
print("O resultado da potência é: ", num1 ** num2, "\n\n") | |
op = "" | |
elif op == 7: | |
num1 = float(input("\nQual o radical? \n")) | |
if num1 < 0: | |
print("O resultado da raíz é complexo.\n\n") | |
else: | |
print("O resultado da raíz é: ", num1 ** (1 / 2), "\n\n") | |
memoria.append("sqrt %f = %f" % (num1, num1 ** (1 / 2))) | |
op = "" | |
elif op == 8: | |
num1 = int(input("\nO fatorial de qual número deve ser calculado? \n")) | |
if num1 < 0: | |
print("Não foi possível calcular o fatorial. \n\n") | |
else: # a brincadeira começa aqui | |
cont = 1 | |
fat = 1 | |
while cont <= num1: | |
fat = fat * cont | |
cont = cont + 1 | |
# verificar se essas 2 últimas funções são fora do while | |
memoria.append("%f! = %f" % (num1, fat)) | |
print("O resultado do fatorial é :", fat, "\n\n") | |
op = "" | |
# quando op não é um valor inteiro entre 1 e 8... possivel bug pois foge do alcance de 'op' | |
elif op == 9: | |
a = int(input( | |
"\n\tMemória da Calculadora Virtual\n\n Digite:\n 0 - Para voltar para a calculadora\n 1 - Para acessar as operações efetuadas.\n\n")) | |
while a != 0: | |
b = int(input( | |
"\nOpções: \n 0 - Para voltar para a calculadora.\n 1 - Para acessar a primeira operação efetuada.\n 2 - Para acessar a última operação efetuada.\n\n")) | |
if b == 1: | |
cont = 0 | |
while b == 1: | |
print(memoria[0 + (cont)]) | |
cont = cont + 1 | |
b = int(input("\n 0 - Sair\n 1 - Próxima operação.\n")) | |
elif b == 2: | |
cont = 0 | |
while b == 2: | |
print(memoria[-1 + (cont)]) | |
cont = cont - 1 | |
b = int(input("\n 0 - Sair\n 2 - Operação anterior.\n")) | |
else: | |
a = 0 | |
# fim do while aqui | |
op = "" | |
# fim do caso "op == 9" | |
# caso "op" não seja fornecido ou não seja um número entre 0 e 9 | |
elif op == "" or op not in [0,9]: | |
obterOperacao() | |
print("\n\tFim do programa!\n\n") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment