1

我觉得我的问题很基础,因为我是第一学期计算机科学专业的学生。

我被要求返回类似于"abcd5efgh". 这个想法是用一个函数给我"abcd"。我想我需要使用.isdigit,但我不确定如何将它变成一个函数。先感谢您!

4

7 回答 7

4

可以用正则表达式来完成,但是如果你已经发现了isdigit,为什么不在这种情况下使用它呢?

return s如果没有找到数字,您可以修改最后一行以返回其他内容:

def string_before_digit(s):
    for i, c in enumerate(s):
        if c.isdigit():
            return s[:i]
    return s # no digit found

print(string_before_digit("abcd5efgh"))
于 2013-04-16T12:52:59.810 回答
1

我目前也是一名学生,这就是我将如何解决这个问题:*对于我的学校,我们不允许使用像 python 中那样的内置函数:/

     def parse(string):
       newstring = ""
       for i in string:
          if i >= "0" and i <= "9":
             break
          else:
             newstring += i
       print newstring #Can use return if your needing it in another function

     parse("abcd5efgh")

希望这可以帮助

于 2013-04-16T12:58:55.590 回答
1

一种实用的方法:)

>>> from itertools import compress, count, imap
>>> text = "abcd5efgh"
>>> text[:next(compress(count(), imap(str.isdigit, text)), len(text))]
'abcd'
于 2013-04-16T13:03:07.753 回答
0

如果您不允许使用正则表达式,可能是因为他们告诉您手动明确地执行此操作,您可以这样做:

def digit_index(s):
    """Helper function."""
    # next(..., -1) asks the given iterator for the next value and returns -1 if there is none.
    # This iterator gives the index n of the first "true-giving" element of the asked generator expression. True-giving is any character which is a digit.
    return next(
        (n for n, i in enumerate(i.isdigit() for i in "abc123") if i),
        -1)

def before_digit(s):
    di = digit_index(s)
    if di == -1: return s
    return s[:di]

应该给你你想要的结果。

于 2013-04-16T12:56:29.857 回答
0

下面的代码将使用正则表达式为您提供第一个非数字部分。

import re
myPattern=re.compile('[a-zA-Z]*')
firstNonDigitPart=myPattern.match('abcd5efgh')
firstNonDigitPart.group()
>>> 'abcd'
于 2013-04-16T12:53:08.910 回答
0

一种迭代工具方法:

>>> from itertools import takewhile
>>> s="abcd5efgh"
>>> ''.join(takewhile(lambda x: not x.isdigit(), s))
'abcd'
于 2015-04-15T20:31:38.693 回答
0

一个非常简单的单线,使用isdigit:)

>>> s = 'abcd5efgh'
>>> s[:[i for i, j in enumerate([_ for _ in s]) if j.isdigit()][0]]
'abcd'
于 2013-04-16T17:04:47.367 回答