在某些情况下,isdigit()是否可以返回字母?

时间:2019-04-16 12:22:47

标签: python

对于课堂,我正在做其中的一项练习,您必须在头脑中弄清楚为什么程序会产生一定的输出。

 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。

2 个答案:

答案 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