Skip to main content
Stack Overflow
  1. About
  2. For Teams

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

Validate string

I am trying to solve the following problem:

Given a string str, the task is to check if the string is a valid identifier or not. In order to qualify as a valid identifier, the string must satisfy the following conditions:

It must start with either underscore(_) or any of the characters from the ranges [‘a’, ‘z’] and [‘A’, ‘Z’]. There must not be any white space in the string. And, all the subsequent characters after the first character must not consist of any special characters like ,ドル #, % etc.

Examples:

Input: str= "_code123"

Output: Valid

Input: str = "123code_"

Output: Invalid

My attempted solution, which works:

def isValid(str1, n):
 # If first character is invalid
 if (((ord(str1[0]) >= ord('a') and
 ord(str1[0]) <= ord('z')) or
 (ord(str1[0]) >= ord('A') and
 ord(str1[0]) <= ord('Z')) or
 ord(str1[0]) == ord('_')) == False):
 return False
 # Traverse the string for the rest of the characters
 for i in range(1, len(str1)):
 if (((ord(str1[i]) >= ord('a') and
 ord(str1[i]) <= ord('z')) or
 (ord(str1[i]) >= ord('A') and
 ord(str1[i]) <= ord('Z')) or
 (ord(str1[i]) >= ord('0') and
 ord(str1[i]) <= ord('9')) or
 ord(str1[i]) == ord('_')) == False):
 return False
 # is a valid identifier
 return True
# Driver code
str1 = "_code123"
n = len(str1)
if (isValid(str1, n)):
 print("Valid")
else:
 print("Invalid")

How can I make the above code follow OOP principles, without so many nested ifs?

Answer*

Draft saved
Draft discarded
Cancel
0

lang-py

AltStyle によって変換されたページ (->オリジナル) /