此代码应该打印出条形码"从给定的邮政编码。问题是它只在完成后打印出 none 。没有明显的错误给我。你能看看吗?
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))
答案 0 :(得分:1)
这是一种可以做到这一点的方法。您可以只遍历输入的字符,而不是使用递归来解决此问题。如果少于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))
答案 1 :(得分:0)
您接受输入的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))