Calling the second function in a "while" loop - python

I'm on my early python self learning path and somehow I can't get the code to execute def cadastro() whenever 1 is imputed.
Can you please assist.
Valuable contributions have been shared with me on this forum which I'm greatly appreciative of, however I remain stuck with this code.
lista_de_usuarios = {}
print ('BEM VINDO AO BCI')
print("PARA CADASTRO PRESSIONE 1 E 2 PARA LOGIN")
while True:
opcao_1 = input()
if opcao_1 == '':
print ('NADA FOI SELECIONADO, ADEUS')
break
elif opcao_1 == 2:
acesso()
elif opcao_1 == 1:
cadastro()
def acesso():
print ('Insira o seu usuário')
user = input()
print ('insira a sua palávra chave')
password = input()
if user in lista_de_usuarios:
if lista_de_usuarios[user] == password:
print ('ACESSO LIVRE')
else:
print ('A senha digitada está incorrecta')
else:
print('Este usuário não consta em nossa base de dados')
acesso()
def cadastro():
print ('Insira o seu nome')
nome = input()
print ('insira a sua idade')
idade = input()
lista_de_usuarios[nome]=idade
cadastro()

You forgot to add " before your numbers. Because you asked for user input and added str(), they can only output a string.
elif opcao_1 == "1":
acesso()
elif opcao_1 == "2":
cadastro()

It is because the input type is a string and not a number, so your elif statement will never return true even if 1 or 2 is typed. Instead they should be:
elif opcao_1 == '1':
acesso()
elif opcao_1 == '2':
cadastro()

Blockquote
lista_de_usuarios = {}
print ('BEM VINDO AO BCI')
def opcoes():
print("PARA CADASTRO PRESSIONE 1 E 2 PARA LOGIN")
opcoes()
def acesso():
print ('Insira o seu usuário')
user = input()
print ('insira a sua palávra chave')
password = input()
if user in lista_de_usuarios:
if lista_de_usuarios[user] == password:
print ('ACESSO LIVRE')
else:
print ('A senha digitada está incorrecta')
else:
print('Este usuário não consta em nossa base de dados')
opcoes()
def cadastro():
print ('Insira o seu nome')
nome = input()
print ('insira a sua idade')
idade = input()
lista_de_usuarios[nome]=idade
print ('ESTA É A LISTA COMPLETA DE USUÁRIO: ',lista_de_usuarios)
while True:
opcao_1 = int(input())
if opcao_1 == '':
print ('NADA FOI SELECIONADO, ADEUS')
break
elif opcao_1 == 2:
acesso()
elif opcao_1 == 1:
cadastro()
Blockquote

Related

I wanted to print this tuple in a single line

I was making a small program to exemplify the wordle game in python but the code below generates an output in tuple format (one element per line). Like this:
T
_
E
T
E
the code:
def check_palpite():
palavra_secreta = "Sorte"
tentativas = 6
while tentativas > 0:
palpite = str(input("Faça um palpite de palavra de 5 letras!"))
if palpite == palavra_secreta:
print("Resposta correta")
break
else:
tentativas = tentativas - 1
print(f"Você tem {tentativas} tentativa(s) \n ")
for char, palavra in zip(palavra_secreta, palpite):
if palavra in palavra_secreta and palavra in char:
print(palavra.upper())
elif palavra in palavra_secreta:
print(palavra.lower())
else:
print("_")
if tentativas == 0:
print(f"Fim de jogo a palavra era {palavra_secreta}")
check_palpite()
I need the elements to be generated in a single-line format and not a tuple. Like this:
T_ETE
I believe that to solve this problem the responsible part of the code is this
for char, palavra in zip(palavra_secreta, palpite):
if palavra in palavra_secreta and palavra in char:
You have two approaches, either:
pass a string to the end= parameter of print(), or
append each character to a string and print the string after the loop.
Approach 2 is faster because it makes fewer function calls, so I'll use that one. Just create an empty string before the loop, then print that string at the end of the loop. Like this:
def check_palpite():
palavra_secreta = "Sorte"
tentativas = 6
while tentativas > 0:
palpite = str(input("Faça um palpite de palavra de 5 letras! "))
if palpite == palavra_secreta:
print("Resposta correta")
break
tentativas = tentativas - 1
print(f"Você tem {tentativas} tentativa(s) \n ")
string = ""
for char, palavra in zip(palavra_secreta, palpite):
if palavra in palavra_secreta and palavra in char:
string += palavra.upper()
elif palavra in palavra_secreta:
string += palavra.lower()
else:
string += "_"
if tentativas == 0:
print(f"Fim de jogo a palavra era {palavra_secreta}")
print(string)
check_palpite()

