我有一个名为factors()的函数,它返回一个字典,以便这些值是主要因素,并且值-它们的次数-显示为因素,例如:
factors(100)将导致:
{2: 2, 5: 2}这是因为2**2 + 5**2 = 100
好的。所以现在我想让脚本精确地打印出来:100 = 2**2 + 5**2
最后,我尝试了这一行代码:
print('So ' + str(x) + ' = ' + **' + '.join(str(key) + '**' + factors.get(key) for key in factors)**)以下是代码:
def factors(x):
'''
input: int
output: list (prime factors of x list)
'''
num = 2
res = x
factors = {}
howmany = 0
while res > 1:
if res%num == 0:
if num in factors:
factors[num] += 1
else:
factors[num] = 1
res /= num
howmany += 1
print('Found one! <' + str(num) + '>. With these are ' + str(howmany) + ' prime factors for the momment')
print(str(factors))
else:
num += 1
print('DONE!')
return factors
print('So ' + str(x) + ' = ' + ' + '.join(str(key) + '**' + factors.get(key) for key in factors))谢谢大家。
编辑:当我运行它,它给我‘返回因素’没有问题,但没有线索的最后打印行,它没有打印任何东西。
对不起,如果格式不好,我是新来的。
发布于 2014-08-10 23:45:54
台词:
return factors
print('So ' + str(x) + ' = ' + ' + '.join(str(key) + '**' + factors.get(key) for key in factors))意味着print语句永远不会执行,因为return结束了该函数。扭转这两种情况:
print('So ' + str(x) + ' = ' + ' + '.join(str(key) + '**' + factors.get(key) for key in factors))
return factors你应该更接近正轨。
发布于 2014-08-10 23:45:45
>>> fact={2: 2, 5: 2}
>>> ' + '.join(['{}**{}'.format(*t) for t in sorted(fact.items())])
'2**2 + 5**2'然而,这并不是100的主要因素。正确的答案是:
>>> ' * '.join(['{}**{}'.format(*t) for t in sorted(fact.items())])
'2**2 * 5**2' (乘而不加)
>>> from itertools import starmap
>>> from functools import reduce
>>> reduce(lambda x, y: x*y, starmap(pow, fact.items()))
100发布于 2014-08-10 23:51:30
我认为您的问题(一旦您正确地格式化代码,并将print移动到return之前使其实际运行)要么是这样的:
TypeError: Can't convert 'int' object to str implicitly…或者是关于+的另一个+,它不知道如何处理int和str。
原因是,在您的join中,您要这样做:
str(key) + '**' + factors.get(key) for key in factors注意,您做了str(key),但是没有做str(factors.get(key))。所以,与其连接三个字符串,不如将两个字符串和一个int连接起来。
这可能是很难得到正确的,或至少很难找出你哪里错了。这是字符串格式比尝试连接字符串更好的原因之一:
'{}**{}'.format(key, factors.get(key))format方法会自动将所有内容转换为str,这样您就不必知道它在哪里,也不需要知道它在哪里。
https://stackoverflow.com/questions/25234076
复制相似问题