【发布时间】:2017-02-18 03:44:37
【问题描述】:
我的教授希望我创建一个函数,该函数返回字符串中数字的总和,但不使用任何列表或列表方法。
函数运行时应该是这样的:
>>> sum_numbers('34 3 542 11')
590
当使用列表和列表方法时,通常这样的函数很容易创建。但是试图在不使用它们的情况下这样做是一场噩梦。
我尝试了以下代码,但它们不起作用:
>>> def sum_numbers(s):
for i in range(len(s)):
int(i)
total = s[i] + s[i]
return total
>>> sum_numbers('1 2 3')
'11'
我没有将 1、2 和 3 全部转换为整数并相加,而是得到字符串 '11'。也就是说,字符串中的数字还没有转化为整数。
我也尝试使用map() 函数,但我得到了相同的结果:
>>> def sum_numbers(s):
for i in range(len(s)):
map(int, s[i])
total = s[i] + s[i]
return total
>>> sum_numbers('1 2 3')
'11'
【问题讨论】:
-
当您说“不使用任何列表或列表方法”时,这是否包括
"1 2 3".split()之类的内容? (技术上str.split()创建一个列表,但您不必显式存储它。) -
差不多。我将 split() 用于允许它的不同问题。在作业表上明确写着“要求:不要使用列表”。
-
我提供了一个答案(我认为它可以解决您的所有问题!)。但我想评论一下您对
map的使用。map接受一个函数和一个可迭代对象(如列表)并返回一个列表,其中列表的每个元素都应用了函数。想象一个函数def add_one(x): return x + 1,然后执行map(add_one, [1, 2, 3])将返回[2, 3, 4]。 -
@PierceDarragh,在 Python3 中,
map()不会像range()那样返回列表——为什么要选择它?我同意使用map()不符合练习的精神,但话说回来,我对range()、sum()和re.finditer()也有这种感觉! -
@cdlane 我很困惑......我不是在谈论
map是否类似于列表。 OP 的示例尝试在单个字符上使用map......这是行不通的。所以我解释了map的工作原理,因为在我看来 OP 并不真正知道如何使用它。
标签: python string python-3.x for-loop