【问题标题】:Return variable from function(A) not working in function(B)从函数(A)返回变量在函数(B)中不起作用
【发布时间】:2021-05-15 20:46:50
【问题描述】:

我是编程新手,我正在尝试编写两个函数,它们在它们之间生成一个数字,该数字代表给定人口在给定天气下产生的旅行者数量。这两个函数自己工作,但是当我尝试让第一个函数 (weather_gen) 将其输出馈送到第二个函数 (traveller_gen) 时,我收到以下错误: UnboundLocalError:分配前引用的局部变量“y”。 但是,我知道第一个函数的返回值 x 在第二个函数中,因为 print(x) 命令有效。只有当我要求第二个函数返回 y 时才会出现问题。

import random

season = "summer"
p=100

def weather_gen(season):
        
    weathers = ("snow", "rain", "drizzle", "sun", "gorgeous")
        
    if  season == "spring":
        x = (random.choices(weathers, weights=(10,30,30,20,10), k=1))
    if  season == "summer":
        x = (random.choices(weathers, weights=(0,10,10,50,30), k=1))
    if  season == "autumn":
        x = (random.choices(weathers, weights=(5,20,25,35,10), k=1))
    if  season == "winter":
        x = (random.choices(weathers, weights=(20,25,25,15,5), k=1))
    return x

x = weather_gen(season)     

def traveller_gen(x):
    print(x)    
    if x == "snow":
        t = random.randint(0, 10)
        y = (t/100)*p
    if x == "rain":
        t = random.randint(40, 55)
        y = (t/100)*p 
    if x == "drizzle":
        t = random.randint(50, 75)
        y = (t/100)*p 
    if x == "sun":
        t = random.randint(85, 100)
        y = (t/100)*p 
    if x == "gorgeous":
        t = random.randint(100, 125)
        y = (t/100)*p
    return y
    
traveller_gen(x)

我是否遗漏了一些非常明显的东西? 最好的祝愿, 保存

【问题讨论】:

  • random.choices 返回一个列表。 x 不等于 traveller_gen 中的任何字符串,因为它是一个列表,而不是一个字符串。
  • 感谢您的帮助。我会处理变量名。

标签: python


【解决方案1】:

random.choices 返回一个列表。所以weather_gen 返回一个列表。 x 不等于 traveller_gen 中的任何字符串,因为它是一个列表,而不是字符串。

如果您仍想使用 random.choices 但希望 weather_gen 返回字符串而不是列表,则可以将 return x 更改为 return x[0]

顺便说一句,我相信您可以想出比xy 更具描述性的变量名称。

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2014-08-20
    • 2012-10-23
    • 2016-10-02
    相关资源
    最近更新 更多