Estoy escribiendo un programa de calculadora simple, y inicialmente se establece una variable de precio. Sin embargo, cuando ingreso una función, borra los datos de mi variable y dice que la variable no está definida a pesar de que está claramente definida anteriormente en el programa.

n = int(input("How many tickets would you like?"))
cls()
if n >= 10:
    print("Your group is large enough for our group discount!")
    price = n * 5
else:
    price = n * 6
def vet():
    vet = input("Are you a veteran of any branch of the United States 
    Military?")

    if vet.lower() in ['y', 'yes']:
        print("Thank you for your service. Your discount has been applied.")
        price *= 0.90

Por supuesto, hay más código después y antes de esto, pero parece que ingresar esta función es lo que hace que se borre el valor de mi variable. Siento que hay una respuesta obvia que me falta, cualquier ayuda sería apreciada.

-1
eWaste Gaming 16 oct. 2018 a las 17:24

2 respuestas

La mejor respuesta

Solo para que mi comentario anterior sea claro, esta es la forma de manejar el problema que ha encontrado. Explícitamente pasa el precio y luego lo devuelve, en lugar de depender de una variable fuera del alcance.

n = int(input("How many tickets would you like?"))
cls()
if n >= 10:
    print("Your group is large enough for our group discount!")
    price = n * 5
else:
    price = n * 6

def ask_vet(price):
    is_vet = input("Are you a veteran of any branch of the United States Military?")
    if is_vet.lower() in ['y', 'yes']:
        print("Thank you for your service. Your discount has been applied.")
        price *= 0.90
    return price
price = ask_vet(price)
2
CJR 16 oct. 2018 a las 14:32

Si declara el precio como una variable global, funcionará. Avísame si tienes algún problema.

n = int(input("How many tickets would you like? "))
if n >= 10:
    print("Your group is large enough for our group discount!")
    price = n * 5
else:
    price = n * 6
def vet():
    global price
    vet = input("Are you a veteran of any branch of the United States 
    Military? ")

    if vet.lower() in ['y', 'yes']:
        print("Thank you for your service. Your discount has been applied.")
        price *= 0.90
-1
BestFails 16 oct. 2018 a las 14:47