# 標題:輸入一個字符串標識符,判斷這個標識符是否合法?
# 標識符:首字符必須是字母或下划線,后面的字符只能是字母、數字、下划線
# 不能是關鍵字(可以用keyword模塊,iskeyword判斷是不是關鍵字,kwlist所有的關鍵字列表)
import string
import keyword
alphas = string.ascii_letters + '_'
nums = string.digits
myInput = input("Identifier to test>")
len_s = len(myInput)
if len_s > 1:
#先判斷是不是關鍵字,再判斷首字符是不是合法,合法再繼續判斷后面的字符是不是合法。
if myInput not in keyword.kwlist:
if myInput[0] not in alphas:
print("invalid identifier")
else:
for i in myInput[1:]:
if i not in alphas+nums:
print("invalid identifier")
break
else:
print("%s is valid identifier" % myInput)
else:
print("%s is keyword!" % myInput)
elif len_s == 1:
if myInput in alphas:
print("valid identifier")
else:
print("invalid identifier")
else:
print("請輸入一個字符串標識符。")
'''
第19-24行是一個for-else語句,在整個for循環里沒有遇到break時測執行else。
性能提示:第20行if語句里有兩個字符串合並的操作,被合並的字符串從始至終都沒變過,在for循環里每次執行都會計算一次,我們可以把這兩個字符串存為一個新的字符串,每次引用新的字符串,而不用每次重復計算了。
alphnums = alphas + nums
for i in myInput[1:]:
if i not in alphnums:
...
'''