到Barcod的Python邮政编码

2024-06-11 13:26:11 发布

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

该代码应该接受一个5位数的邮政编码输入,并将其转换为条形码作为输出。每个数字的条形码是:

{1:'...!!',2:'..!.!',3:'..!!.',4:'.!..!',5:'.!.!.',6:'.!!..',7:'!...!',8:'!..!.',9:'!.!..',0:'!!...'}

例如,邮政编码95014应该产生:

^{pr2}$

在开始和结束处有一个额外的!,用于确定条形码的开始和停止位置。请注意,在条形码的末尾有一个额外的...!!,它是1。这是校验位,您可以通过以下方法得到校验位:

  • 将zipcode中的所有数字相加,得到sumZ
  • 选择校验位,使Z+C是10的倍数

例如,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。我的代码中是否缺少某些内容导致代码无法输出校验位?另外,在我的代码中要包含什么内容才能让它向用户请求输入邮政编码?在


Tags: 代码answerdefcode数字zipnumdict
2条回答

您的代码根据数字的总和来计算rem,但是您永远不会使用它来将校验位条添加到输出(answerfinal)。为了得到正确的答案,您需要添加代码。我怀疑您也没有正确地计算rem,因为您使用的是%20,而不是{}。在

我将函数的最后几行替换为:

rem = (10 - sum_digits) % 10   # correct computation for the check digit
answer=[]
for i in str(zip_code):
    answer.append(printDigit(int(i)))
answer.append(printDigit(rem))   # add the check digit to the answer!
final='!'+' '.join(answer)+'!'
return final

有趣的问题。我注意到你作为一个C风格的程序员解决了这个问题。我猜你的背景是C/C++。我想提供一种更像Python的方式:

def printBarCode(zip_code):
    digit_dict = {1:'...!!',2:'..!.!',3:'..!!.',4:'.!..!',5:'.!.!.',
                  6:'.!!..',7:'!...!',8:'!..!.',9:'!.!..',0:'!!...'}
    zip_code_list = [int(num) for num in str(zip_code)]
    bar_code = ' '.join([digit_dict[num] for num in zip_code_list])
    check_code = digit_dict[10 - sum(zip_code_list) % 10]
    return '!{} {}!'.format(bar_code, check_code) 

print printBarCode(95014)

我使用列表理解来处理每个数字,而不是迭代。我本可以使用map()函数使其更具可读性,但列表理解更像python。另外,我使用python3.x格式进行字符串格式化。输出如下:

^{pr2}$

相关问题 更多 >