Python - 条形码

时间:2016-07-25 00:06:07

标签: python python-2.7

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

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

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

!!.!.. .!.!. !!... ...!! .!..! ...!!!

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

  • 添加邮政编码中的所有数字以使总和 Z
  • 选择校验位 C ,使Z + C为10的倍数

例如,邮政编码95014的总和 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。我的代码中是否缺少导致代码不输出校验位的内容?另外,在我的代码中包含哪些内容要求用户输入邮政编码?

2 个答案:

答案 0 :(得分:1)

您的代码根据数字的总和计算rem,但您从不使用它来将校验位条添加到输出(answerfinal)。您需要添加代码才能获得正确的答案。我怀疑你还没有正确计算rem,因为你使用的是%20而不是%10

我用以下代码替换你函数的最后几行:

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

答案 1 :(得分:0)

有趣的问题。我注意到你作为C风格的程序员解决了这个问题。我猜测你的背景是用C / C ++编写的。我想提供更多的Pythonic方式:

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)

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

!!.!.. .!.!. !!... ...!! .!..! ...!!!
>>>