The ironic frustration with While and Pause on Python - python

Just discovered this forum and it's unbelievable how helpful its community is. Well, I have an issue trying to make a "while" loop on Python. I want the program's menu to repeat until you select Option 6 - Salir (Exit). Everything is fine at first, but after I select an option and the program prints x thing, I press enter to return to the menu or continue (just like when you use a pause on C) and get an error.
Juan es un empleado mexicano comun con poco salario minimo. Que quiere saber de el? MENU
1.Salario
2.Sombrero
3.Playera
4.Pantalones
5.Tenis
6.Salir
Seleccione una opcion 1 El salario de Juan es 7.5
MENU
1.Salario
2.Sombrero
3.Playera
4.Pantalones
5.Tenis
6.Salir
Seleccione una opcion Traceback (most recent call last): File "C:\Users\joguzman\Documents\Proyectos Eclipse\Clases\src\main.py", line 22, in <module>
opcion=int(input("\nSeleccione una opcion\n")) ValueError: invalid literal for int() with base 10: ''
I also want it to clear the screen, which doesn't happen at all. Here's my code:
import os class empleadoClass: #las propiedades que tendra cada empleado
salario=7.5
sombrero='nike'
playera='polo'
pantalones='patito'
tenis='adidas'
juanObject = empleadoClass() #'juanObjeto' esta "heredando" propiedades de empleadoClass
print ("Juan es un empleado mexicano comun con poco salario minimo. Que quiere saber de el?") opcion=1
while (opcion!=6):
print("MENU \n1.Salario \n2.Sombrero \n3.Playera \n4.Pantalones \n5.Tenis \n6.Salir")
opcion=int(input("\nSeleccione una opcion\n"))
if (opcion==1):
print ("El salario de Juan es ",juanObject.salario)
os.system('pause>nul')
os.system('cls')
elif (opcion==2):
print ("La marca del sombrero de Juan es ",juanObject.sombrero)
os.system('pause>nul')
os.system('cls')
elif (opcion==3):
print ("La marca de la playera de Juan es ",juanObject.playera)
os.system('pause>nul')
os.system('cls')
elif (opcion==4):
print ("La marca de los pantalones de Juan es ",juanObject.pantalones)
os.system('pause>nul')
os.system('cls')
elif (opcion==5):
print ("La marca de los tenis de Juan es ",juanObject.tenis)
os.system('pause>nul')
os.system('cls')
elif(opcion==6):
print ("Gracias por usar nuestro programa!")
else:
print ("Ingrese una opcion correcta")
os.system('pause>nul')
os.system('cls')
Thanks in advance! :D And sorry for any grammar mistakes, as you can see I'm not a native english speaker.
EDIT: It seems the code's structure got a messy when posting... Does anyone know how to solve this? :/

I think a simpler way to do a menu like this is to:
def print_menu():
# print stuff here, 6 exits
while True:
print_menu()
try:
choice = int(input('>>'))
if choice == 1:
blah
elif choice == 2:
more blah
elif choice == 6:
break
except ValueError:
handle_error()
As for clearing the screen that depends on what OS you are using and how you are running the program. See this question - how to clear the screen in python

Related

Is there any solution to create a multi option with secondary options menu for whatsapp using twilo and flask?

I trying to make a whatsapp bot which returns a response for specifics messages
#app.route("/sms", methods=['POST'])
def sms_reply():
# Fetch the message
msg = request.form.get('Body').lower()
responded = False
if ("hola" in msg or "buenos" in msg or "buenas" in msg or "info" in msg or "holi" in msg):
reply = "Buenos días bienvenido a Alcanza soy tu asistente virtual, ¿con quien tengo el gusto?"
menu = "Por Favor, selecciona la opcion de tu preferencia: 1 Citas con asesores 2 Informacion de servicios 3 Herramientas de diagnostico 4 Servicio al cliente"
resp = MessagingResponse()
resp.message(reply)
resp.message(menu)
elif ("1" in msg):
reply = "Bienvenido al menu de citas con asesores, por favor selecciona una opcion: 1 Agendar una cita 2 Modificar una existente 3Cancelar una cita 0 Volver al menú principal"
resp = MessagingResponse()
resp.message(reply)
elif ("2" in msg):
reply = "Bienvenido al menu de informacion de servicios, por favor seleciona un servicio para recibir mas informacion: Finanzas personales 1 Asesoría de inversión 2 Webinars y capacitaciones 3 Alcanza 360 0 Volver al menú principal"
resp = MessagingResponse()
resp.message(reply)
elif ("3" in msg):
reply = "Bienvenido al menu de herramientas de diagnostico, por favor seleciona la herramienta que necesitas: 1 Cuestionario de diagnóstico financiero 2 Perfil de deuda 3 Perfil de inversión 4 Costo de tu tiempo 5 Pago de tarjeta de crédito 6 Volver al menú principal"
resp = MessagingResponse()
resp.message(reply)
return str(resp)
So I create this function and when I get the input message "1" from whatsapp the code return me a sub menu, the point is that I want to add another if statement into de principal ifs with more options, for example first input== "1" return (sub menu) and first input == "1" and second input == "1" return (option 1 of the sub menu), I tried too many times and different ifs but the code stops working or ignore the sub ifs

