iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
自我挑戰組

Udemy課程上完你也可以開始Codewars 30天系列 第 14

[Day14] Codewars >>> Not very secure (Python)

  • 分享至 

  • xImage
  •  

題目(5kyu):

In this example you have to validate if a user input string is alphanumeric. The given >string is not nil/null/NULL/None, so you don't have to check that.

The string has the following conditions to be alphanumeric:

At least one character ("" is not valid)
Allowed characters are uppercase / lowercase latin letters and digits from 0 to 9
No whitespaces / underscore

解題思路

題目理解:設計一個函式檢驗字串password是否符合規則並返還布林值,題目要求僅允許出現大寫的英文字母與數字,空字串亦視為False。

Day3 中曾提到過,若一個字元其upper()與lower()過後的值相同,代表並非英文字母,故可利用此特性對密碼中字元做篩選。

針對剩下字元利用python中的int()函式來嘗試將某字串轉化為Int屬性,若能成功轉換代表該字元為數字。
但若不能轉換時可能會直接出現程式報錯的情形:

print(int(12))  #輸出:12
print(int("__")) #ValueError: invalid literal for int() with base 10: '__'

此時可以使用python中的try & excpet寫法,來使程序能繼續正常執行。

try:
    int("+=&") #嘗試執行try範圍下的程式碼,若發現錯誤則執行except內程式碼
except:
    print("檢驗到無法轉化屬性成Int之字元")

故可以將int()放入try內檢驗,若程序檢驗到出錯則透過except返還False,如下:

def alphanumeric(password):
    #空字串直接回傳False
    if password == "":
        return False
    for character in password:
        #逐一檢查字符,若character的upper() & lower()相等,說明改變大小寫結果相同故為非字母字元
        if character.upper() == character.lower():
            try:
                #嘗試執行類別轉換,若可轉換為Int說明character為數字
                int(character)
            except:
                #檢測到無法轉換則立即返還False
                return False
    return True

上一篇
[Day13] Codewars >>> Scramblies (Python)
下一篇
[Day15] Codewars >>> Where my anagrams at? (Python)
系列文
Udemy課程上完你也可以開始Codewars 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言