从input()解压缩多个浮点数

时间:2014-03-25 17:10:55

标签: python python-3.x

这是我需要的: 用户输入4个逗号分隔的浮点值,我将用它来创建我的矩形类。

这是我目前的做法:

1)输入用户输入()

2)将输入分割()到列表中
3)将其打包成变量

4)将这些变量(字符串)转换为浮点数

此时我收到错误,因为逗号没有从字符串值中分离出来,因此尝试转换为float会产生类型错误。我可以通过为每个循环单独遍历每个值并对其进行格式化来解决这个问题,但这不必要地复杂。我的问题是,我怎样才能以更清洁,更简单的方式做到这一点?

def main():

    x1,y1,width1,height1 = input("Enter x1, y1, width1, height1: ").split()

    x1,y1,width1,height1 = float(x1),float(y1),float(width1),float(height1)

    r1 = Rectangle2D(x1,y1,width1,height1)

    x2,y2,width2,height2 = input("Enter x2, y2, width2, height2: ").split()
    x2,y2,width2,height2 = float(x2),float(y2),float(width2),float(height2)
    r2 = Rectangle2D(x2,y2,width2,height2)

class Rectangle2D:

    def __init__(self, x = 0.0, y = 0.0, width = 0.0, height = 0.0):
        self.x = x
        self.y = y
        self.width = width
        self.height = height

编辑: 样品运行:

Enter x1, y1, width1, height1: 9, 1.3, 10, 35.3
Traceback (most recent call last):
  File "C:\Users\Lisa Dueker\Desktop\comp sci\week 9\HW\8.19.py", line 127, in <module>
    main()
  File "C:\Users\Lisa Dueker\Desktop\comp sci\week 9\HW\8.19.py", line 4, in main
    x1,y1,width1,height1 = float(x1),float(y1),float(width1),float(height1)
ValueError: could not convert string to float: '9,'

EDIT2:美化

3 个答案:

答案 0 :(得分:4)

嗯,你可以在没有任何中间变量的情况下做到这一点:

r = Rectangle(*map(float, input('enter stuff').split(',')))

或者,如果您愿意,

r = Rectangle(*[float(x) for x in input('enter stuff').split(',')])

这将unpack the argument list对象中的*运算符(也称为splat运算符)用于Rectangle对象。

答案 1 :(得分:2)

您可以按逗号分隔","

x1, y1, width1, height1 = input("Enter x1, y1, width1, height1: ").split(",")

答案 2 :(得分:1)

假设您使用的是Python 3:

try: 
    x, y, w, h = map(float, input("Enter x1, y1, width1, height1: ").split(',')[:4])
    rect = Rectangle2D(x, y, w, h)
except ValueError:
    print "Wrong values"