在python上用海龟图形绘制条形码

在python上用海龟图形绘制条形码,python,turtle-graphics,Python,Turtle Graphics,我知道用Python做很多事情都有一些疯狂的捷径,这就是我在介绍CIS类的项目中遇到麻烦的地方。我一直在寻找我问题的变体,但运气不好。。因此: 该项目是让我们的“海龟”绘制一个条形码,使用一个将被输入命令行的ZIP。我做了很多结构上的工作,比如:为特定的数字编码,告诉海龟为特定的数字画条需要多长时间。。但是,现在我一直在写for循环,以便将这两个部分放在一起,让程序绘制条形码 以下是我所拥有的: import argparse # Used in main program to obtain 5

我知道用Python做很多事情都有一些疯狂的捷径,这就是我在介绍CIS类的项目中遇到麻烦的地方。我一直在寻找我问题的变体,但运气不好。。因此:

该项目是让我们的“海龟”绘制一个条形码,使用一个将被输入命令行的ZIP。我做了很多结构上的工作,比如:为特定的数字编码,告诉海龟为特定的数字画条需要多长时间。。但是,现在我一直在写for循环,以便将这两个部分放在一起,让程序绘制条形码

以下是我所拥有的:

import argparse # Used in main program to obtain 5-digit ZIP code from command
            # line
import time # Used in main program to pause program before exit
import turtle   # Used in your function to print the bar code

## Constants used by this program
SLEEP_TIME = 30 # number of seconds to sleep after drawing the barcode
ENCODINGS = [[1, 1, 0, 0, 0],   # encoding for '0'
         [0, 0, 0, 1, 1],   # encoding for '1'
         [0, 0, 1, 0, 1],   # encoding for '2'
         [0, 0, 1, 1, 0],   # encoding for '3'
         [0, 1, 0, 0, 1],   # encoding for '4'
         [0, 1, 0, 1, 0],   # encoding for '5'
         [0, 1, 1, 0, 0],   # encoding for '6'
         [1, 0, 0, 0, 1],   # encoding for '7'
         [1, 0, 0, 1, 0],   # encoding for '8'
         [1, 0, 1, 0, 0]    # encoding for '9'
        ]
SINGLE_LENGTH = 25  # length of a short bar, long bar is twice as long

def compute_check_digit(digits):

    sum = 0
    for i in range(len(digits)):
        sum = sum + digits[i]
    check_digit = 10 - (sum % 10)
    if (check_digit == 10):
        check_digit = 0
    return check_digit


def draw_bar(my_turtle, digit):
    my_turtle.left(90)
    if digit == 0:
        length = SINGLE_LENGTH
    else:
        length = 2 * SINGLE_LENGTH
    my_turtle.forward(length)
    my_turtle.up()
    my_turtle.backward(length)
    my_turtle.right(90)
    my_turtle.forward(10)
    my_turtle.down()


def draw_zip(my_turtle, zip):
    # WHAT DO I DO 
    print("My code to draw the barcode needs to replace this print statement")

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("ZIP", type=int)
    args = parser.parse_args()
    zip = args.ZIP
    if zip <= 0 or zip > 99999:
        print("zip must be > 0 and < 100000; you provided", zip)
    else:
        my_turtle = turtle.Turtle()
        draw_zip(my_turtle, zip)
        time.sleep(SLEEP_TIME)

if __name__ == "__main__":
    main()
import argparse#在主程序中用于从命令获取5位邮政编码
#线
导入时间#在主程序中用于在退出前暂停程序
导入turtle#用于打印条形码的函数
##此程序使用的常量
SLEEP_TIME=30#绘制条形码后的睡眠秒数
编码=[[1,1,0,0,0],#对“0”进行编码
[0,0,0,1,1],#对“1”进行编码
[0,0,1,0,1],#对“2”进行编码
[0,0,1,1,0],#对“3”进行编码
[0,1,0,0,1],#对“4”进行编码
[0,1,0,1,0],#对“5”进行编码
[0,1,1,0,0],#对“6”进行编码
[1,0,0,0,1],#对“7”进行编码
[1,0,0,1,0],#对“8”进行编码
[1,0,1,0,0]#对“9”进行编码
]
单根长度=25根短棒的长度,长棒的长度是短棒的两倍
def计算检查数字(数字):
总和=0
对于范围内的i(len(位数)):
总和=总和+位数[i]
校验位=10-(总和%10)
如果(检查数字=10):
检查数字=0
返回校验位
def绘图栏(我的海龟,数字):
我的乌龟。左(90)
如果数字==0:
长度=单个长度
其他:
长度=2*单根长度
我的乌龟向前(长度)
我的乌龟
我的乌龟。向后(长度)
我的乌龟。对(90)
我的乌龟前进(10)
我的乌龟
def draw_zip(我的乌龟,zip):
#我该怎么办
打印(“绘制条形码的我的代码需要替换此打印语句”)
def main():
parser=argparse.ArgumentParser()
add_参数(“ZIP”,type=int)
args=parser.parse_args()
zip=args.zip
如果邮政编码为99999:
打印(“zip必须大于0且小于100000;由您提供”,zip)
其他:
我的乌龟=乌龟
拉拉链(我的乌龟,拉链)
时间。睡眠(睡眠时间)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
开始和结束时的argparse/parser内容在我们启动每个项目时提供给我们

我知道下一行在某些地方会有帮助,我查阅了映射功能,我知道我需要将编码从字符串转换为整数

地图(列表,str(zip))


谢谢

您需要遍历zip的数字。 对于每一个数字,您都要遍历5个条

for str_digit in str(zip):
    digit = int(str_digit)
    for bar_bit in ENCODINGS[digit]:
        draw_bar(my_turtle, bar_bit)
        <move turtle to next bar's starting point>
str(zip)中str_数字的
:
数字=整数(str_数字)
对于编码中的bar_位[数字]:
画吧(我的乌龟,吧位)

欢迎来到StackOverflow。请记住阅读并遵循帮助文档中的发布指南。在这里会有特别的帮助。修剪。。。你太棒了!完全有道理。对于一个新手程序员来说,在开始/结束时给我们的所有额外的东西都有点让人不知所措。非常感谢。很乐意帮忙。您所做的大部分工作将涉及两种类型的分解:(1)将长任务分解为短任务,按顺序进行:步骤a、步骤B、步骤C等。(2)将重复性工作分解为“一次完成”循环体和“如何重复”包装(通常包括几行设置和工作后)。这很有意义。谢谢你的帮助。。多亏了你,我在这个项目上取得了很好的成绩:)谢谢你的反馈!这远比名誉点数更有价值。顺便说一句,记住“接受”一个答案,这样StackOverflow就可以正确地回避这个问题。