need to end the players turn but instead my code keeps repeating itself infinitely (python)

So it basically should stop when tiros get to 3, but instead, when it gets to 3 the code just keeps runnining with no chance to input anything, it just keep writing the output of the results and incrementing infinitely.
here it is the full code
import random
import sys
import time
from os import system, name
num_jogadores = 0
min_jogadores = 2
dados = {"d_verde": {0: "cérebro", 1: "cérebro", 2: "cérebro", 3: "espingarda", 4: "pegada", 5: "pegada"}, "d_amarelo": {0: "cérebro", 1: "cérebro", 2: "espingarda", 3: "espingarda", 4: "pegada", 5: "pegada"}, "d_vermelho": {0: "cérebro", 1: "espingarda", 2: "espingarda", 3: "espingarda", 4: "pegada", 5: "pegada"}}
tiros = 0
cerebros = 0
#função para limpar o console
def limpar_tela():
if name == 'nt':
_ = system('cls')
#função para sortear a cor do dado
def cor_seletor():
cor = random.randrange(13)
if cor < 6:
return "verde"
elif cor >= 6 and cor < 10:
return "amarelo"
elif cor >= 10 and cor < 13:
return "vermelho"
#definir qual lado será escolhido aleatoriamente
def dado_lado():
lado = random.randrange(6)
return lado
def jogar_dados():
dado = cor_seletor()
lado = dado_lado()
if dado == "verde":
return (dado, dados["d_verde"][lado])
elif dado == "amarelo":
return (dado, dados["d_amarelo"][lado])
elif dado == "vermelho":
return (dado, dados["d_vermelho"][lado])
def rodada():
global cerebros
global tiros
j = 0
while j < 3:
cor_dado, resultado = jogar_dados()
if resultado == "cérebro":
cerebros += 1
elif resultado == "espingarda":
tiros += 1
print("A cor do seu dado foi:", cor_dado, ", e a face foi:", resultado,"!")
j += 1
print("Cérebros: ", cerebros, " e Tiros:", tiros)
#menu inicial.
print("Bem-vindos ao ZOMBIE DICE!")
inicio = input("Para começar o jogo digite qualquer coisa para começar ou para sair do jogo digite 'sair'\n")
if inicio.casefold() == "sair":
limpar_tela()
sys.stdout.write("Saindo...")
sys.stdout.flush()
time.sleep(1)
sys.exit()
else:
print("Vamos começar!")
jogar = input("Caso esteja pronto para o jogo, digite s, caso não esteja, digite n: ")
here is the part of the code that keeps repeating after the counter of tiros get past 3
while jogar not in "sn":
print("Sinto muito, sua resposta precisa ser 's' ou 'n' ")
jogar = input("Caso esteja pronto para o jogo, digite 's', caso não esteja, digite 'n': ")
else:
if jogar == "n":
print("Obrigado por jogar!")
while jogar == "s":
rodada()
if tiros < 3:
jogar = input("Você gostaria de rolar novamente? Caso sim, digite 's' caso não 'n': ")
while jogar not in "sn":
print("Sinto muito, sua resposta precisa ser 's' ou 'n'")
jogar = input("Você gostaria de rolar novamente?\n Digite 's' para sim e 'n' para não")
else:
if jogar == "s":
print("Jogando novamente...")
else:
print("Sua vez acabou.")
else:
print("Você tem três espingardas, seu turno acabou.")
play = "n"
As a better practice if you want your loop to iterate three times, it is better to do :
for _ in range(3):
do something
than:
j = 0
while j < 3:
j += 1
you will be less likely to change your variables and have endless loops. Anyway, here your main while loop should end when jogar != "s".
However I don't see any possible way to modify it if tiros > 3 in your code as the last line should probably be:
jogar = "n"
instead of
play = "n"

