zoukankan      html  css  js  c++  java
  • 变量引用的错误: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,来试试怎么写?

  • 相关阅读:
    IIS 添加二级应用程序
    VS中发布并调试IIS程序
    未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
    Flash基础开发习惯指要
    2012云计算扫盲
    flash问题集锦(新手必看)
    Flash常用ActionScript控制语句基本用法祥解
    通过offset值的设置使html元素对齐
    不用float也可以让div横向显示
    QQ空间里写的开发心得
  • 原文地址:https://www.cnblogs.com/aszeno/p/11168641.html
Copyright © 2011-2022 走看看