How to add more options without indentation error?

Hello I am editing this code since I want to add a sub menu and a function in each selected option but whenever I add even a print it gives me an error and it is annoying I have tried in every way but the error is constant and annoying
import os
def menu():
"""
Función que limpia la pantalla y muestra nuevamente el menu
"""
os.system('clear') # NOTA para windows tienes que cambiar clear por cls
print ("Selecciona una opción")
print ("\t1 - primera opción")
print ("\t2 - segunda opción")
print ("\t3 - tercera opción")
print ("\t9 - salir")
while True:
# Mostramos el menu
menu()
# solicituamos una opción al usuario
opcionMenu = input("inserta un numero valor >> ")
if opcionMenu=="1":
print ("")
input("Has pulsado la opción 1...\npulsa una tecla para continuar")
elif opcionMenu=="2":
print ("")
input("Has pulsado la opción 2...\npulsa una tecla para continuar")
elif opcionMenu=="3":
print ("")
input("Has pulsado la opción 3...\npulsa una tecla para continuar")
elif opcionMenu=="9":
break
else:
print ("")
input("No has pulsado ninguna opción correcta...\npulsa una tecla para continuar")
for example in the first if
I want to add a sub menu like this
if opcionMenu=="1":
print ("Selecciona una opción")
print ("\t1 - primera opción")
print ("\t2 - segunda opción")
print ("\t3 - tercera opción")
print ("\t9 - salir")
n=input("Has pulsado la opción 1...\npulsa una tecla para continuar")
print(function(n))
if I wanted to do this inside it is useless is possible or some idea

how to access a local variable in another function

chose=random.choice(words)
print(chose)
i=0
while i<chance:#ici nous crayons une boucle qui va nous permettre de repeter une instruction 8 fois
guess=input("\n Devinez une lettre qui peut se trouver dans ce truc.")
print("\n")
final_word=""
point=0
if (guess==chose and i<chance):#si cette instruction st remplie on a gagner
point=chance-(i)
print("Vous vennez de gagner\n")
print(point)
break
elif(guess!=chose):
for character in chose:
if character in guess:
final_word +=character
else:
final_word +="*"
print(final_word)
i+=1
#cette fonction nous aide à mettre sur place le nom et le score du jouer
def login():
user=input("Quel est votre nom ? ")
user=user.capitalize()
print("Bonjour monsieur {} et bienvenu dans le jeu.".format(user))
score={
user:point
}
with open('donee','wb') as db:
my_pickler=pickle.Pickler(db)
my_pickler.dump(score)
up there you can see my code, I want the result of my variable 'point' in the function traitement to be desplayed in the dictionary score;
how can i do that?
You don't. Local variables are by definition exactly that. You could use global values, but that is asking for trouble.
You can easily solve the problem by passing parameters to functions, and returning values from those functions.

How can I do a loop in the loop i want to do a exit when

I want to do a loop in python and how can i do a exit when?
In Turing what I want is
loop
put " Voulez vous jouer au 6-49 si oui entrez 'commencer' et n'oubliez pas qu'une "
put " partie coute 3$ " ..
color (green)
get word
color (black)
%Je clear l'ecrant
cls
put " Chargement en cour."
delay (500)
cls
put " Chargement en cour.."
delay (500)
cls
put " Chargement en cour..."
delay (500)
cls
%Je fais certain que le joueur a ecrit commencer
%Si il entre quelque choses d'autre que commencer le programme ne commence pas il demander de entre le mot commencer
exit when word = "commencer"
end loop
Now I need to do in Python but I don't know how to do that can someone help me out plzzz????
If I understand the semantics of the Turing code,
while True:
...
if word == "commencer":
break

rare exception in tkinter callback error message

