为什么我的代码总是返回none而不是barcode?

2024-09-24 20:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

这个代码应该从给定的邮政编码中打印出一个“条形码”。问题是,只有在完成后才打印出。对我来说没有明显的错误。你能看一下吗?你知道吗

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))

Tags: 代码inputreturnifdef错误zipelse
2条回答

这里有一个方法可以做到这一点。您可以只遍历输入的字符,而不是使用递归来解决这个问题。如果少于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作为字符串对象。因此,在比较元素时,可以将数字放在单引号内,也可以将zipCode转换为整数。我还建议使用isdigit()方法检查字符串中的当前字符是否是数字。另外,当x的值超过5时,printDigit方法返回的NoneType不能与string对象组合。因此返回“”

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))

相关问题 更多 >