因此,我最近学习了johnguttag关于使用Python进行计算和编程的介绍,这是经过修订和扩展的版本,在学习了LPTHW的大部分内容之后。我正在结合麻省理工学院开放式课程006使用这本书。现在,我试图完成书中列出的一个手指练习,特别是第85页第7章中的一个,作者要求您使用try except块实现一个函数:
def sumDigits(s):
"""Assumes s is a string
Returns the sum of the decimal digits in s
For example, if is is'a2b3c' it returns 5"""
这是我的代码:
^{pr2}$当我在空闲状态下使用测试输入运行这个程序时,总的计算结果总是为零,这表明new_list中没有任何元素被传递给累加器。有人能告诉我原因吗?谢谢。在
我正在学习同一本书和有关edX的MITx:6.00.1x课程;我的解决方案是:
因为我们假设s是字符串,except块应该处理s不是字符串的情况。很简单,但一开始我并不清楚。在
你的代码实际上有几个错误。
让我们详细分析一下
主要问题在于:
你应该先直接在字符串上循环
^{pr2}$当您创建一个新列表时,
x for x in list1
中的变量x
将作为列表的元素发生。因此,在您的例子中,列表只有一个元素,它恰好是整个字符串(因为您将列表定义为[s]
)。由于整个字符串不是数字,new_list
将是一个空列表。这就是为什么你得到0作为回报。在
但是,如果直接遍历字符串,
x
将作为字符串中的每个字母发生,然后可以检查x
是否为数字。在同样重要的是要强调}。您应该只对})。另外,为了检查输入是否是字符串,最好使用
new_list[e]
将引发{e
进行更正。for e in new_list
的sintax使局部变量e
假定列表中的每个值都是的,因此不必通过索引获取值:可以直接使用e
。最后,为了对新列表中的值求和,这些值应该是整数(
int
),而不是字符串(str
),因此在求和之前,必须将值强制转换为int
(或者,您可以在列表理解过程中将每个元素强制转换为int
,方法是使用int(x) for x in s if x.isdigit()
,而不是{isinstance(s, basestring)
,如果使用python2,最好使用isinstance(s, str)
,如果使用python3。在所以整个代码应该是这样的:
拉斐尔似乎已经指出了这些错误,但仍需注意的是,更具Python式的方法是:
相关问题 更多 >
编程相关推荐