[英]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.