What could I do for that except not to interrupt my Else?

Asked

Viewed 66 times

0

This is my line of codes, I wish this except didn’t interfere in my last This, but in all the ways that I tried, went wrong.

#frameworks usados
import pandas as pd
from pandas import DataFrame



#DATABASE (Onde ficam as informações base da tabela.)
database = DataFrame
database = {'Jogos':[1, 2, 3, 4], 
    'Placar':[12, 24, 10, 24],
    'Mínimo da Temporada':[12, 12, 10, 10],
    'Máximo da Temporada':[12, 24, 24, 24],
    'Quebra recorde mín':[0, 0, 1, 1],
    'Quebra recorde max':[0, 1, 1, 1]}

df = pd.DataFrame(database, columns = ['Jogos', 'Placar', 'Mínimo da Temporada', 'Máximo da Temporada', 'Quebra recorde mín', 'Quebra recorde max'])
Data_Table = df.to_string()


'''
O input, para o usuario poder adicionar novas informações a tabela.
Caso seja inserido uma string ou um int abaixo de 0, ele irá requisitar uma nova tentativa
'''
while True:
    try:
        p = int(input("Qual foi o placar?:"))
        if p == p > 0:
           break
        else: raise ValueError('tente novamente:')
    except ValueError as e:
            print('Valor inválido,', e)
            
                
        


j = df['Jogos'].iloc[-1] + 1

'''
Cálcula o mínimo e máximo da temporada.
Define o valor base de mint e maxt como sendo o ultimo 
valor das suas respectivas colunas e verifica, no caso de mint,
se o valor mínimo anterior era maior que o placar atual
Faz a mesma coisa com maxt, apenas invertendo
'''

mint = df['Mínimo da Temporada'].iloc[-1]
if int(p) < df['Mínimo da Temporada'].iloc[-1]:
    mint = p

maxt = df['Máximo da Temporada'].iloc[-1]
if int(p) > df['Máximo da Temporada'].iloc[-1]:
    maxt = p


'''    
Cálcula as quebras de recordes.
Define o valor base de qrmin e qrmax como sendo o ultimo 
valor das suas respectivas colunas e verifica se houve mudança nas
colunas de mínimo e máximo da temporada, para modificar o valor da quebra de recordes.

'''
qrmin = df['Quebra recorde mín'].iloc[-1]
if int(mint) < df['Mínimo da Temporada'].iloc[-2]:
    qrmin = qrmin + 1

qrmax = df['Quebra recorde max'].iloc[-1]
if int(maxt) > df['Máximo da Temporada'].iloc[-2]:
    qrmax = qrmax + 1
"""
Adiciona novas linhas com as informações dos cálculos e afins, a tabela.

Define qual variável muda o resultado de cada coluna, depois
assimila a nova linha ao dataframe com o código df.append
"""
new_row = {'Jogos':j, 'Placar': p, 'Mínimo da Temporada': mint, 'Máximo da Temporada': maxt, 'Quebra recorde mín':qrmin, 'Quebra recorde max': qrmax,}
df = df.append(new_row, ignore_index=True)

#Coloca em prática os códigos e lê o dataframe.
print(df)

'''
Ocorrem todos os comandos para criar novas linhas e assimila-las ao dataframe novamente, 
além dos cálculos.

O processo funciona igual ao do while anterior, com a diferença que ele já vem integrado
com o "new_row", "df.append" "print(df)"
'''

while True:
    continuar = input('Deseja continuar? Sim ou não:').lower()
    try: 
        if continuar == 'sim' or 's':
            p = int(input("Adicione algum placar:"))
        
            if p > 0:
        
                j = (df)['Jogos'].iloc[-1] + 1

                mint = df['Mínimo da Temporada'].iloc[-1]
                if int(p) < df['Mínimo da Temporada'].iloc[-1]:
                    mint = p

                maxt = df['Máximo da Temporada'].iloc[-1]
                if int(p) > df['Máximo da Temporada'].iloc[-1]:
                    maxt = p
        
                qrmin = df['Quebra recorde mín'].iloc[-1]
                if int(mint) < df['Mínimo da Temporada'].iloc[-1]:
                    qrmin = (qrmin + 1)

                qrmax = df['Quebra recorde max'].iloc[-1]
                if int(maxt) > df['Máximo da Temporada'].iloc[-1]:
                    qrmax = (qrmax + 1)

                new_row = {'Jogos':j, 'Placar': p, 'Mínimo da Temporada': mint, 'Máximo da Temporada': maxt, 'Quebra recorde mín':qrmin, 'Quebra recorde max': qrmax,}
                df = df.append(new_row, ignore_index=True) 

                print(df)
            else:
                raise ValueError('Valor inválido, tente novamente:', )
        else:
            break
            
    except ValueError as e:
            print( e)

        



              

Note: I’m starting python programming so I’m likely to have syntax errors.

  • Gabriel, good morning! Does he interfere how? What behavior do you expect? Hug!

  • What exactly should the program do? Could [Dit] ask the question and ask more information? Anyway, if p == p > 0 does not make sense, the result of p > 0 is a boolean, so you’re comparing a booleano with a number, which is probably not what you want - it wouldn’t be just if p > 0? And launch a ValueError just to force you to fall into except doesn’t sound like a good one (why not print the message on else and ready?)

  • My intention was that if if continuar = "sim", he ran that code inside that same if, And if it was anything other than that answer, he shut down the program. I really appreciate the help, I know it’s outside the topic and the theme of this forum, but they could recommend books or the like for me to perfect my knowledge in programming, I got into this area and there’s so much to learn that I don’t even know where to start.

1 answer

1


