如何查找字符串中的任何字符是否是 Python 中的数字? .isnumeric 和 .isdigit 不起作用



我需要确定字符串中是否有字母和数字字符。我测试字母字符的代码似乎运行良好,但数字字符只有在所有字符都是数字的情况下才有效,如果有的话就无效。

有效的字母代码:

from curses.ascii import isalnum, isalpha, isdigit
password = input("Enter your password: ")
def contains_alphabetic():
for i in password:
if isalpha(i):
print("Valid")
return True
else:
print("Invalid")
return False
contains_alphabetic()

这返回"0";有效的";如果至少一个字符是字母;无效的";如果他们都不是,那就是我想要的。

def contains_numeric():
for j in password:
if isdigit(j):
print("Valid")
return True
else:
print("Invalid")
return False
contains_numeric()

这只返回"0";有效的";如果所有字符都是数字,而不是至少有一个是数字。我该如何解决这个问题?

此外,我尝试使用is.numberic((而不是is.digit((,但它甚至无法导入。

正如注释所指出的,contains_alphabeticcontains_numeric函数都不会执行您认为它们正在执行的操作,因为它们在第一次迭代期间提前终止。您启动一个循环,检查当前字符(在循环的第一次迭代中,它将是字符串的第一个字符(,然后立即从基于该单个字符的函数中返回一些内容,这当然会终止循环和函数。

其他建议:没有必要从curses导入东西。字符串已经有可用的isalphaisdigit谓词。此外,让函数接受一个字符串参数进行迭代可能是个好主意。

如果这个想法是在字符串中的任何字符满足条件/谓词的情况下返回True,否则返回False(如果没有字符满足条件(,那么以下将是一个有效的实现:

def contains_alpha(string):
for char in string:
if char.isalpha():
return True # return True as soon as we see a character that satisfies the condition
return False # Notice the indentation - we only return False if we managed to iterate over every character without returning True

或者:

def contains_alpha(string):
found = False
for char in string:
if char.isalpha():
found = True
break
return found

或者:

def contains_alpha(string):
for char in string:
if char.isalpha():
break
else: # Notice indentation - special for-else syntax: If we didn't break out of the loop, execute the else
return False
return True

或者:

def contains_alpha(string):
return any(char.isalpha() for char in string)

最新更新