在Python中验证字母和数字输入

2024-06-06 08:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个项目做一些编码,在这个项目中,我需要验证一个包含字母和数字字符的输入,就像这样

“哈雷23”

我想验证以确保输入同时包含字母和数字字符,理想情况下不需要创建大量代码块。我的学校也不热衷于下载复杂的图书馆,所以如果有一种不用依赖大量mods就能自己编写代码的方法,我会很感激的。 谢谢!你知道吗


Tags: 项目方法代码mods编码图书馆字母情况
3条回答

您可以尝试子字符串检查以进行验证。如果需要的话,你可以修改它们,包括大小写和数字。你知道吗

下面是一个简单的例子:

if "substring" not in somestring: 
     print("Error!")

您可以将其放入while True循环中,并使用ValueError子句。你知道吗

while True:
     try:
          //input
     if "substring" not in somestring:
          continue
     except ValueError:
          continue:
     else:
          break

我认为你创建了两个类似这样的函数:

如果字符串至少是一个数字,那么这个将返回true

>>> def hasNumbers(inputString):
...     return any(char.isdigit() for char in inputString)

如果字符串至少为一个字符,那么这个将返回true

>>> def hasChar(inputString):
...     return any(char.isalpha() for char in inputString)

你可以通过这样做来检查是否两者都有

if(hasNumbers("Charlie123") and hasChar("Charlie123"))

你可以用一种基于交集的方法, 可扩展代码:

import string

letters = set(string.ascii_letters)
nums = set(string.digits)

def has_alnum(word):
    chars = set(word)
    return chars & letters and chars & nums

如果你对速度特别感兴趣的话,你只需要 用手写出循环:

def loop_has_alnum(word):
    letter = False
    num = False
    for ch in word:
        if ch in letters:
            if num:
                return True
            letter = True
        elif ch in nums:
            if letter:
                return True
            num = True
    return False

把这些放在ipy文件中之后,我做了一些测试:

words = ["harry23", "a1", "8aaaa", "bbb0", "abc", "jim", "123"]

for word in words:
    print("{:7} - {!s:5} - {}".format(word, bool(has_alnum(word)), loop_has_alnum(word)))

print("timing sets:")

%timeit [has_alnum(word) for word in words]

print("timing loop:")

%timeit [loop_has_alnum(word) for word in words]

结果如下:

harry23 - True  - True
a1      - True  - True
8aaaa   - True  - True
bbb0    - True  - True
abc     - False - False
jim     - False - False
123     - False - False
timing sets:
3.32 µs ± 13.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
timing loop:
2.47 µs ± 130 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

证明他们都同意,但是循环要快一点。你知道吗

相关问题 更多 >