Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将邮政编码转换为条形码_Python_Python 2.7 - Fatal编程技术网

Python-将邮政编码转换为条形码

Python-将邮政编码转换为条形码,python,python-2.7,Python,Python 2.7,该代码应采用5位邮政编码输入,并将其转换为条形码作为输出。每个数字的条形码为: {1:'...!!',2:'..!.!',3:'..!!.',4:'.!..!',5:'.!.!.',6:'.!!..',7:'!...!',8:'!..!.',9:'!.!..',0:'!!...'} 例如,邮政编码95014应产生: !!.!.. .!.!. !!... ...!! .!..! ...!!! 还有一个额外的在开始和结束处,用于确定条形码开始和停止的位置。请注意,条形码的末尾是一个额外的这是一个

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

{1:'...!!',2:'..!.!',3:'..!!.',4:'.!..!',5:'.!.!.',6:'.!!..',7:'!...!',8:'!..!.',9:'!.!..',0:'!!...'}
例如,邮政编码95014应产生:

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

  • 将zipcode中的所有数字相加,得到Z的和
  • 选择校验位C,使Z+C为10的倍数
例如,zipcode
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
,缺少校验位。我的代码中是否缺少导致代码无法输出校验位的内容?另外,我的代码中应该包含哪些内容,以便向用户请求邮政编码输入

您的代码根据数字的总和计算
rem
,但您从不使用它将校验数字条添加到输出中(
answer
final
)。为了得到正确的答案,您需要添加代码。我怀疑您也没有正确计算
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

有趣的问题。我注意到你作为一个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格式进行字符串格式化。以下是输出:

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

你实际上已经有了校验位算法。你在编码时遇到了什么问题?还有,你搜索过“python请求用户输入”吗?我知道我有,但它不起作用…你正在计算
rem
,但从未使用过它。我应该把它包括在哪里?它在你的问题陈述中给出。这会产生
而不是<代码>。我在尝试时得到了后者,因此您所做的一定与我展示的有所不同。带注释的两行是唯一与问题中的代码不同的行。