编写一个程序以从键盘获取字典并打印值的总和?


d =dict(input('Enter a dictionary'))
sum = 0
for i in d.values():
sum +=i
print(sum)

输出:Enter a dictionary{'a': 100, 'b':200, 'c':300}

这就是问题出现:

Traceback (most recent call last):
File "G:/DurgaSoftPython/smath.py", line 2, in <module>
d =dict(input('Enter a dictionary'))
ValueError: dictionary update sequence element #0 has length 1; 2 is required

不能使用dict构造函数从字符串创建dict,但可以使用ast.literal_eval

from ast import literal_eval
d = literal_eval(input('Enter a dictionary'))
s = 0  #  don't name your variable `sum` (which is a built-in Python function
#  you could've used to solve this problem)
for i in d.values():
s +=i
print(s)

输出:

Enter a dictionary{'a': 100, 'b':200, 'c':300}
600

使用sum

d = literal_eval(input('Enter a dictionary'))
s = sum(d.values())
print(s)
import json
inp = input('Enter a dictionary')
inp = dict(json.loads(inp))
sum = sum(inp.values())
print(sum)

输入字典{"a": 100, "b":200, "c":300}

输出 600

实际上input函数的返回是一个字符串。因此,为了获得有效的pythondict您需要评估输入字符串并将其转换为字典。

一种方法可以使用包中的literal_eval来完成ast。 下面是一个示例:

from ast import literal_eval as le
d = le(input('Enter a dictionary: '))
_sum = 0
for i in d.values():
_sum +=i
print(_sum)

演示:

Enter a dictionary: {'a': 100, 'b':200, 'c':300}
600

PS:另一种方法可以使用eval但不建议这样做。

最新更新