Проверьте, есть ли в строке цифры, буквы и пробелы - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь придумать оператор assert, который проверяет, содержит ли непустая строка s буквенно-цифровые символы и пробелы:

    assert s.isalnum()

Я понимаю, что это вернет False, если есть пробелы, потому чтоон проверяет, является ли каждый символ буквой или цифрой.Как это исправить?

РЕДАКТИРОВАТЬ: Для пояснения я пытаюсь создать утверждение assert, которое проверяет, содержит ли непустая строка буквенно-цифровые символы и / или пробелы.Например, «a 4 bc» и «ab» должны возвращать True.

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Может быть, это то, что вы хотите:

assert any(substr.issapce() or substr.isdigit() or substr.isalpha() for substr in s)

Строки для тестирования:

>>> s1 = '123 45    abc  67  d'
>>> s2 = '123456'
>>> s3 = 'abcd'
>>> s4 = ':?--==++'

Проверьте, содержит ли строка пробел:

>>> def hasAnySpace(str):
...   return ' ' in str
...
>>> hasAnySpace(s1)
True
>>> hasAnySpace(s2)
False
>>> hasAnySpace(s3)
False
>>> hasAnySpace(s4)
False

ПроверьтеЕсли строка содержит какую-либо цифру, вы можете использовать любую функцию и str.isdigit функцию:

>>> def hasAnyDigit(str):
...   return any (substr.isdigit() for substr in str)
...
>>> hasAnyDigit(s1)
True
>>> hasAnyDigit(s2)
True
>>> hasAnyDigit(s3)
False
>>> hasAnyDigit(s4)
False

Проверить, содержит ли строка какой-либо алфавитный символ, вы можетеиспользуйте любую функцию и str.isalpha функцию:

>>> def hasAnyAlpha(str):
...   return any(substr.isalpha() for substr in str)
...
>>> hasAnyAlpha(s1)
True
>>> hasAnyAlpha(s2)
False
>>> hasAnyAlpha(s3)
True
>>> hasAnyAlpha(s4)
False

Проверьте, содержит ли строка любое число, любой алфавитный символ или любой пробел :

>>> def hasAnyAlNumSpace(str):
...   return any(substr.isalpha() or substr.isdigit() or substr.isspace() for substr in str)
...
>>> hasAnyAlNumSpace(s1)
True
>>> hasAnyAlNumSpace(s2)
True
>>> hasAnyAlNumSpace(s3)
True
>>> hasAnyAlNumSpace(s4)
False

Если вы хотите использовать оператор assert, вы можете использовать любую их комбинацию:

>>> assert hasAnySpace(s1) or hasAnyDigit(s1) or hasAnyAlpha(s1) 
>>> assert hasAnySpace(s2) or hasAnyDigit(s2) or hasAnyAlpha(s2)
>>> assert hasAnySpace(s3) or hasAnyDigit(s3) or hasAnyAlpha(s3)
>>> assert hasAnySpace(s4) or hasAnyDigit(s4) or hasAnyAlpha(s4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>>
>>> assert hasAnySpace(s1)
>>> assert hasAnySpace(s2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>>
>>> assert hasAnyAlNumSpace(s1)
>>> assert hasAnyAlNumSpace(s2)
>>> assert hasAnyAlNumSpace(s3)
>>> assert hasAnyAlNumSpace(s4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

Конечно, если вам не нравятся эти методы, вы можетепросто используйте assert так:

assert ' ' in s1    
assert any(substr.isdigit() for substr in s1)
assert any(substr.isalpha() for substr in s1)
assert (' ' in s1) or any(substr.isdigit() or substr.isalpha() for substr in s1)
assert any(substr.issapce() or substr.isdigit() or substr.isalpha() for substr in s1)
0 голосов
/ 28 ноября 2018

Вы можете удалить пробелы для проверки:

assert s.replace(" ","").isalnum()
0 голосов
/ 28 ноября 2018

Это было бы в одну сторону

def customIsAlnum(String[] words):
    if(len(words) > 1):
       for(word in words):
           if(!word.isalnum()):
               return false
    else:
        return false
    return true


String str = "chelsea scored 3 goals"
String[] words = str.split()
print customIsAlnum(words)
0 голосов
/ 28 ноября 2018

Вы можете использовать все , чтобы проверить, является ли каждый символ буквенно-цифровым или пробелом:

text = "apple and 123"

result = all(c.isalnum() or c.isspace() for c in text)
print(result)

text = "with ."

result = all(c.isalnum() or c.isspace() for c in text)
print(result)

Выход

True
False

Еслион содержит пробелы и буквенно-цифровые символы, которые вы можете сделать:

def only_alnum_and_spaces(t):
    counts = {"spaces" : 0, "alnums": 0}
    for c in t:
        if c.isalnum():
            counts["alnums"] += 1
        elif c.isspace():
            counts["spaces"] += 1
        else:
            return False
    return counts["alnums"] > 0 and counts["spaces"] > 0

print(only_alnum_and_spaces("apple and 123"))
print(only_alnum_and_spaces("with ."))
print(only_alnum_and_spaces("appleand123"))

Вывод

True
False
False

Также обратите внимание, как упомянуто @Chris_Rands, что этот .isspace рассматривает вкладки как пробелы.

...