[英]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+).+))
為了好玩,這里有一個替代策略。 設置測試列表。 對於每個 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.