我想更改循环,以便用户可以输入十进制深度。奇怪的是当我用直整数运行它时,程序运行正常。但是,如果我尝试输入一个十进制深度我收到此错误消息: “UnboundLocalError:在赋值之前引用的局部变量'area'
总之,我是否可以收到有关如何更改循环以允许非整数的提示?我看到了关于xrange的一些事情,但这让我很困惑。有人可以解释我如何根据用户的输入获得参考错误吗?
由于
width = float(input("In inches, what is the width: "))
length = float(float(input("In inches, what is the length: ")))
depth = int(float(input("In inches, what is the depth: ")))
for i in range(depth):
area = 6*(length*width)
volume = length * width * depth
print ("The area is: ", area, "square inches")
print ("The volume is: ", volume, "cubic inches")
答案 0 :(得分:2)
您的UnboundLocalError
是因为depth
为零。由于循环体没有运行,因此不会分配区域和体积。看起来你根本不需要一个循环,所以你可以在开始时删除for
的行,然后取消接下来的两行,你就可以全部设置。
xrange
来自3之前的Python版本。如果您发现自己使用其中之一,请在x
前放置range
,并且您将拥有语义你已经习惯了。
答案 1 :(得分:2)
如果你需要十进制深度,你可以直接写
depth = float(input("In inches, what is the depth: "))
并摆脱for
循环
答案 2 :(得分:0)
要解决您的问题,您必须在循环中使用它之前声明area
。
要解决代码中更严重的问题,您应该完全删除for
循环:
width = float(input("In inches, what is the width: "))
length = float(float(input("In inches, what is the length: ")))
depth = int(float(input("In inches, what is the depth: "))) # why are you casting this variable as both an int and a float?
area = 6*(length*width)
volume = length * width * depth
print ("The area is: ", area, "square inches")
print ("The volume is: ", volume, "cubic inches")
for
循环旨在迭代迭代(列表,字典等)并对iterable中的每个项执行操作。或者它可以与range
一起使用以执行一定次数的操作。在您的情况下,如果您希望用户输入深度的上限,则执行for i in range(depth)
将非常有用,这样他们就可以看到所有整数的区域/体积。
例如,如果他们正在设计水族箱并且需要最小体积但可以超过一定体积,那么您的功能将能够帮助他们了解哪种深度符合要求。然而,我想你想要的只是计算面积/体积一次,所以根本不需要循环。
现在,对于转换变量,这是从内到外读取的。因此,您正在使用input
string
,将其转换为float
(这是您想要的),然后将其转换为int
,它将会丢弃最后的十进制值。将它保持为浮点数:
depth = float(input(blah...))
。