该代码应该接受一个5位数的邮政编码输入,并将其转换为条形码作为输出。每个数字的条形码是:
{1:'...!!',2:'..!.!',3:'..!!.',4:'.!..!',5:'.!.!.',6:'.!!..',7:'!...!',8:'!..!.',9:'!.!..',0:'!!...'}
例如,邮政编码95014应该产生:
^{pr2}$在开始和结束处有一个额外的!
,用于确定条形码的开始和停止位置。请注意,在条形码的末尾有一个额外的...!!
,它是1。这是校验位,您可以通过以下方法得到校验位:
例如,zipcode95014
的和为Z=9+5+0+1+4=19,因此校验位C为1,使得总和Z+C等于20,这是10的倍数。在
def printDigit(digit):
digit_dict = {1:'...!!',2:'..!.!',3:'..!!.',4:'.!..!',5:'.!.!.',6:'.!!..',7:'!...!',8:'!..!.',9:'!.!..',0:'!!...'}
return digit_dict[digit]
def printBarCode(zip_code):
sum_digits=0
num=zip_code
while num!=0:
sum_digits+=(num%10)
num/=10
rem = 20-(sum_digits%20)
answer=[]
for i in str(zip_code):
answer.append(printDigit(int(i)))
final='!'+' '.join(answer)+'!'
return final
print printBarCode(95014)
我当前的代码生成的输出是
!!.!.. .!.!. !!... ...!! .!..!!
对于缺少校验位的邮政编码95014
。我的代码中是否缺少某些内容导致代码无法输出校验位?另外,在我的代码中要包含什么内容才能让它向用户请求输入邮政编码?在
您的代码根据数字的总和来计算}。在
rem
,但是您永远不会使用它来将校验位条添加到输出(answer
和final
)。为了得到正确的答案,您需要添加代码。我怀疑您也没有正确地计算rem
,因为您使用的是%20
,而不是{我将函数的最后几行替换为:
有趣的问题。我注意到你作为一个C风格的程序员解决了这个问题。我猜你的背景是C/C++。我想提供一种更像Python的方式:
我使用列表理解来处理每个数字,而不是迭代。我本可以使用map()函数使其更具可读性,但列表理解更像python。另外,我使用python3.x格式进行字符串格式化。输出如下:
^{pr2}$相关问题 更多 >
编程相关推荐