Pyschool主题11:问题13

时间:2014-04-17 13:11:37

标签: python python-2.7

我正在通过pyschool学习python,我遇到了解决以下问题的问题。

  

编写一个函数printTwos(n),它接受​​一个数字作为参数和   返回一个由奇数乘以2s组成的字符串   最终值等于n。应该有相同数量的2   双方。额外2应出现在字符串的前面。注意:   奇数的值可以是1.

实施例

>>> printTwos(1)
'1'
>>> printTwos(2)
'2 * 1'
>>> printTwos(10)
'2 * 5'
>>> printTwos(20)
'2 * 5 * 2'
>>> printTwos(30)
'2 * 15'
>>> printTwos(32)
'2 * 2 * 2 * 1 * 2 * 2'
>>> printTwos(80)
'2 * 2 * 5 * 2 * 2'

我相信我有它的工作。

def printTwos(n):
count = 0
if n == 1:
    return '1'

if n == 2:
    return '2 * 1'
while n%2 == 0:
   n = n/2
   count +=1

if count%2 == 0:
    twos = count/2
    myoutput = ('2 * ' * twos, str(n), ' * 2' * twos)
    return ''.join(myoutput)
else:
    twos = count/2
    twofront = twos+1

    myoutput = ('2 * ' * twofront, str(n), ' * 2' * twos)
    return ''.join(myoutput)

1 个答案:

答案 0 :(得分:0)

这有效:

def printTwos(n): 
    if(n%2==1):return str(n)
    else:
        if(n%4==0):return str('2 * ')+ printTwos(n/4) +str(' * 2')
        else: return str('2 * ')+ printTwos(n/2)