簡體   English   中英

為什么我的代碼不返回任何值而不是條形碼?

[英]Why does my code keep returning none instead of the barcode?

該代碼應從給定的郵政編碼中打印出“條形碼”。 問題是完成后僅不打印任何內容。 對我來說沒有明顯的錯誤。 你可以看看嗎?

def printDigit(d , x):
    if x <= 5:
        if d[x] == 0:
            return "||:::" + printDigit(d , x + 1)
        elif d[x] == 1:
            return ":::||" + printDigit(d , x + 1)
        elif d[x] == 2:
            return "::|:|" + printDigit(d , x + 1)
        elif d[x] == 3:
            return "::||:" + printDigit(d , x + 1)
        elif d[x] == 4:
            return ":|::|" + printDigit(d , x + 1)
        elif d[x] == 5:
            return ":|:|:" + printDigit(d , x + 1)
        elif d[x] == 6:
            return ":||:|" + printDigit(d , x + 1)
        elif d[x] == 7:
            return "|:::|" + printDigit(d , x + 1)
        elif d[x] == 8:
            return "|::|:" + printDigit(d , x + 1)
        elif d[x] == 9:
            return "|:|::" + printDigit(d , x + 1)
    else:
        return

zipCode = str(input("Input a zip code: "))
print(printDigit(zipCode , 0))

這是您可以執行此操作的一種方法。 除了使用遞歸解決此問題外,您還可以遍歷輸入的字符。 如果少於5個字符,由於郵政編碼輸入錯誤,您可以立即return None 然后,我們將遍歷每個字符並將條形碼添加到列表中。

最后,我們檢查列表的長度是否為25,這意味着我們確實有5個數字,如果有任何字母或特殊字符,它們將被忽略。

def printDigit(d):
    if len(str(d)) == 5 and str(d).isdigit():
        temp = []
        for i in str(d):
            if i == '0':   temp.extend("||:::")
            elif i == '1': temp.extend(":::||")
            elif i == '2': temp.extend("::|:|")
            elif i == '3': temp.extend("::||:")
            elif i == '4': temp.extend(":|::|")
            elif i == '5': temp.extend(":|:|:")
            elif i == '6': temp.extend(":||:|")
            elif i == '7': temp.extend("|:::|")
            elif i == '8': temp.extend("|::|:")
            elif i == '9': temp.extend("|:|::")
        return ''.join(temp)
    else: return None

zipCode = str(input("Input a zip code: "))
print(printDigit(zipCode))

避免重寫代碼段。 我們還可以使用字典將每個數字轉換為其條形碼值。 然后我們可以使用列表推導

def printDigit(d):
    dic = {'0': "||:::", '1': "||:::", '2': "::|:|",
           '3': "::||:", '4': ":|::|", '5': ":|:|:",
           '6': ":||:|", '7': "|:::|", '8': "|::|:",
           '9': "|:|::"}
    if len(str(d)) == 5 and str(d).isdigit():
        return ''.join([dic[i] for i in str(d)])
    else: return None

zipCode = str(input("Input a zip code: "))
print(printDigit(zipCode))

您接受輸入的zipCode作為String對象。 因此,在比較元素時,可以將數字放在單引號中,也可以將zipCode轉換為整數。 我還建議使用isdigit()方法檢查字符串中的當前字符是否為數字。 同樣,當x的值超過5時,您的printDigit方法將返回NoneType,該類型不能與字符串對象組合。 因此返回“”

def printDigit(d , x):
    if x <len(d) and d[x].isdigit():
        if int(d[x]) ==0:
            return "||:::" + printDigit(d , x + 1)
        elif int(d[x]) == 1:
            return ":::||" + printDigit(d , x + 1)
        elif int(d[x]) == 2:
            return "::|:|" + printDigit(d , x + 1)
        elif int(d[x]) == 3:
            return "::||:" + printDigit(d , x + 1)
        elif int(d[x]) == 4:
            return ":|::|" + printDigit(d , x + 1)
        elif int(d[x]) == 5:
            return ":|:|:" + printDigit(d , x + 1)

        elif int(d[x]) == 6:
            return ":||:|" + printDigit(d , x + 1)
        elif int(d[x]) == 7:
            return "|:::|" + printDigit(d , x + 1)
        elif int(d[x]) == 8:
            return "|::|:" + printDigit(d , x + 1)
        elif int(d[x]) == 9:
            return "|:|::" + printDigit(d , x + 1)
    else:
        return ""

zipCode = input("Input a zip code: ")
print(printDigit(zipCode , 0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM