【问题标题】:How do I determine if all the characters in a string is alphanumeric without using isalnum()?如何在不使用 isalnum() 的情况下确定字符串中的所有字符是否都是字母数字?
【发布时间】:2020-08-03 19:25:20
【问题描述】:

我想确定给定字符串(比如 z)中的所有字符是否都是字母数字(仅限数字和字母)。

如果字符串是字母数字,函数应该返回 True,否则返回 False。 我还想避免使用条件分支、关系或布尔运算符,或除类型转换函数之外的任何内置函数。

对于任何迭代,使用条件为 True 的 while 循环。使用 try 和 except 块。

到目前为止我所拥有的:

def is_alnum(z):
    i = 0
    y = 0
    while True:
        try:
            try:
                y = int(z[i])
            except(ValueError):
                   ### don't know what to insert
        except(IndexError):
            return True
        i += 1

【问题讨论】:

  • int(z[i]) 将失败。
  • 您为什么要通过删除所有内容来编辑您的问题?请学习如何正确使用本网站。如果您有其他问题,请提出新问题,不要编辑现有问题。

标签: python python-3.x exception try-except


【解决方案1】:

这是一个只使用内置函数int的解决方案:

def is_alnum(z):
    try:
        int(z, base=36)
    except ValueError:
        return False
    else:
        return True

>>> is_alnum('abc123')
True
>>> is_alnum('abc-123')
False

来自文档:

base-n 字面量由 0 到 n-1 的数字组成,a 到 z(或 A 到 Z)的值是 10 到 35。

【讨论】:

    【解决方案2】:

    这个怎么样:

    def is_alnum(z):
        i=1
        abcnum = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 
        'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
        'u', 'v', 'w', 'x', 'y', 'z'] + [str(i) for i in range(10)]    
        while True:
            try:
                chr = z[i-1].lower()
            except IndexError:
                return True
            try:
                idx = abcnum.index(chr)
            except ValueError as e:
                return False 
            i += 1
    

    这将导致:

    print(is_alnum("Yeah!!")) -> 错误(因为!!)

    print(is_alnum("thisistrue")) -> 是的

    【讨论】:

    • 问题指出“条件分支”是不允许的,我认为这意味着没有if
    • @MarkRansom 你是对的,我没有正确阅读这个问题。我已经修改了代码以使用 try/except 而不是条件分支。
    • @stovfl 如果你要为某人做作业,最好给出一个他们必须修复的不完整的解决方案。
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 2015-04-21
    • 2014-03-30
    • 1970-01-01
    • 2019-06-11
    • 2012-10-27
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多