使用浮动问题

Using Float questions

我想写一个定义,这样当我输入一个数字时,我想把它分成一个元组内的不同列表。

我可以让它与整数一起工作,但是当数字是浮点数时我似乎无法让函数工作。

到目前为止我知道:

First=[]
Second=[]
Third=[]

First.append([int(i) for i in str(number)][0])
Second.append([int(i) for i in str(number)][1:])

第三个元组我希望小数点后的任何数字都在第三个=[] 中。

def divide(numbers):

然后最后我知道我会 打印((第一,第二,第三)

我真的很不会写函数,所以任何关于如何形成函数的帮助将不胜感激。我正在使用 Python.

编辑: 我希望 divide(123456) 的输出为 ([1], [2, 3, 4, 5, 6], []) divide(123.456) 得到 ([1], [2, 3], [4, 5, 6])

的输出

较大数字中的第一个数字将始终进入它自己的列表,然后是另一个列表及其后面的任何内容(但在小数点之前),然后是我想要的最后一个列表后面的内容小数点。一个元组中应该始终包含三个列表。

我会使用 partition 将数字分成整数和小数部分。这甚至适用于没有小数点的数字。然后您可以使用您当前的代码,基本不变,并以类似于第二个的方式生成您的第三个列表。

def divide(x):
    left, _, right = str(x).partition(".")
    first = [int(left[0])]
    second = [int(i) for i in left[1:]]
    third = [int(i) for i in right]
    return first, second, third

print divide(123456)
print divide(123.456)

结果:

([1], [2, 3, 4, 5, 6], [])
([1], [2, 3], [4, 5, 6])

请注意,这仅适用于 "nice" 浮点数,其字符串表示形式只是一系列数字和一个可选的小数点。例如,它不适用于 float("inf")5e301.


编辑:对于没有整数部分的负数和浮点数,您可以使用一些额外的特殊外壳。

def divide(x):
    if x < 0: 
        x = -x
    left, _, right = str(x).partition(".")
    first = [int(left[0])]
    second = [int(i) for i in left[1:]]
    third = [int(i) for i in right]
    if first == [0] and third:
        first = []
    return first, second, third