• 变量引用的错误:UnboundLocalError: local variable 'range' referenced before assignment


    class Battery():
        """一次模拟电瓶汽车的简单尝试"""
        def __init__(self,battery_size = 60):
            """初始化电瓶的属性"""
            self.battery_size = battery_size
    
        def describe_battery(self):
            """打印一条描述电瓶容量的信息"""
            print("This car has a " + str(self.battery_size) + "kWH battery.")
    
        def get_range(self):
            """打印一条描述电瓶续航的消息"""
    
            if self.battery_size == 70:
                range = 240
            elif self.battery_size == 85:
                range = 270
    
            message = "This car can go approximately " + str(range)
            message += "miles on a full charge."
            print(message)

     进行代码运行时,会提示“UnboundLocalError: local variable 'range' referenced before assignment”错误。

    意思是局部变量错误:局部变量‘range’在引用前赋值。

    我们看到在class Battery()这个类下,battery_size的属性被赋值为60

    然后在get_range()函数中,做了一个条件判断,如果battery_size等于70或者85 后将range赋值。并打印出对应信息。

    可事实是,battery_size已经被提前赋值,不会改变,所以条件判断不成立,从而引发错误。

    可以将代码改的灵活一点:

    使用input交互,让选择指定的数,然后将选择的battery size后,对range赋值不同的值。

    class Battery():
        """一次模拟电瓶汽车的简单尝试"""
        def __init__(self,battery_size = 60):
            """初始化电瓶的属性"""
    
            battery_size = int(input("Please input battery size,60&70&85?:"))
            self.battery_size = battery_size
        def get_range(self):
            """打印一条描述电瓶续航的消息"""
    
            if self.battery_size == 60:
                range = 240
            elif self.battery_size == 70:
                range = 270
            else:
                range = 350

    但是这样的代码还是存在问题,比如我输入指定3个数以外还是会报错。

    其实一开始的第一个想法是将range添加到作用域中:

    class Battery():
        """一次模拟电瓶汽车的简单尝试"""
        def __init__(self,battery_size = 60,range = 200):
            """初始化电瓶的属性"""
    
            #battery_size = int(input("Please input battery size,60&70&85?:"))
            self.battery_size = battery_size
            self.range = range

    但是执行代码仍然有错,报错和之前一致,局部变量已被赋值。

        message = "This car can go approximately " + str(range)
    UnboundLocalError: local variable 'range' referenced before assignment
    

    那么说明属性range并没有在实例中发挥作用。if条件语句也不会改变range的值,因为判断的条件不满足。

    开始思路2:

     将range定义一个变量,并在作为局部变量放在get_range函数。这样运行是没有问题,但是,里程数只根据range的变量值改变,那么if条件语句也就失去了意义。

     1     def describe_battery(self):
     2         """打印一条描述电瓶容量的信息"""
     3         print("This car has a " + str(self.battery_size) + "kWH battery.")
     4 
     5     def get_range(self):
     6         """打印一条描述电瓶续航的消息"""
     7 
     8         range = 152
     9 
    10         if self.battery_size == 50:
    11             range = 240
    12         elif self.battery_size == 70:
    13             range = 270
    14 
    15 
    16         message = "This car can go approximately " + str(range)
    17         message += "miles on a full charge."
    18         print(message)

    后续的思路是,让用户给出battery_size的值,根据这个值,计算能够运行的里程数。

    假设50kWH可以跑240miles(1miles = 1 609米),那么约为386KM,那么1kWH可以跑7KM,来试试怎么写?

  • 相关阅读:
    集合在耗时程序中流遍历、迭代遍历的效率测量对比
    花生壳内网穿透图文教程
    Vue 页面传参方式 Query 和 Params
    代码注释规范-IDEA 配置 Java 类方法注释模板
    策略模式
    RabbitMQ 在 Win10 环境下的安装与配置
    钉钉机器人SDK 封装预警消息发送工具
    [图文教程] 使用Git 提交项目到码云
    Spring 定时任务Scheduled 开发详细图文
    ORM:Chloe
  • 原文地址:https://www.cnblogs.com/aszeno/p/11168641.html
一二三 - 开发者的网上家园