Python nonsense syntax error, indented blocks

In this code:
k = (input("Pizza vegetariana? (s/n):\n"))
print("Ingredientes:")
if k == 's':
print("1. Pimiento\n2. Tofu")
print("Elija el número de la opción")
elif k == 'n':
print("1. Peperoni\n2. Jamón\n3. Salmón\n")
for x in range(3):
l = int(input("Elija un número de las opciones:\n")
if l == 1:
n ="Peperoni "
elif l == 2:
n ="Jamón "
elif l == 3:
n ="Salmón "
print("Ingredientes elegidos: \n"
+n+"\nMozzarella"+"\nTomate")
else:
print("Tiene que introducir una \"s\" ó \"n\"")
Why does it give me a syntax error?
File "", line 10
if l == 1:
^
SyntaxError: invalid syntax
Because in the previous line you forgot to close the brackets for the int()
l = int(input("Elija un número de las opciones:\n"))
There was an ")" missing in line 9
You're missing a closing bracket on line 9. Also, consistent indentation is very important in python. Make sure you maintain it throughout your code. The corrected code is as follows:
k = (input("Pizza vegetariana? (s/n):\n"))
print("Ingredientes:")
if k == 's':
print("1. Pimiento\n2. Tofu")
print("Elija el número de la opción")
elif k == 'n':
print("1. Peperoni\n2. Jamón\n3. Salmón\n")
for x in range(3):
l = int(input("Elija un número de las opciones:\n"))
if l == 1:
n ="Peperoni "
elif l == 2:
n ="Jamón "
elif l == 3:
n ="Salmón "
print("Ingredientes elegidos: \n"+n+"\nMozzarella"+"\nTomate")
else:
print("Tiene que introducir una \"s\" ó \"n\"")

My Tkinter custom class similar to tkinter messagebox is not working

I'm working on a class of messages is like the module that already exists in the messagebox tkinter, I wanted to do something similar, but when I run the code it stops at the line where the window appears and only runs when all the windows have already been closed. I know i could just use tkinter messagebox, I was just trying to make my own, and want to know if it is possible to make an similar bahavior, because messagebox works the way I intented, but my class is not working.
Edit: Thank you furas and Bryan Oakley, I made it work with your guys help. Thank you very much.
This is the class I'done to show messages:
class Mensageiro(Contrutor):
def __init__(self):
super().__init__()
self.resposta = None
def perguntar_sim_ou_nao(self, titulo='Mensagem de confirmação "sim ou não"', mensagem='Gostaria de continuar?',
bug=True):
if bug:
self.criar_topo(geometria=('500x300', ''), titulo=titulo)
raiz = self.topo
else:
self.criar_raiz(geometria=('500x300', ''), titulo=titulo)
raiz = self.raiz
numero = randint(0, 4)
if numero == 0:
imagem = ImageTk.PhotoImage(Image.open('C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions'
'/Janela/Mensagens/Icones/Aceitar/Aceitar_0.png'))
elif numero == 1:
imagem = ImageTk.PhotoImage(Image.open('C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions'
'/Janela/Mensagens/Icones/Aceitar/Aceitar_1.png'))
elif numero == 2:
imagem = ImageTk.PhotoImage(Image.open('C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions'
'/Janela/Mensagens/Icones/Aceitar/Aceitar_2.png'))
elif numero == 3:
imagem = ImageTk.PhotoImage(Image.open('C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions'
'/Janela/Mensagens/Icones/Aceitar/Aceitar_3.png'))
elif numero == 4:
imagem = ImageTk.PhotoImage(Image.open('C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions'
'/Janela/Mensagens/Icones/Aceitar/Aceitar_4.png'))
else:
imagem = None
if numero == 0:
icone = 'C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions' \
'/Janela/Mensagens/Icones/Aceitar/Aceitar_0.ico'
elif numero == 1:
icone = 'C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions' \
'/Janela/Mensagens/Icones/Aceitar/Aceitar_1.ico'
elif numero == 2:
icone = 'C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions' \
'/Janela/Mensagens/Icones/Aceitar/Aceitar_2.ico'
elif numero == 3:
icone = 'C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions' \
'/Janela/Mensagens/Icones/Aceitar/Aceitar_3.ico'
elif numero == 4:
icone = 'C:/Users/marco/PycharmProjects/Curso em Vídeo/MyFunctions' \
'/Janela/Mensagens/Icones/Aceitar/Aceitar_4.ico'
else:
icone = None
raiz.iconbitmap(icone)
self.criar_etiqueta(raiz, imagem=imagem)(self.etiqueta[0], pady=25, padx=5)
self.criar_etiqueta(raiz, texto=mensagem, fonte=('Arial', 12))(self.etiqueta[1],
linha=0,
coluna=1,
pegajoso=NW,
pady=34)
self.usar_botao_turquoise(raiz, 'Sim')(self.botao[0], linha=1, coluna=1, coluna_expan=3, pady=25)
self.usar_botao_turquoise(raiz, 'Não')(self.botao[1], linha=1, coluna=3, coluna_expan=3, pady=25)
raiz.mainloop()
return self.resposta
def comando_clique_diferente(self, comando):
self.resposta = comando
if self.topo:
self.topo.destroy()
elif self.raiz:
self.raiz.destroy()
if __name__ == '__main__':
def ok():
mens = Mensageiro().perguntar_sim_ou_nao() # only execute this line
print(mens) # this line and after only gets executed after tkinter main window is closed
if mens:
App.raiz.after(100, ok)
from MyFunctions.Janela import *
App = Contrutor()
App.criar_raiz(geometria=('700x500', '+400+200'), titulo='Ambiente de Testes')
App.criar_etiqueta(App.raiz, texto='Digite o seu nome: ')(App.etiqueta[0], linha=0, coluna=0)
App.criar_entrada(App.raiz)(App.entrada[0], linha=0, coluna=1)
App.raiz.after(100, ok)
App.raiz.mainloop()

Why i cant use this python application?

Well, i made this as my first application. But now, i want to use it, and when i select an option, i does not work
def empezar():
print ("Desea hacer bhaskara, forma polinomica a canonica, forma canonica a polinomica?")
print ("(0=bhaskara, 1=canonica1, 2=canonica2, 3= canonica a polinomica)")
print ("Recordar, que 1 es igual a una x")
empezar = (input("Eleccion: "))
if empezar == 3:
poaca()
elif empezar == 2:
canonica2()
elif empezar == 1:
canonica1()
elif empezar == 0:
inputs()
#Correr codigo
empezar()
Every function is defined and when i send a number, the code just get closed. But it does not have any errors and i was running before.
Here is fixed code:
def empezar():
print ("Desea hacer bhaskara, forma polinomica a canonica, forma canonica a polinomica?")
print ("(0=bhaskara, 1=canonica1, 2=canonica2, 3= canonica a polinomica)")
print ("Recordar, que 1 es igual a una x")
empezar = (int(input("Eleccion: ")))
if empezar == 3:
poaca()
elif empezar == 2:
canonica2()
elif empezar == 1:
canonica1()
elif empezar == 0:
inputs()
#Correr codigo
empezar()
I simply cast the value input() to an integer value and it is working just fine for me.
Note: don't forget to implement the functions you are calling after checking the input
I suggest you use different name for variable from the function name.
Also, please check all your functions and make sure they have a return or print inside.
You could include those functions in your post.
def empezar():
print ("Desea hacer bhaskara, forma polinomica a canonica, forma canonica a polinomica?")
print ("(0=bhaskara, 1=canonica1, 2=canonica2, 3= canonica a polinomica)")
print ("Recordar, que 1 es igual a una x")
empezar_input = (input("Eleccion: "))
if empezar_input == 3:
poaca()
elif empezar_input == 2:
canonica2()
elif empezar_input == 1:
canonica1()
elif empezar_input == 0:
inputs()
#Correr codigo
empezar()

Categories

Resources