I want this function to read a password, and check to see if it has at least 1 number in it. If not, it needs to return False. I need to use a for loop with the range function and this is what I have:
def hasNum(password): for i in range(0,len(password),1): if password == str('0123456789'): return True else: return False
I’ve tried different variations and it’s driving me crazy. Can someone possibly explain to a rookie what they’re doing wrong?
Advertisement
Answer
The loop tests once if the password is 0123456789
; if it matches that string, True
is returned, otherwise False
is returned outright. The range(0, len(password), 1)
is a complicated way to write range(len(password))
; likewise str('0123456789')
is a complicated way of writing '0123456789'
.
What you need is to iterate over each character, and if it is a digit, then return True
; if none is, then return False
:
def has_digit(password): for character in password: if character.isdigit(): return True return False
The final return False
is outside the loop – we must check each and every character in the password before returning False
.
This can be simplified with any
:
def has_digit(password): return any(ch.isdigit() for ch in password)