How to make python code run again after running something?

Asked

Viewed 563 times

-3

So I’m not very experienced in python and I was trying to do a terminal program to organize books.. follows a part of the code:

#sql
import sqlite3
con = sqlite3.connect('teste.db')
cursor = con.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS dados(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
               nome_livro TEXT NOT NULL,nome_autor TEXT NOT NULL,pagina INTEGER NOT NULL,pagina_total INTEGER NOT NULL,\
               nota REAL,note TEXT);")
#principal
print('Bem vindo ao seu contador virtual. (help para ajuda)')
opcao = input('O que deseja? ')
if opcao.upper().strip() == 'HELP':
    print('Ola, estou aqui para te ajudar sempre que precisar :)')
    print('Suas opções são: ')
    print('"Adicionar"=> para adicionar um novo livro.')
    print('"Avaliar"=> para dar uma nota a um livro.')
    print('"Atualizar"=> para atualizar as informações de algum livro.')
    print('"Remover"=> para apagar os dados de algum livro.')
    print('"Listar"=> para mostrar as informações de todos os livros registrados.')
    print('"Status"=> para mostrar informações sobre um livro especifico.')
    opcao = input('Digite agora sua opção: ')
if opcao.upper().strip() == 'ADICIONAR':
    nome_livro = input('Digite o nome do livro: ')
    nome_autor = input('Digite o nome do autor: ')
    numero_pagina = int(input('Digite a pagina que você está: '))
    numero_total = int(input('Digite o numero total de paginas: '))
    cursor.execute('INSERT INTO dados (nome_livro, nome_autor, pagina, pagina_total) VALUES (?,?,?,?)', (nome_livro, nome_autor, numero_pagina, numero_total))
    con.commit()
    con.close()
    input('Livro adicionado com sucesso, aperte qualquer tecla para fechar o programa. ')
elif opcao.upper().strip() == 'AVALIAR':
    cursor.execute('SELECT id,nome_livro FROM dados')
    for linha in cursor.fetchall():
        print(linha)
    id_nota = int(input('Digite o numero do livro que deseja avaliar: '))

So, the way I did every action that the user does the program needs to close and open the program again to do something else, but I wish that after any action he could perform another without having to close. I don’t know how you do it and I would like help. Thank you.

1 answer

2


There are several ways to do this:

  • Loop with infinity with while True

just remembering that this way you need to add a option or exit condition break the loop with the command break otherwise it will keep running until you stop it manually.

while True: # Começa o loop

    # Principal
    print('Bem vindo ao seu contador virtual. (help para ajuda)')
    opcao = input('O que deseja? ')

    if opcao.upper().strip() == 'HELP':
        print('Ola, estou aqui para te ajudar sempre que precisar :)')
        print('Suas opções são: ')
        print('"Adicionar"=> para adicionar um novo livro.')
        print('"Avaliar"=> para dar uma nota a um livro.')
        print('"Atualizar"=> para atualizar as informações de algum livro.')
        print('"Remover"=> para apagar os dados de algum livro.')
        print('"Listar"=> para mostrar as informações de todos os livros registrados.')
        print('"Status"=> para mostrar informações sobre um livro especifico.')
        print('"Sair"=> Encerra o loop')

    elif opcao.upper().strip() == 'ADICIONAR':
        nome_livro = input('Digite o nome do livro: ')
        nome_autor = input('Digite o nome do autor: ')
        numero_pagina = int(input('Digite a pagina que você está: '))
        numero_total = int(input('Digite o numero total de paginas: '))
        cursor.execute('INSERT INTO dados (nome_livro, nome_autor, pagina, pagina_total) VALUES (?,?,?,?)', (nome_livro, nome_autor, numero_pagina, numero_total))
        con.commit()
        con.close()
        
    elif opcao.upper().strip() == 'AVALIAR':
        cursor.execute('SELECT id,nome_livro FROM dados')
        for linha in cursor.fetchall():
            print(linha)
        id_nota = int(input('Digite o numero do livro que deseja'))

    # Opção de saída para terminar o loop
    elif opcao.upper().strip() == "SAIR":
        break
  • Function use

In addition to giving more control over the loop, functions can be called elsewhere in the code and run again.

def contador_virtual():

    # Principal
    print('Bem vindo ao seu contador virtual. (help para ajuda)')
    opcao = input('O que deseja? ')

    if opcao.upper().strip() == 'HELP':
        print('Ola, estou aqui para te ajudar sempre que precisar :)')
        print('Suas opções são: ')
        print('"Adicionar"=> para adicionar um novo livro.')
        print('"Avaliar"=> para dar uma nota a um livro.')
        print('"Atualizar"=> para atualizar as informações de algum livro.')
        print('"Remover"=> para apagar os dados de algum livro.')
        print('"Listar"=> para mostrar as informações de todos os livros registrados.')
        print('"Status"=> para mostrar informações sobre um livro especifico.')
        print('"Sair"=> Encerra o loop')

    elif opcao.upper().strip() == 'ADICIONAR':
        nome_livro = input('Digite o nome do livro: ')
        nome_autor = input('Digite o nome do autor: ')
        numero_pagina = int(input('Digite a pagina que você está: '))
        numero_total = int(input('Digite o numero total de paginas: '))
        cursor.execute('INSERT INTO dados (nome_livro, nome_autor, pagina, pagina_total) VALUES (?,?,?,?)', (nome_livro, nome_autor, numero_pagina, numero_total))
        con.commit()
        con.close()
        
    elif opcao.upper().strip() == 'AVALIAR':
        cursor.execute('SELECT id,nome_livro FROM dados')
        for linha in cursor.fetchall():
            print(linha)
        id_nota = int(input('Digite o numero do livro que deseja'))

    # Opção de saída para terminar o loop
    elif opcao.upper().strip() == "SAIR":
        return True # Finaliza a função

    contador_virtual() # Roda a função novamente caso ela não tenha entrado na condição de saída

contador_virtual() # Chamando função para ser rodada

It is important to note that the Return True will terminate the function at the time it is called (ie will terminate the function without rotating the rest of the lines that compose it) without closing your program as I will talk below.

  • Sys.Exit()

As stated earlier in the comments by Lucas Maraal you can add a sys.Exit() to shut down the program completely.

I will just add a new condition inside the function and import the sys module:

    elif opcao.upper().strip() == "FECHAR":
        import sys # Recomendo importar junto do sqlite3 lá no começo do código
        sys.exit()
  • You can use a loop for

Allows you to run a sequence of lines a limited number of times. (You can receive a command from break to shut it down earlier)

The i within the code can be replaced by anything else fewer numbers and the range(5) indicates how many times you will run the loop.

for i in range(5):
    # Principal
    print('Bem vindo ao seu contador virtual. (help para ajuda)')
    opcao = input('O que deseja? ')

    if opcao.upper().strip() == 'HELP':
        print('Ola, estou aqui para te ajudar sempre que precisar :)')
        print('Suas opções são: ')
        print('"Adicionar"=> para adicionar um novo livro.')
        print('"Avaliar"=> para dar uma nota a um livro.')
        print('"Atualizar"=> para atualizar as informações de algum livro.')
        print('"Remover"=> para apagar os dados de algum livro.')
        print('"Listar"=> para mostrar as informações de todos os livros registrados.')
        print('"Status"=> para mostrar informações sobre um livro especifico.')
        print('"Sair"=> Encerra o loop')

    elif opcao.upper().strip() == 'ADICIONAR':
        nome_livro = input('Digite o nome do livro: ')
        nome_autor = input('Digite o nome do autor: ')
        numero_pagina = int(input('Digite a pagina que você está: '))
        numero_total = int(input('Digite o numero total de paginas: '))
        cursor.execute('INSERT INTO dados (nome_livro, nome_autor, pagina, pagina_total) VALUES (?,?,?,?)', (nome_livro, nome_autor, numero_pagina, numero_total))
        con.commit()
        con.close()
        
    elif opcao.upper().strip() == 'AVALIAR':
        cursor.execute('SELECT id,nome_livro FROM dados')
        for linha in cursor.fetchall():
            print(linha)
        id_nota = int(input('Digite o numero do livro que deseja'))

    # Opção de saída para terminar o loop
    elif opcao.upper().strip() == "SAIR":
        break

Or you can combine the method of function with the loops for e while

  • Using while

It’s an inifito loop this way, but you can add some condition instead of the True to better control how many times he will run the lines within it.

Or you can just put one if right after rotating the function that allows the loop to be broken by placing a break within it.

while True: # Ou alguma outra condição qualquer
    contador_virtual()
  • Using for

I will run the function 5 times here for example:

for i in range(5):
    contador_virtual()

Browser other questions tagged

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