I can’t get all my options working

Asked

Viewed 35 times

-3

Only 1 calculator option works, the others don’t even print anything when they are called! Someone can help me?

import datetime
from datetime import time
from datetime import datetime
from datetime import date
from datemain import currentlydate
from sistemabanco import Acc
from sistemabanco import ContaBlock
import math



print('@' * 50)
print('          ', 'Welcome to NeryPhone', '          ')
while (True):
    print('       ', 'Escolha as suas opcoes abaixo!', '          ')
    print('[Calculadora(1)] -> Voce podera fazer calculos')
    print('[Conta Bancaria(2)] -> Voce podera operar sua conta bancaria!')
    print('[Sair(3)] -> Celular sera desligado!')
    print('[Agenda Telefonica(4)] -> Sera mostrado sua agenda telefonica!')
    print()
    oopt = input('O que voce deseja fazer? [1-4]')

    while True:
        try:
         if oopt == '1':
             print('Calculadora')
             print('Estes sao os operadores possiveis: +, -, /, *, ** ou Raiz ')
             operator = input('Qual operação você deseja fazer? ').title()
             n1 = float(input('1º Valor: '))
             n2 = float(input('2º Valor: '))
             if operator == '+':
                 result = n1 + n2
                 print('Valor 1 + Valor2 -->' , result)

             elif operator == '-':
                 result = n1 - n2
                 print('Valor 1 - Valor2 -->' , result)

             elif operator == '/' or '\'':
                 result = n1 / n2
                 assert n1 and n2 > 0, 'Você digitou 0 ou um valor irreal!'
                 print('Valor 1 / Valor 2 -->' , result)
             
             elif operator == '*':
                 result = n1 * n2
                 print('Valor 1 * Valor2 -->' , result)
             
             elif operator == '**':
                 result = n1 ** n2
                 print('Valor 1² -->', result)
            
             elif operator == 'Raiz':
                 result = math.sqrt(n1)
                 print('A raiz do valor é:' , result)
             else:
                 print('Valor não reconhecido, tente novamente!')
             close = input('Você deseja encerrar o programa? (S/N)').title()
             if close == 'S':
                 break
             else:
                 pass    
        
        except ValueError:
            print('Digite valores reais')
        except ZeroDivisionError:
            print('Não divida por 0!')

     
    while True:
        if oopt == '4':
            comando = "Continue"
            contatos = {}
            while comando != 'sair':
                comando = input('Registro, Pesquisar, Exibir').title()
                if comando == 'Registrar':
                    try:
                        nome = input('Nome: ').strip()
                        telefone = int(input('Telefone: ')).strip()
                        contatos[nome] = {
                        "Nome": nome,
                        "Telefone": telefone
                      }
                    except ValueError:
                        print('Insira números no telefone!')
                
                elif comando == 'Pesquisar':
                    nome = input('Nome: ')
                    if nome in contatos:
                        contato = contatos[nome]
                        print(contato)
                    else:
                        print('Contato nao encontrado!')
                
                elif comando == 'Exibir':
                    print(contatos)
                else:
                    print('Valor nao encontrado!')
                
                close2 = input('Voce deseja sair do programa? (S/N)').title()
                if close2 == 'S':
                    break
                else:
                    pass
        
        if oopt == '3':
            break
    
    while True:
        if oopt == '2':
            namebanc = input('Your name: ')
            x = 0
            
            print(f'Olá {namebanc} \n Data: {currentlydate(x)}')
            print('@@@@@@Sacar@@@@@@')
            print('@@@@@@Depositar@@@@@@')
            print('@@@@@@Sair@@@@@@')
            optbank = input('Qual opção você deseja? ').title()

            while optbank != 'Sair':
                if optbank == 'Sacar':
                    try:
                        saldo = int(input('Seu saldo: '))
                        while True:
                            saque = int(input('Quanto você deseja sacar? '))
                            assert saldo - saque >= 0, 'Saldo insuficiente para Saque'
                            operation = saldo - saque
                            print(f'Seu saldo atual: {operation}')
                            closebank1 = input('Você deseja sair? (S/N)').title()
                            if closebank1 == 'S':
                                break
                            else:
                                pass
                    except ValueError:
                        print('Valor inválido!')
                
                
                elif optbank == 'Depositar':
                    try:
                        print(f'Seu saldo atual: {operation}')
                        while True:
                            deposit = int(input('Quanto você deseja depositar?'))
                            assert deposit > 0, 'Valor irreal para depósito'
                            depop = operation + deposit
                            print(f'Seu saldo atual: {depop}')
                            closebank2 = input('Você deseja sair? (S/N)').title()
                            if closebank2 == 'S':
                                break
                            else:
                                pass
                    except ValueError:
                        print('Valor irreal!')

                elif optbank == 'Sair':
                    break

1 answer

-1

Let’s look at his execution sequence:

oopt = input('O que voce deseja fazer? [1-4]')

while True:
    try:
        if oopt == '1':
             # ...

    except ValueError:
        print('Digite valores reais')
    except ZeroDivisionError:
        print('Não divida por 0!')

Case oopt be it '2', the program

  1. enters the infinite loop;

  2. enters the exception treatment block;

  3. checks whether oopt is equal to '1';

  4. as the condition is false, the program leaves the block try;

  5. as no exception occurred, the program leaves the exception treatment block;

  6. as the infinite loop has not been broken at any time, the program goes back to step 1.

So nothing happens if you enter oopt other than '1'. If you really want to use an infinite loop along with an exception treatment block, just reverse the order of the ifs, refactoring your code to

oopt = input('O que voce deseja fazer? [1-4]')

if oopt == '1':
    while True:
        try:
            # ...

        except ValueError:
            print('Digite valores reais')
        except ZeroDivisionError:
            print('Não divida por 0!')

elif oopt == '4':
    while True:
        # ...

elif oopt == '3':
    pass

elif oopt == '2':
    while True:
        #...

Browser other questions tagged

You are not signed in. Login or sign up in order to post.