- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这里是 Python 新手,请多多包涵...
我正在尝试使用通常写得不好的 Codeacademy Python 教程,其中的练习挑战是:
Write a function called digit_sum that takes a positive integer n as input and returns the sum of all that number's digits.
For example: digit_sum(1234) should return 10 which is 1 + 2 + 3 + 4.
(Assume that the number you are given will always be positive.)
因此,我尝试编写以下代码来解决这个挑战:
userInput = raw_input("Please enter your number string here: ")
n = userInput
lst = list(n)
userNumbers = []
def digit_sum(n):
for i in lst:
b = int(i)
userNumbers.append(b)
numsum = sum(userNumbers)
return numsum
print "This is your total: %s" % digit_sum(n)
在这个练习的控制台中,一切似乎都按预期工作:
请在此处输入您的号码字符串:123这是你的总数:6无
但是,解释器返回此错误(尽管控制台似乎工作正常):
Oops, try again. Your function fails on digit_sum(434). It returns 18 when it should return 11.
到底为什么会返回这个错误?谁能阐明这里发生了什么?
不幸的是,在 Codeacademy 没有人可以提问,您只能发布一个只有其他学生阅读的问题,因此不会在那里获得任何见解。
最佳答案
您不了解变量作用域或类型。那就是问题所在”。 (这不是真正的问题,因为您正在学习。)
该问题希望您提供一个接受数字并返回数字的函数 digit_sum
。在这种情况下,它将接受 434
并返回 18
。也就是说,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
。如果将它们设置在“顶级”级别,则它们是每次调用该函数时都不会重置,这就是 Codecademy 的原因没有得到正确答案。
他们用来检查你的代码是这样的:
if digit_sum(434) != 18:
print "It should have been 18, we got %s" % digit_sum(434)
他们有很多这样的调用,每个后续调用都不会改变lst
或 userNumbers
的值。
digit_sum
函数接受一个字符串。也就是说,调用它(在合并上面#1 的修复之后)作为 Codecademy 所做的 digit_sum(434)
将导致错误,因为您实际上期望它被称为 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
好消息是这些结果都是正确的,所以您有了一个好的开始!您会很快了解到的一件事是,在编程中有时细小乏味的细节非常重要。
这并不总是那么容易或显而易见。所谓的专家是从零开始的,也要学习,也要犯错。不要气馁!您必须了解 很多 不同的概念才能 100% 了解正在发生的事情。没有人能一下子搞定。
我尊重您努力学习和快速成长,以及您愿意提出问题这一事实。这绝非易事,但当你试图理解所有这些时,你的大脑可能会有点烧灼感,这就是学习的感觉。拥抱它!问问题!
祝你学习顺利!
再次祝你好运。
关于Python 函数返回正确的结果但解释器返回奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537142/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!