Keeping (almost) all your code, you can pass the continuar = input('Deseja continuar? Sim ou não:').lower() into while, that way at each iteration it will ask if you want to continue and will not go into infinite loop.

#frameworks usados
import pandas as pd
from pandas import DataFrame

#DATABASE (Onde ficam as informações base da tabela.)
database = DataFrame
database = {'Jogos':[1, 2, 3, 4], 
    'Placar':[12, 24, 10, 24],
    'Mínimo da Temporada':[12, 12, 10, 10],
    'Máximo da Temporada':[12, 24, 24, 24],
    'Quebra recorde mín':[0, 0, 1, 1],
    'Quebra recorde max':[0, 1, 1, 1]}

df = pd.DataFrame(database, columns = ['Jogos', 'Placar', 'Mínimo da Temporada', 'Máximo da Temporada', 'Quebra recorde mín', 'Quebra recorde max'])
Data_Table = df.to_string()

'''
O input, para o usuario poder adicionar novas informações a tabela.
Caso seja inserido uma string ou um int abaixo de 0, ele irá requisitar uma nova tentativa
'''
while True:
    try:
        p = int(input("Qual foi o placar?:"))
        if p == p > 0:
            break
        else: raise ValueError('tente novamente:')
    except ValueError as e:
            print('Valor inválido,', e)
            
                
j = df['Jogos'].iloc[-1] + 1

'''
Cálcula o mínimo e máximo da temporada.
Define o valor base de mint e maxt como sendo o ultimo 
valor das suas respectivas colunas e verifica, no caso de mint,
se o valor mínimo anterior era maior que o placar atual
Faz a mesma coisa com maxt, apenas invertendo
'''

mint = df['Mínimo da Temporada'].iloc[-1]
if int(p) < df['Mínimo da Temporada'].iloc[-1]:
    mint = p

maxt = df['Máximo da Temporada'].iloc[-1]
if int(p) > df['Máximo da Temporada'].iloc[-1]:
    maxt = p

'''    
Cálcula as quebras de recordes.
Define o valor base de qrmin e qrmax como sendo o ultimo 
valor das suas respectivas colunas e verifica se houve mudança nas
colunas de mínimo e máximo da temporada, para modificar o valor da quebra de recordes.

'''
qrmin = df['Quebra recorde mín'].iloc[-1]
if int(mint) < df['Mínimo da Temporada'].iloc[-2]:
    qrmin = qrmin + 1

qrmax = df['Quebra recorde max'].iloc[-1]
if int(maxt) > df['Máximo da Temporada'].iloc[-2]:
    qrmax = qrmax + 1
"""
Adiciona novas linhas com as informações dos cálculos e afins, a tabela.

Define qual variável muda o resultado de cada coluna, depois
assimila a nova linha ao dataframe com o código df.append
"""
new_row = {'Jogos':j, 'Placar': p, 'Mínimo da Temporada': mint, 'Máximo da Temporada': maxt, 'Quebra recorde mín':qrmin, 'Quebra recorde max': qrmax,}
df = df.append(new_row, ignore_index=True)

#Coloca em prática os códigos e lê o dataframe.
print(df)

'''
Ocorrem todos os comandos para criar novas linhas e assimila-las ao dataframe novamente, 
além dos cálculos.

O processo funciona igual ao do while anterior, com a diferença que ele já vem integrado
com o "new_row", "df.append" "print(df)"
'''

while True:
    continuar = input('Deseja continuar? Sim ou não:').lower()
    try: 
        if continuar == 'sim' or continuar == 's':
            p = int(input("Adicione algum placar:"))
        
            if p > 0:
        
                j = (df)['Jogos'].iloc[-1] + 1

                mint = df['Mínimo da Temporada'].iloc[-1]
                if int(p) < df['Mínimo da Temporada'].iloc[-1]:
                    mint = p

                maxt = df['Máximo da Temporada'].iloc[-1]
                if int(p) > df['Máximo da Temporada'].iloc[-1]:
                    maxt = p
        
                qrmin = df['Quebra recorde mín'].iloc[-1]
                if int(mint) < df['Mínimo da Temporada'].iloc[-1]:
                    qrmin = (qrmin + 1)

                qrmax = df['Quebra recorde max'].iloc[-1]
                if int(maxt) > df['Máximo da Temporada'].iloc[-1]:
                    qrmax = (qrmax + 1)

                new_row = {'Jogos':j, 'Placar': p, 'Mínimo da Temporada': mint, 'Máximo da Temporada': maxt, 'Quebra recorde mín':qrmin, 'Quebra recorde max': qrmax,}
                df = df.append(new_row, ignore_index=True) 

                print(df)
        else:
            #raise ValueError('Valor inválido, tente novamente:', )
            break
                       
    except ValueError as e:
            print( e)

I added the lower() only to always compare with a lowercase string. I removed the break that was within the last Isis, for it is not necessary.

Within the else, above except I put the break there.


Edit

In the current code the error was in if continuar == 'sim' or 's', where it really should be if continuar == 'sim' or continuar == 's'

  • Using this code, it has already gotten much closer than I’d like it to be, thank you. As I would do for when it was anything other than "sim" shut down the program? That’s why else: break was to completely close the whole loop together with the program. I thank you from now on.

  • Gabriel, great! For nothing! Hugs!

  • How would I do for when anything other than "yes" closes the program? I tried to use the else: break for this, but he keeps asking if I wish to continue, in an endless loop.

  • See that before the except I put one break within an E-l, I believe this solves your problem.

  • I used it too, but it keeps giving the problem unfortunately.

  • Then I would have to see how is all your code, because the way I put here the program to. You are using the notebook jupyter?

  • Behold: gif

Show 3 more comments

Browser other questions tagged

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