循环不允许浮动

时间:2014-01-24 14:58:58

标签: python loops types

我想更改循环,以便用户可以输入十进制深度。奇怪的是当我用直整数运行它时,程序运行正常。但是,如果我尝试输入一个十进制深度我收到此错误消息: “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")

3 个答案:

答案 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...))

只需要