Как определить, все ли символы в строке являются буквенно-цифровыми c, без использования isalnum ()? - PullRequest
0 голосов
/ 03 августа 2020

Я хочу определить, все ли символы в данной строке (например, z) являются буквенно-цифровыми c (только числа и буквы).

Функция должна возвращать True, если строка является буквенно-цифровой c и False, если нет. Я также хочу избегать использования условных ветвлений, реляционных или логических операторов или любых встроенных функций, кроме функций приведения типов.

Для любой итерации используйте while l oop с условием: True. Используйте блоки 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

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Вот решение с использованием только встроенной функции int:

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

Из документации:

литерал base-n состоит цифр от 0 до n-1, причем от a до z (или от A до Z) имеют значения от 10 до 35.

0 голосов
/ 03 августа 2020

Как насчет этого:

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")) -> Верно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...