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