2015-10-14 63 views
-3

我想写一个定义,以便当我输入一个数字时,我想将它分成一个元组内的不同列表。使用Float问题

我可以得到它,因此它可以与一个整数一起工作,但我似乎无法让该函数在数字为float的情况下工作。

到目前为止,我知道:

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

编辑: 我想分(123456)具有([1],[2,3,4,5,6],[]) 除法的输出(123.456 )输出([1],[2,3],[4,5,6])

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

+1

我不知道你想要什么作为输出。也许包含int和float的几个例子? –

+0

@ZoffDino我编辑了我的问题,谢谢! –

+0

你需要处理负数吗?在这种情况下,输出会是什么样子? –

回答

2

我会用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]) 

请注意,这只会工作,为“好”漂浮其字符串表示仅仅是一系列的数字和一个可选的小数点。例如,它不适用于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 
+0

如何使用整数将在最后产生一个空列表,但是当我键入一个浮点数时:例如.235,它会输出([0],[0], [2,3,5])?因为我希望在没有可以进入指定列表的元素时生成空列表。 –

+0

由于.235的字符串表示形式在小数点前有一个零:“0.235”。但它会在我的机器上生成'([0],[],[2,3,5])'',而不是'([0],[0],[2,3,5])''。 – Kevin

+0

我如何获得没有0打印的功能?有没有办法? –