首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3:字典Values+Keys的联接方法

Python3:字典Values+Keys的联接方法
EN

Stack Overflow用户
提问于 2014-08-10 23:40:42
回答 4查看 1.8K关注 0票数 1

我有一个名为factors()的函数,它返回一个字典,以便这些值是主要因素,并且值-它们的次数-显示为因素,例如:

代码语言:javascript
复制
factors(100)

将导致:

代码语言:javascript
复制
{2: 2, 5: 2}

这是因为2**2 + 5**2 = 100

好的。所以现在我想让脚本精确地打印出来:100 = 2**2 + 5**2

最后,我尝试了这一行代码:

代码语言:javascript
复制
print('So ' + str(x) + ' = ' + **' + '.join(str(key) + '**' + factors.get(key) for key in factors)**)

以下是代码:

代码语言:javascript
复制
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))

谢谢大家。

编辑:当我运行它,它给我‘返回因素’没有问题,但没有线索的最后打印行,它没有打印任何东西。

对不起,如果格式不好,我是新来的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-10 23:45:54

台词:

代码语言:javascript
复制
return factors
print('So ' + str(x) + ' = ' + ' + '.join(str(key) + '**' + factors.get(key) for key in factors))

意味着print语句永远不会执行,因为return结束了该函数。扭转这两种情况:

代码语言:javascript
复制
print('So ' + str(x) + ' = ' + ' + '.join(str(key) + '**' + factors.get(key) for key in factors))
return factors

你应该更接近正轨。

票数 0
EN

Stack Overflow用户

发布于 2014-08-10 23:45:45

代码语言:javascript
复制
>>> fact={2: 2, 5: 2}
>>> ' + '.join(['{}**{}'.format(*t) for t in sorted(fact.items())])
'2**2 + 5**2'

然而,这并不是100的主要因素。正确的答案是:

代码语言:javascript
复制
>>> ' * '.join(['{}**{}'.format(*t) for t in sorted(fact.items())])
'2**2 * 5**2'   

(乘而不加)

您可以使用星图reduce轻松地检查它。

代码语言:javascript
复制
>>> from itertools import starmap
>>> from functools import reduce
>>> reduce(lambda x, y: x*y, starmap(pow, fact.items()))
100
票数 0
EN

Stack Overflow用户

发布于 2014-08-10 23:51:30

我认为您的问题(一旦您正确地格式化代码,并将print移动到return之前使其实际运行)要么是这样的:

代码语言:javascript
复制
TypeError: Can't convert 'int' object to str implicitly

…或者是关于+的另一个+,它不知道如何处理intstr

原因是,在您的join中,您要这样做:

代码语言:javascript
复制
str(key) + '**' + factors.get(key) for key in factors

注意,您做了str(key),但是没有做str(factors.get(key))。所以,与其连接三个字符串,不如将两个字符串和一个int连接起来。

这可能是很难得到正确的,或至少很难找出你哪里错了。这是字符串格式比尝试连接字符串更好的原因之一:

代码语言:javascript
复制
'{}**{}'.format(key, factors.get(key))

format方法会自动将所有内容转换为str,这样您就不必知道它在哪里,也不需要知道它在哪里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25234076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档