Skip to content

Instantly share code, notes, and snippets.

@requeijaum
Created July 2, 2019 23:42
Show Gist options
  • Save requeijaum/eaa46ce675216d2679da5d1dceaa3d7f to your computer and use it in GitHub Desktop.
Save requeijaum/eaa46ce675216d2679da5d1dceaa3d7f to your computer and use it in GitHub Desktop.
Marcelo me pediu pra corrigir isso. Ele finalmente aprendeu Python!
'''
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