Question: String Validators [Python Strings]
Python has built-in string validation methods for basic data. It can check if a string is composed of alphabetical characters, alphanumeric characters, digits, etc.
str.isalnum()
This method checks if all the characters of a string are alphanumeric (a-z, A-Z and 0-9).
>>> print 'ab123'.isalnum()
True
>>> print 'ab123#'.isalnum()
False
str.isalpha()
This method checks if all the characters of a string are alphabetical (a-z and A-Z).
>>> print 'abcD'.isalpha()
True
>>> print 'abcd1'.isalpha()
False
str.isdigit()
This method checks if all the characters of a string are digits (0-9).
>>> print '1234'.isdigit()
True
>>> print '123edsd'.isdigit()
False
str.islower()
This method checks if all the characters of a string are lowercase characters (a-z).
>>> print 'abcd123#'.islower()
True
>>> print 'Abcd123#'.islower()
False
str.isupper()
This method checks if all the characters of a string are uppercase characters (A-Z).
>>> print 'ABCD123#'.isupper()
True
>>> print 'Abcd123#'.isupper()
False
Task
You are given a string S.
Your task is to find out if the string S contains: alphanumeric characters, alphabetical characters, digits, lowercase and uppercase characters.
Input Format
A single line containing a string S.
Constraints
0 < len(s) <100
Output Format
In the first line, print True if S has any alphanumeric characters. Otherwise, print False.
In the second line, print True if S has any alphabetical characters. Otherwise, print False.
In the third line, print True if S has any digits. Otherwise, print False.
In the fourth line, print True if S has any lowercase characters. Otherwise, print False.
In the fifth line, print True if S has any uppercase characters. Otherwise, print False.
Sample Input
qA2
Sample Output:
True True True True True
Possible Solutions
Now we will go through some of the possible solutions to the given question. We already have been given by the following code in the Hacker Rank:
if __name__ == '__main__':
s = input()
Now let us solve the problem using various possible solutions:
Solution-1: Using if-else statements
Let us first use the if-else statements to solve the problem.
if __name__ == '__main__':
s = input()
res = False
for i in s:
if i.isalnum():
res = True
break
print(res)
res = False
for j in s:
if j.isalpha():
res = True
break
print(res)
res = False
for k in s:
if k.isdigit():
res = True
break
print(res)
res = False
for l in s:
if l.islower():
res = True
break
print(res)
res = False
for l in s:
if l.isupper():
res = True
break
print(res)
This Solution is checking if a string entered by the user contains alphanumeric characters, alphabetical characters, numerical characters, lowercase characters or uppercase characters. The input string is stored in the variable s and for each character in s, the code checks if the character is alphanumeric (using isalnum), alphabetical (using isalpha), numerical (using isdigit), lowercase (using islower) or uppercase (using isupper). If any character satisfies the condition, the value of res is set to True and the loop breaks. The final value of res is printed for each of the checks.
Solution-2: Using for loop
Now we will use only one for loop to solve the problem and then will explain the code.
if __name__ == '__main__':
s = input()
strr = list(s)
al_num = False
al = False
dig = False
low = False
upp = False
for i in strr:
al_num = al_num or i.isalnum()
al = al or i.isalpha()
dig = dig or i.isdigit()
low = low or i.islower()
upp = upp or i.isupper()
print(al_num)
print(al)
print(dig)
print(low)
print(upp)
The solution also checks various characteristics of the string entered by the user. The string is first converted into a list of characters and assigned to the variable "strr
". Five variables, al_num, al, dig, low, and upp, are defined and initialized to False. The for loop then iterates over each character in the list and sets the corresponding variable to True if the string has an alphanumeric character, an alphabet, a digit, a lowercase letter, or an uppercase letter, respectively. Finally, the script outputs the results of the tests.
Solution-3: Using map and lambda function
We can even reduce the code using the map and lambda function as shown below:
if __name__ == '__main__':
s = input()
print(True in list(map(lambda n:n.isalnum(),s)))
print(True in list(map(lambda n:n.isalpha(),s)))
print(True in list(map(lambda n:n.isdigit(),s)))
print(True in list(map(lambda n:n.islower(),s)))
print(True in list(map(lambda n:n.isupper(),s)))
Similar to the previous solutions, this solutions also checks various characteristics of the string entered by the user. The script takes a string input from the user and applies the "isalnum
", "isalpha
", "isdigit
", "islower
", and "isupper
" functions to each character in the string using the "map" function. The results of the tests are then passed to the "in" operator with True, which returns True if any of the characters in the string satisfies the corresponding test. Finally, the script outputs the results of the tests.
Solution-4: Using any()
method
We can also use the any()
method to check the string as shown below:
if __name__ == '__main__':
string = input()
# Check for alphanumeric characters
print(any(c.isalnum() for c in string))
# Check for alphabetical characters
print(any(c.isalpha() for c in string))
# Check for digits
print(any(c.isdigit() for c in string))
# Check for lowercase characters
print(any(c.islower() for c in string))
# Check for uppercase characters
print(any(c.isupper() for c in string))
This code is similar to the previous solutions, but it uses the "any
" function instead of the "in
" operator and list comprehension instead of the "map
" function. The "any" function returns True if any element in the provided iterable (here, the result of the list comprehension) is True, while the "in" operator only returns True if the specified value (here, True) is found in the iterable. This solution is more concise and efficient than the previous ones. Additionally, the use of list comprehensions simplifies the code and reduces its line count.
Summary
In this short article, we discussed how we can solve the String Validator on hacker rank using various solutions. We discussed mainly four different kinds of solutions and explained each of them.
Further Reading
Question on Hacker Rank: String Validators [Python Strings]