I'm working on a code for a school which tells the students how many times they can skip classes. It doesn't work because there is an specific mistake that is always appearing:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/tkinter/__init__.py", line 1533, in __call__
return self.func(*args)
File "/Users.py", line 52, in inicio
for line in improt:
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 25: ordinal not in range(128)
I already tried to import mtTkinter but the program didn't recognize it. The mistake says tkinter is getting the wrong number of args. The line that caused the error was this one:
for line in importar:
lista.append(line)
But that seems like the right number of arguments, so what's going on?
There are also some strange mistakes that keep the program to run well.
Here I put my code so you can see if it works.
from tkinter import*
import math
import tkinter.filedialog
import traceback
import sys
ventana=Tk()
ventana.title("Este programa le dice cuantas veces mas puede faltar de ausencias 1, 2 y 3")
ventana.geometry("1000x1000")
lista=[]
clas=Label(ventana, text="Si tu materia es Tecno, Frances o Edufis, escribela tal cual en el cuadro").place(x=50,y=90)
classe=Entry(ventana)
classe.place(x=50,y=110)
segu=Label(ventana, text="Si tu materia es Español o Actualidad, escribela tal cual en el cuadro").place(x=50,y=140)
segun=Entry(ventana)
segun.place(x=50,y=160)
tercis=Label(ventana, text="Si tu materia es Qui, Math, Ingles o Filosofia, escribela tal cual en el cuadro").place(x=50,y=190)
terce=Entry(ventana)
terce.place(x=50,y=220)
a=Label(ventana, text="¿Cuantas veces ha faltado por ausencias o retardos 1?").place(x=50,y=250)
aa=Entry(ventana)
aa.place(x=50,y=270)
b=Label(ventana, text="¿Cuantas veces ha faltado por ausencias o retardos 2?").place(x=50,y=300)
bb=Entry(ventana)
bb.place(x=50,y=320)
c=Label(ventana, text="¿Cuantas veces ha faltado por ausencias o retardos 3?").place(x=50,y=350)
cc=Entry(ventana)
cc.place(x=50,y=380)
def inicio ():
global lista
global classe
global segu
global tercis
global aa
global bb
global cc
clases=(Entry.get(classe))
materias = filedialog.askopenfilename(filetypes=(("Archivo de texto","*.txt"),("Cualquier archivo","*.*")))
improt = open(materias,"r")
for line in improt:
lista.append(line)
if clases== Tecno:
Tecno= lista(0)
if clases== Frances:
Frances= lista(1)
if clases== Edufis:
Edufis= lista(2)
for i in range (0,2):
total=70
AM= (total*15)/100
A=(Entry.get(aa))
if A<AM:
res= AM-A
print("le quedan ", res, " ausencias o retardos 1")
if A==AM:
print("No puede tener mas ausencias o retardos 1")
if A>AM:
print("Ya se paso del maximo de ausencias o retardos 1")
segunda=(Entry.get(segun))
if segun== Español:
Español= lista(3)
if segun== Actualidad:
Actualidad= lista(4)
for i in range(3,4):
totala=140
BM= (totala*15)/100
B=(Entry.get(bb))
if B<AM:
tes= AM-B
print("le quedan ", tes, " ausencias o retardos 2")
if B==AM:
print("No puede tener mas ausencias o retardos 2")
if B>AM:
print("Ya se paso del maximo de ausencias o retardos 2")
tercera=(Entry.get(terce))
if terce== Qui:
Qui= lista(5)
if terce== Math:
Math= lista(6)
if terce== Ingles:
Ingles= lista(7)
if terce== Filo:
Filo= lista(8)
for i in range (5,8):
totale=175
CM= (totale*15)/100
C=(Entry.get(cc))
if C<BM:
pes= BM-C
print ("le quedan ", pes, " ausencias o retardos 2")
if C==BM:
print ("No puede tener mas ausencias o retardos 2")
if C>BM:
print ("Ya se paso del maximo de ausencias o retardos 2")
improt.close()
escoge = Button(ventana, text = "Escoge un archivo y despues escribe tu materia en el cuadro que corresponda", command = inicio).place(x =45, y = 30)
cierra = Button(ventana, text = "Cierra", command = ventana.destroy).place(x = 50, y = 420)
ventana.mainloop()
It looks like your system default is ASCII
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 25: ordinal not in range(128)
Assuming the language the file is using is Latin-1, try adding
#! /usr/bin/python ## (your shebang may be slightly different)
# -*- coding:latin-1 -*-
## next line after the shebang
## and then
for line.decode('latin-1') in improt:
If you open the file in Firefox and then View > Text Encoding, it should say what the encoding is. There are also websites that will do this. Also, this is a common problem (not a rare exception) so a search for "UnicodeDecodeError: 'ascii' codec can't decode byte" should produce a lot of hits

Categories