您不了解变量范围或类型。这就是问题所在。(这其实不是什么问题,因为你在学习。)
期望什么
这个问题需要您提供一个接受一个数字并返回一个数字的函数digit_sum。在本例中,它将接受434,并返回{}。也就是说,digit_sum(434)=18。在
你在干什么
从键盘上阅读(raw_input)和打印(print)与问题无关。在
如果我们删除了您的解决方案中的非功能部分,我们将:def digit_sum(n):
for i in lst:
b = int(i)
userNumbers.append(b)
numsum = sum(userNumbers)
return numsum
当我们试图提交此文件时,一些问题变得显而易见:lst未定义。在
userNumbers未定义。在
您需要一个字符串(str),而不是数字(int)
解决问题我们必须将userNumbers和lst的定义移动到
函数digit_sum。如果它们被设置在“顶级”级别,它们就是
每次调用函数时都不会重置,这就是codeadmy的原因
没有得到正确答案。在
他们用来检查你的代码是这样的:
^{pr2}$
它们有许多这样的调用,并且每个后续调用都不会改变
lst或{}的值。
这掩盖了另一个错误:digit_sum函数接受字符串。也就是说,将其调用为digit_sum(434)(Codecademy所做的)将导致错误,因为您实际上希望它被称为digit_sum("434")。在
可能的解决办法
以下功能基于您的,但根据上述建议进行了更改:def digit_sum(n):
lst = list(str(n))
userNumbers = []
for i in lst:
b = int(i)
userNumbers.append(b)
numsum = sum(userNumbers)
return numsum
你会注意到其他东西不见了:我们可以把它重新加进去,但这是不必要的。您可能希望在开发时使用以下方法进行测试:def digit_sum(n):
lst = list(str(n))
userNumbers = []
for i in lst:
b = int(i)
userNumbers.append(b)
numsum = sum(userNumbers)
return numsum
print "digit_sum(%s) = %s" % (434, digit_sum(434))
print "digit_sum(%s) = %s" % (123, digit_sum(123))
print "digit_sum(%s) = %s" % (555, digit_sum(555))
print "digit_sum(%s) = %s" % (18, digit_sum(18))
print "digit_sum(%s) = %s" % (1001, digit_sum(1001))
运行它时,会产生:digit_sum(434) = 11
digit_sum(123) = 6
digit_sum(555) = 15
digit_sum(18) = 9
digit_sum(1001) = 2
好消息是这些结果都是正确的,所以你有了一个好的开始!你会很快学会的一件事是,在编程中,小而乏味的细节有时非常重要。在
一张小纸条
这并不总是容易或明显的。所谓的专家从零开始,既要学习也要犯错。别灰心!有许多完全不同的概念,你必须理解这些概念才能百分之百地知道发生了什么。没有人能一次得到所有的东西。在
我尊重你努力学习和成长,以及你愿意提出问题的事实。这并非易事,但当你试图理解所有这些时,你的大脑可能会有一点灼伤,这就是学习的感觉。拥抱它!问问题!在
祝你学习顺利!在
其他资源如果可以的话,我推荐Zed Shaw的
优质,免费补充您的学习之旅。太棒了!在
我还发现Udacity's Free Online Courses是一个
丰富的资源可以学习很多不同的东西。具体来说,他们的“入门级”CS课程是用Python编写的,值得花时间学习。在
再次祝你好运。在