如何优化代码并使代码可读?

时间:2019-09-28 11:27:24

标签: python-3.x

任务是: 用户输入一个数字,您从左边取一个数字,从右边取一个数字并求和。然后,您将获取此数字的其余部分,并对其中的每个数字求和。那么您会得到两个答案。您必须将它们从最大到最小排序,并使其成为一个整数。我解决了,但我不喜欢它的外观。我的意思是任务很简单,但是我的代码看起来像垃圾。也许我应该使用更多内置函数和库。如果是这样,请您告诉我一些吗?谢谢

a = int(input())
b = [int(i) for i in str(a)]
closesum = 0
d = []
e = ""
farsum = b[0] + b[-1]
print(farsum)
b.pop(0)
b.pop(-1)
print(b)
for i in b:
    closesum += i
print(closesum)
d.append(int(closesum))
d.append(int(farsum))
print(d)
for i in sorted(d, reverse = True):
    e += str(i)
print(int(e))
input()

2 个答案:

答案 0 :(得分:0)

您可以使用reduce

from functools import reduce

a = [0,1,2,3,4,5,6,7,8,9]
print(reduce(lambda x, y: x + y, a))
# 45

,您只需传递一个简短的列表即可代替弹出元素:b[1:-1]

前两行:

str_input = input() # input will always read strings
num_list = [int(i) for i in str_input]

最后的for循环是没有用的,不需要对 2个元素进行排序。您只需使用简单的if..else条件即可打印所需的内容。

答案 1 :(得分:0)

您不需要循环即可对列表的一部分求和。您也可以使用join来连接字符串列表而不循环。此实现在排序之前转换为字符串(结果将是相同的)。您可以使用map(str,...)

排序后转换为字符串
farsum = b[0] + b[-1]
closesum = sum(b[1:-2])
"".join(sorted((str(farsum),str(closesum)),reverse=True))