对于课堂,我正在做其中的一项练习,您必须在头脑中弄清楚为什么程序会产生一定的输出。
def mystery4(s):
# sig: str -> str
i=1
acc = ""
while i < len(s):
if s[i - 1].isdigit():
acc += s[i]
i+=1
return acc
此代码旨在返回完成if语句条件的字符。
我很困惑为什么在以下情况下调用mystery4("s45ag2f37gs88")
会返回5af7g8
isdigit()
仅对仅包含数字的字符串返回True。
答案 0 :(得分:1)
如在多条注释中所述,您正在检查第(i-1)个位置的字符是否为数字,但在第(i)个位置将字符串联在一起。您应注意,使用此命令最多只能检查倒数第二个字符,因此您还必须修改if
条件。要解决此问题,您需要进行2个更正:
def mystery4(s):
i=1
acc = ""
while i <= len(s): #<--- Note <=
if s[i - 1].isdigit():
acc += s[i - 1]
i+=1
return acc
答案 1 :(得分:0)
要添加到上面的答案中,一种更有效的方法是使用for循环,避免必须访问字符位置并可能将它们混合使用,而不必使用字符本身。
def mystery4(s):
acc = ""
for character in s:
if character.isdigit():
acc += character
return acc