繁体   English   中英

检测输入是否同时包含字母和数字的问题

[英]Issue detecting if an input contains both letters and numbers

当使用包含字母和数字的输入运行以下代码时,它不会打印...

# test for both numbers and letters
def multi_test(analysis_input):
    alpha_test = False
    number_test = False
    if analysis_input.isalpha():
     alpha_test = True
     if analysis_input.isnumeric():
        number_test = True
        if alpha_test and number_test:
         print(analysis_input,'is multiple charcters')
        else:
         print('not')



analysis_input = input('enter your string arguement')
multi_test(analysis_input)

您需要检查每个字符:

def multi_test(analysis_input):
    alpha_test = False
    number_test = False
    for char in analysis_input:
        if char.isalpha():
            alpha_test = True
        if char.isnumeric():
            number_test = True
    if alpha_test and number_test:
        print(analysis_input,'is multiple charcters')
    else:
        print('not')



analysis_input = input('enter your string arguement')
multi_test(analysis_input)

编辑:也许更快更好的方法是使用正则表达式

^(?=.*[a-zA-Z]+)(?=.*\d+).+
# pseudo code, i'm not sure if this code works but its something like this
return bool(re.match(analysis_input, ^(?=.*[a-zA-Z]+)(?=.*\d+).+))

来自https://stackoverflow.com/a/24656216/10875953的想法

为了好玩,这里有一个替代策略。 设置测试列表。 对于每个 char 运行所有测试,直到一个匹配。 当一项测试为阳性时,将其从测试列表中删除。 当列表为空时,您已满足所有要求并且可以停止。

此方法的优点是仅运行必要的测试并在您匹配所有测试后立即停止:

def multi_test(s):
    tests = [str.isalpha, str.isdigit]
    for char in s:   # for each character
        for i,test in enumerate(tests):
            if test(char):    # if test is positive
                tests.pop(i)  # remove it from the list of tests
                break
        if len(tests) == 0:  # if there is no test remaining
            return True      # this is a success, we're done
    return False

multi_test('abc1')
# True

您不需要检查每个字符。 您的方法朝着正确的方向发展,但是if语句的缩进和您的逻辑有点可疑。 删除所有多余的部分后,您会得到

def multi_test(analysis_input):
    if analysis_input.isnumeric() or analysis_input.isalpha():
        print(analysis_input,'is not mixed')
    else:
        print(analysis_input,'is mixed charcters')

一些测试用例

for i in ['1234','12ab', 'abcd','1234abcd']:
    multi_test(i)

Output

1234 is not mixed
12ab is mixed charcters
abcd is not mixed
1234abcd is mixed charcters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM