簡體   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