我定义了函数'actualizar_contadores()',当在main()函数中调用该函数时,它可以更新在脚本开头定义的所有变量的值。首先,我没有将实际变量作为参数传递给函数,但是导致了“分配前引用的局部变量”错误。然后我将引用作为参数传递,这个问题消失了,但是当我想查看结果时,它们并没有更新。我尝试返回一个元组并将其分配给变量以更新其值,但是它都不起作用,并且在赋值错误之前,我再次引用了局部变量。我该怎么办?
cant_motos = cant_autos = cant_camiones = 0
recaudacion_total = recaudacion_efectivo = recaudacion_telepeaje = 0
pasadas_primera_hora = pasadas_segunda_hora = pasadas_tercera_hora = pasadas_cuarta_hora = 0
cont_efectivo = cont_telepeaje = 0
patente_actual = ""
patente_nueva = ""
def actualizar_contadores(vehiculo, forma_de_pago, cant_motos,
cant_autos, cant_camiones,recaudacion_efectivo,
recaudacion_telepeaje,cont_efectivo,cont_telepeaje):
if vehiculo == "Moto":
cant_motos += 1
if forma_de_pago == 1:
recaudacion_efectivo += 20
cont_efectivo += 1
elif forma_de_pago== 2:
recaudacion_telepeaje += 20
cont_telepeaje += 1
elif vehiculo == "Auto":
cant_autos += 1
if forma_de_pago == 1:
recaudacion_efectivo += 40
cont_efectivo += 1
elif forma_de_pago == 2:
recaudacion_telepeaje += 40
cont_telepeaje += 1
elif vehiculo == "Camion":
cant_camiones += 1
if forma_de_pago == 1:
recaudacion_efectivo += 80
cont_efectivo += 1
elif forma_de_pago == 2:
recaudacion_telepeaje += 80
cont_telepeaje += 1
def main():
# menu principal
opcion = pedir_opcion(menu_principal, 4)
while opcion != 4:
while opcion != 3:
if opcion == 1:
carga = pedir_opcion(menu_ingreso_datos, 2)
print("Ingrese la siguiente operacion: ")
opcion = pedir_opcion(menu_principal, 4)
elif opcion == 2:
if carga == 1:
diferencia = 0
tiempo_inicial = time.time()
while diferencia < 32:
contar_pasadas(diferencia, pasadas_primera_hora,
pasadas_segunda_hora,
pasadas_tercera_hora,
pasadas_cuarta_hora)
tipo_vehiculo = pedir_opcion(menu_vehiculos, 3)
if tipo_vehiculo == 1:
vehiculo = "Moto"
elif tipo_vehiculo == 2:
vehiculo = "Auto"
elif tipo_vehiculo == 3:
vehiculo = "Camion"
forma_de_pago = pedir_opcion(menu_forma_de_pago, 2)
if forma_de_pago == 2:
patente = pedir_patente()
patente_nueva = definir_patente_nueva(patente)
actualizar_contadores(vehiculo, forma_de_pago, cant_motos,
cant_autos, cant_camiones, cont_efectivo,
cont_telepeaje, recaudacion_efectivo,
recaudacion_telepeaje)
tiempo_final = time.time()
diferencia = tiempo_final - tiempo_inicial
elif carga == 2:
vehiculos = "Moto", "Auto", "Camion"
formas_de_pago = "Efectivo", "Telepeaje"
diferencia = 0
tiempo_inicial = time.time()
while diferencia < 4:
contar_pasadas(diferencia, pasadas_primera_hora,
pasadas_segunda_hora,
pasadas_tercera_hora,
pasadas_cuarta_hora)
vehiculo = random.choice(vehiculos)
forma_de_pago = random.choice(formas_de_pago)
aviso_pasada = "{}. Pago con {}. Hora de pasada: {}.".format(vehiculo,
forma_de_pago,
str((round(diferencia / 60) + 1)))
if forma_de_pago == "Telepeaje":
patente = generar_patente()
aviso_pasada += "Patente: {}".format(patente)
patente_nueva = definir_patente_nueva(patente)
print(aviso_pasada)
actualizar_contadores(vehiculo, forma_de_pago, cant_motos,
cant_autos, cant_camiones, cont_efectivo,
cont_telepeaje, recaudacion_efectivo,
recaudacion_telepeaje)
tiempo_final = time.time()
diferencia = tiempo_final - tiempo_inicial
time.sleep(random.randint(0,1))
pago_mayor_uso = forma_de_pago_mas_usada(cont_telepeaje, cont_efectivo)
promedio_pasadas_por_hora = round((cant_autos + cant_motos + cant_camiones) / 4, 2)
hora_pico = definir_hora_pico(pasadas_primera_hora,
pasadas_segunda_hora,
pasadas_tercera_hora,
pasadas_cuarta_hora)
recaudacion_total = recaudacion_efectivo + recaudacion_telepeaje
pases_totales = cant_motos + cant_autos + cant_camiones
print("Ingrese la siguiente operacion: ")
opcion = pedir_opcion(menu_principal, 4)
main()```
答案 0 :(得分:0)
您不应通过参数将全局变量传递给函数。使用全局关键字。 这是一个示例:
x = 10
y = 20
def myFunc():
global x
x = 3
y = 2
myFunc()
print(x, y) # output: 3 20