我需要将邮政编码转换为点和横杠(条形码),但不知道怎么做

2 投票
7 回答
1013 浏览
提问于 2025-04-15 22:31

这是我目前的进展:

def encodeFive(zip):

    zero =  "||:::"

    one =   ":::||"

    two =   "::|:|"

    three = "::||:"

    four =  ":|::|"

    five =  ":|:|:"

    six =   ":||::"

    seven = "|:::|"

    eight = "|::|:"

    nine =  "|:|::"

    codeList = [zero,one,two,three,four,five,six,seven,eight,nine]

    allCodes = zero+one+two+three+four+five+six+seven+eight+nine

    code = ""
    digits = str(zip)
    for i in digits:

        code = code + i    

    return code

通过这个,我可以得到原始的邮政编码,结果是一个字符串,但条形码里没有任何数字被编码。我已经弄明白了如何编码一个数字,但用五个数字就不行了。

7 个回答

1

我发现用split()来创建字符串列表更简单:

codes = "||::: :::|| ::|:| ::||: :|::| :|:|: :||:: |:::| |::|: |:|::".split()

def zipencode(numstr): 
    return ''.join(codes[int(x)] for x in str(numstr))

print zipencode("32345") 
2

也许可以使用字典:

barcode = {'0':"||:::",
           '1':":::||",
           '2':"::|:|",
           '3':"::||:",
           '4':":|::|",
           '5':":|:|:",
           '6':":||::",
           '7':"|:::|",
           '8':"|::|:",
           '9':"|:|::",
           }

def encodeFive(zipcode):
    return ''.join(barcode[n] for n in str(zipcode))

print(encodeFive(72353))
# |:::|::|:|::||::|:|:::||:

另外,最好不要把变量命名为 zip,因为这样会覆盖掉 Python 自带的 内置函数 zip. 同样,最好也避免把变量命名为 code,因为 code 是标准库中的一个模块.

4

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。

比如说,你可能想要在用户输入的数字大于10时,程序才进行某些计算。这样可以避免不必要的错误或无效的操作。

这就需要用到“条件语句”。条件语句就像是一个检查点,程序会在这里停下来,看看条件是否成立。如果成立,程序就会执行相应的代码;如果不成立,程序就会跳过这些代码,继续执行后面的部分。

通过使用条件语句,我们可以让程序更加灵活和智能,能够根据不同的情况做出不同的反应。

codeList = ["||:::", ":::||", "::|:|", "::||:", ":|::|",
    ":|:|:", ":||::", "|:::|", "|::|:", "|:|::" ]
barcode = "".join(codeList[int(digit)] for digit in str(zipcode))

撰写回答