‘壹’ python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
520到了,还被女朋友问送什么礼物吗?鲜花?口红?看电影?很俗的好不好,给你女朋友一个程序员的Surprise吧,来来来,让你用代码撩妹子。啥?没有女朋友?没有女朋友更应该看了,用它来表白不香嘛?
1、引言什么什么?你女朋友不懂代码?没有编译环境?这叫事儿嘛,以下你看到的所有代码,我都给你打包成电脑一键运行的exe程序,双击就完事儿。就问你女朋友喜不喜欢,文章末尾自取即可。
我还在每个文件夹中写了使用说明,你确定不要吗?尤其是最后一个,非常好看哦。
2、代码列表浪漫玫瑰
浪漫玫瑰加爱心
你中有我,我中有你
浪漫小树
用女朋友照片,绘制心形
电脑弹窗表白
字符画-用字符画出来你女朋友(尤其是这个,我最喜欢了)
3、浪漫玫瑰成品展示源代码from turtle import *import timesetup(1000, 800, 0, 0)speed(0)penup()seth(90)fd(340)seth(0)pendown()speed(5)begin_fill()fillcolor('red')circle(50, 30)for i in range(10):fd(1)left(10)circle(40, 40)for i in range(6):fd(1)left(3)circle(80, 40)for i in range(20):fd(0.5)left(5)circle(80, 45)for i in range(10):fd(2)left(1)circle(80, 25)for i in range(20):fd(1)left(4)circle(50, 50)time.sleep(0.1)circle(120, 55)speed(0)seth(-90)fd(70)right(150)fd(20)left(140)circle(140, 90)left(30)circle(160, 100)left(130)fd(25)penup()right(150)circle(40, 80)pendown()left(115)fd(60)penup()left(180)fd(60)pendown()end_fill()right(120)circle(-50, 50)circle(-20, 90)speed(1)fd(75)speed(0)circle(90, 110)penup()left(162)fd(185)left(170)pendown()circle(200, 10)circle(100, 40)circle(-52, 115)left(20)circle(100, 20)circle(300, 20)speed(1)fd(250)penup()speed(0)left(180)fd(250)circle(-300, 7)right(80)circle(200, 5)pendown()left(60)begin_fill()fillcolor('green')circle(-80, 100)right(90)fd(10)left(20)circle(-63, 127)end_fill()penup()left(50)fd(20)left(180)pendown()circle(200, 25)penup()right(150)fd(180)right(40)pendown()begin_fill()fillcolor('green')circle(-100, 80)right(150)fd(10)left(60)circle(-80, 98)end_fill()penup()left(60)fd(13)left(180)pendown()speed(1)circle(-200, 23)exitonclick()4、浪漫玫瑰加爱心成品展示源代码import turtleimport time# 爱心函数def yellowheart(x, y, liftx):turtle.pensize(3)turtle.speed(10)turtle.color("red", "red")turtle.up()turtle.goto(x, y)turtle.down()turtle.begin_fill()turtle.left(liftx)turtle.fd(80)turtle.circle(-40, 180)turtle.left(90)turtle.circle(-40, 180)turtle.left(0)turtle.fd(80)turtle.end_fill()def rose():turtle.speed(0)# 画笔移动的速度# turtle.tracer(False)# 设置初始位置turtle.penup()# 提起画笔turtle.left(90)# 逆时针转动画笔90度turtle.fd(200)turtle.pendown()# 放下画笔,移动画笔即开始绘制turtle.right(90)# 设置画笔的大小turtle.pensize(2)# 花蕊turtle.fillcolor("red")# 填充颜色turtle.begin_fill()# 开始填充turtle.circle(10, 180)turtle.circle(25, 110)turtle.left(50)turtle.circle(60, 45)turtle.circle(20, 170)turtle.right(24)turtle.fd(30)turtle.left(10)turtle.circle(30, 110)turtle.fd(20)turtle.left(40)turtle.circle(90, 70)turtle.circle(30, 150)turtle.right(30)turtle.fd(15)turtle.circle(80, 90)turtle.left(15)turtle.fd(45)turtle.right(165)turtle.fd(20)turtle.left(155)turtle.circle(150, 80)turtle.left(50)turtle.circle(150, 90)turtle.end_fill()# 结束填充# 右侧花瓣turtle.left(150)turtle.circle(-90, 70)turtle.left(20)turtle.circle(75, 105)turtle.setheading(60)turtle.circle(80, 98)turtle.circle(-90, 40)# 左侧花瓣turtle.left(180)turtle.circle(90, 40)turtle.circle(-80, 98)turtle.setheading(-83)# 左侧叶子turtle.fd(30)turtle.left(90)turtle.fd(25)turtle.left(45)turtle.fillcolor("green")turtle.begin_fill()turtle.circle(-80, 90)turtle.right(90)turtle.circle(-80, 90)turtle.end_fill()turtle.right(135)turtle.fd(60)turtle.left(180)turtle.fd(85)turtle.left(90)turtle.fd(80)# 右侧叶子turtle.right(90)turtle.right(45)turtle.fillcolor("green")turtle.begin_fill()turtle.circle(80, 90)turtle.left(90)turtle.circle(80, 90)turtle.end_fill()turtle.left(135)turtle.fd(60)turtle.left(180)turtle.fd(60)turtle.right(90)turtle.circle(200, 50)# 画一个圆 200 是半径,50 是弧度time.sleep(1)# turtle.tracer(False)# turtle.pensize(3)# turtle.speed(0)turtle.color("red", "red")turtle.up()turtle.goto(-230, 50)turtle.down()turtle.begin_fill()turtle.left(180)turtle.fd(80)turtle.circle(-40, 180)turtle.left(90)turtle.circle(-40, 180)turtle.left(0)turtle.fd(80)turtle.end_fill()time.sleep(1)# turtle.tracer(False)# turtle.pensize(3)# turtle.speed(0)turtle.color("red", "red")turtle.up()turtle.goto(-230, -80)turtle.down()turtle.begin_fill()turtle.left(-30)turtle.fd(80)turtle.circle(-40, 180)turtle.left(90)turtle.circle(-40, 180)turtle.left(0)turtle.fd(80)turtle.end_fill()time.sleep(1)# turtle.tracer(False)# turtle.pensize(3)# turtle.speed(0)turtle.color("red", "red")turtle.up()turtle.goto(-130, -180)turtle.down()turtle.begin_fill()turtle.left(-80)turtle.fd(80)turtle.circle(-40, 180)turtle.left(90)turtle.circle(-40, 180)turtle.left(0)turtle.fd(80)turtle.end_fill()time.sleep(1)# turtle.tracer(False)# turtle.pensize(3)# turtle.speed(0)turtle.color("red", "red")turtle.up()turtle.goto(200, -200)turtle.down()turtle.begin_fill()turtle.left(-90)turtle.fd(80)turtle.circle(-40, 180)turtle.left(90)turtle.circle(-40, 180)turtle.left(0)turtle.fd(80)turtle.end_fill()time.sleep(1)# turtle.tracer(False)# turtle.pensize(3)# turtle.speed(0)turtle.color("red", "red")turtle.up()turtle.goto(200, 50)turtle.down()turtle.begin_fill()turtle.left(90)turtle.fd(80)turtle.circle(-40, 180)turtle.left(90)turtle.circle(-40, 180)turtle.left(0)turtle.fd(80)turtle.end_fill()def figure1():turtle.reset()turtle.tracer(False)rose()yellowheart(-230, 50, 180)# 左一# time.sleep(2)def figure2():# turtle.reset()turtle.tracer(False)rose()yellowheart(-230, -80, -30)# 左二# time.sleep(2)def figure3():turtle.reset()turtle.tracer(False)rose()yellowheart(-130, -180, -30)# 左三# time.sleep(2)def figure4():turtle.reset()turtle.tracer(False)rose()yellowheart(200, 50, 90)# 右一# ime.sleep(2)def figure5():turtle.reset()turtle.tracer(False)rose()yellowheart(200, -200, -90)# 右二# time.sleep(2)if __name__ == "__main__":rose()# figure1()## yellowheart(-230, -80, -30)# 左二# 不让自动退出,放在程序的最后一行# 不然画画结束后会自动退出turtle.done()5、你中有我,我中有你成品展示源代码from turtle import *def go_to(x, y):up()goto(x, y)down()def small_Circle(size):# 函数用于绘制心的小圆speed(10)for i in range(210):forward(size)right(0.786)def big_Circle(size):# 函数用于绘制心的大圆speed(10)for i in range(150):forward(size)right(0.3)def line(size):speed(10)forward(51 * size)def heart(x, y, size):go_to(x, y)left(150)begin_fill()line(size)big_Circle(size)small_Circle(size)left(120)small_Circle(size)big_Circle(size)line(size)end_fill()def main():pensize(2)color('red', 'pink')getscreen().tracer(1, 0)heart(100, 0, 0.7)go_to(80, 70)write("官人", font=("楷体", 18, "normal"))setheading(0)heart(-80, -100, 1)go_to(-110, 15)write("娘子", font=("宋体", 20, "normal"))go_to(40, -80)write("三生三世皆是你!", move=True, align="left", font=("arial", 22, "italic"))done()main()6、浪漫小树成品展示源代码import turtle as Timport randomimport time# 画樱花的躯干(60,t)def Tree(branch, t):time.sleep(0.0005)if branch > 3:if 8 <= branch <= 12:if random.randint(0, 2) == 0:t.color('snow')# 白else:t.color('lightcoral')# 淡珊瑚色t.pensize(branch / 3)elif branch < 8:if random.randint(0, 1) == 0:t.color('snow')else:t.color('lightcoral')# 淡珊瑚色t.pensize(branch / 2)else:t.color('sienna')# 赭(zhě)色t.pensize(branch / 10)# 6t.forward(branch)a = 1.5 * random.random()t.right(20 * a)b = 1.5 * random.random()Tree(branch - 10 * b, t)t.left(40 * a)Tree(branch - 10 * b, t)t.right(20 * a)t.up()t.backward(branch)t.down()# 掉落的花瓣def Petal(m, t):for i in range(m):a = 200 - 400 * random.random()b = 10 - 20 * random.random()t.up()t.forward(b)t.left(90)t.forward(a)t.down()t.color('lightcoral')# 淡珊瑚色t.circle(1)t.up()t.backward(a)t.right(90)t.backward(b)# 绘图区域t = T.Turtle()# 画布大小w = T.Screen()t.hideturtle()# 隐藏画笔t.getscreen().tracer(5, 0)w.screensize(bg='wheat')# wheat小麦t.left(90)t.up()t.backward(150)t.down()t.color('sienna')# 画樱花的躯干Tree(60, t)# 掉落的花瓣Petal(200, t)w.exitonclick()7、用女朋友照片,绘制心形成品展示PS:我是每个照片放了三份,所以每个一样的图出现了三次,你要放置不一样的图片,就不会出现该问题了。
源代码from PIL import Imageimport osmap = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1],[1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1],[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],]# 这个是我图片的所在路径img_dir = "photo"imgs = os.listdir(img_dir)img_h = img_w = 192rows = len(map)columns = len(map[0])figure = Image.new("RGB", (img_w * columns, img_h * rows), "white")count = 0for i in range(len(map)):for j in range(len(map[i])):if map[i][j] == 1:continueelse:try:image = Image.open(os.path.join(img_dir, imgs[count]))except:continueimage = image.resize((img_w, img_h))figure.paste(image, (img_w * j, img_h * i))count += 1figure.show()figure.save('心型照片墙.png')8、电脑弹框表白成品展示源代码import tkinter as tkimport randomimport threadingimport timedef dow():window = tk.Tk()width = window.winfo_screenwidth()height = window.winfo_screenheight()a = random.randrange(0, width)b = random.randrange(0, height)window.title(驠快乐')window.geometry("200x50" + "+" + str(a) + "+" + str(b))tk.Label(window, text=驠快乐!爱你幺', bg='Red',# 背景颜色 font=('楷体', 17), width=15, height=2 ).pack()window.mainloop()threads = []for i in range(30):# 需要的弹框数量,别写太多,容易电脑卡死哦t = threading.Thread(target=dow)threads.append(t)time.sleep(0.1)threads[i].start()9、字符画-用字画你女朋友成品展示原图:
渲染之后的图:
源代码剩余内容请转至VX公众号 “运维家” ,回复 “166” 查看。
------ “运维家” ,回复 “166” ?------
------ “运维家” ,回复 “166” ?------
------ “运维家” ,回复 “166” ?------
重庆安全运维工程师入行门槛低,运维监理工程师是做什么的,大连找工作运维工程师,系统运维工程师工作计划的编写,系统运维工程师学习课程,适合运维工程师的兼职,信息运维工
‘贰’ 编一段程序(只有代码段)让显示器上输出26个字母“AB.....Z”. PS:可追加悬赏
第一个程序:画一百个同心圆
第一步:复制下面的红色代码
第二步:在模型空间按快捷键Alt+F8,出现宏窗口
第三步:在宏名称中填写C100,点“创建”、“确定”
第四步:在Sub c100()和End Sub之间粘贴代码
第五步:回到模型空间,再次按Alt+F8,点击“运行”
Sub c100()
Dim cc(0 To 2) As Double '声明坐标变量
cc(0) = 1000 '定义圆心座标
cc(1) = 1000
cc(2) = 0
For i = 1 To 1000 Step 10 '开始循环
Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆
Next i
End Sub
也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
第二课 编程基础
本课主要任务是对上一课的例程进行详细分析
下面是源码:
Sub c100()
Dim cc(0 To 2) As Double '声明坐标变量
cc(0) = 1000 '定义圆心座标
cc(1) = 1000
cc(2) = 0
For i = 1 To 1000 Step 10 '开始循环
Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆
Next i
End Sub
先看第一行和最后一行:
Sub C100()
……
End Sub
C100是宏的名称,也叫过程名称,当用户执行C100时程序将运行sub 和end sub之间的所有指令。
第二行:
Dim cc(0 To 2) As Double '声明坐标变量
后半段“'声明坐标变量”自动变为绿色字体,它是代码语句的注释,它不会影响程序运行,它的作用是告诉阅读者程序员的想法。对于简单的程序,一般不需要写注释,如果要编写非常复杂的程序,最好要多加注释,越详细越好,对于程序员来说,这是一个好习惯。
电脑真正编译执行的是这条语句:Dim cc(0 To 2) As Double
它的作用就是声明变量。
Dim是一条语句,可以理解为计算机指令。
它的语法:Dim变量名 As 数据类型
本例中变量名为CC,而括号中的0 to 2声明这个CC是一个数组,这个数组有三个元素:CC(0)、CC(1)、CC(2),如果改为CC(1 to 3),则三个元素是CC(1)、CC(2)、CC(3),有了这个数组,就可以把坐标数值放到这个变量之中。
Double是数据类型中的一种。ACAD中一般需要定义坐标时就用这个数据类型。在ACAD中数据类型的有很多,下面两个是比较常用的数据类型,初学者要有所理解。
Long(长整型),其范围从 -2,147,483,648 到 2,147,483,647。
Variant 它是那些没被显式声明为其他类型变量的数据类型,可以理解为一种通用的数据类型,这是最常用的。
下面三条语句
cc(0) = 1000 '定义圆心座标
cc(1) = 1000
cc(2) = 0
它们的作用是给CC变量的每一个元素赋,值其顺序是X、Y、Z坐标。
For i = 1 To 1000 Step 10 '开始循环
……
Next i '结束循环
这两条语句的作用是循环运行指令,每循环一次,i值要增加10,当i加到 1000时,结束循环。
i也是一个变量,虽然没有声明i变量,程序还是认可的,VB不是C语言,每用一个变量都要声明,不声明就会报错。简单是简单了,这样做也有坏处,如果不小心打错了一个字母,程序不会报错,如果程序很长,那就会出现一些意想不到的错误。
step后面的数值就是每次循环时增加的数值,step后也可以用负值。
例如:For i =1000 To 1 Step -10
很多情况下,后面可以不加step 10
如:For i=1 to 100,它的作用是每循环一次i值就增加1
Next i语句必须出现在需要结束循环的位置,不然程序没法运行。
下面看画圆命令:
Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10)
Call语句的作用是调用其他过程或者方法。
ThisDrawing.ModelSpace是指当前CAD文档的模型空间
AddCircle是画圆方法
Addcicle方法需要两个参数:圆心和半径
CC就是圆心坐标,i*10就是圆的半径,本例中,这些圆的半径分别是10、110、210、310……
本课到此结束,下面请完成一道思考题:
1.以(4,2)为圆心,画5个同心圆,其半径为1-5
第三课 编程基础二
绘制三维多段线时X、Y值在屏幕上用鼠标选取,Z值用键盘输入
本课将讲解这个问题。
为了简化程序,这里用多条直线来代替多段线。以下是源码:
Sub myl()
Dim p1 As Variant '申明端点坐标
Dim p2 As Variant
p1 = ThisDrawing.Utility.GetPoint(, "输入点:") '获取点坐标
z = ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值
p1(2) = z '将Z坐标值赋予点坐标中
On Error GoTo Err_Control '出错陷井
Do '开始循环
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标
z = ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值
p2(2) = z '将Z坐标值赋予点坐标中
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '画直线
p1 = p2 '将第二点的端点保存为下一条直线的第一个端点坐标
Loop
Err_Control:
End Sub
先谈一下本程序的设计思路:
1、获取第一点坐标
2、输入第一点Z坐标
3、获取第二点坐标
4、输入第二点Z坐标
5、以第一、二点为端点,画直线
6、下一条线的第一点=这条线的第二点
7、回到第3步进行循环
如果用户没有输入坐标或Z值,则程序结束。
首先看以下两条语句:
p1 = ThisDrawing.Utility.GetPoint(, "输入点:") ‘获取点坐标
……
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标
这两条语句的作用是由用户输入点用鼠标选取点坐标,并把坐标值赋给p1、p2两个变量。ThisDrawing.Utility.GetPoint()在ACAD中这是最常用的方法之一,它需要两个参数,在逗号前面的参数应该是一个点坐标,它的作用是在屏幕上画一条线,前一个端点位于点坐标位置,后一个端点跟随鼠标移动,逗号之前可以什么都不填,这时没有线条会跟随鼠标移动,但逗号必须保留。
逗号后面使用一串字符,程序在命令行显示这串字符,这不难理解。
VbCr通常代表一个回车符,而在这个语句中,它的作用是在命令行不显示“命令:”
&的作用是连接字符。举例:
“爱我中华 ”&”抵制日货 ”&”从我做起”
z = ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值
由用户输入一个实数
On Error GoTo Err_Control '出错陷井
……
Err_Control:
On Error是出错陷井语句,在程序出错时将执行On Error 后面的语句
GoTo Err_contorl 是程序跳转语句,它的作用是在程序中寻找Err_control:,并执行这一行后面的语句,本例中Err_Control:后就是结束宏,所以只要出现错误,程序中止。
Do '开始循环
……
Loop ‘结束循环
这个循环就历害了,它会无休止地进行循环,好在本例中已经有了一个出错陷井,当用户输入回车时,由于程序没有得到点或坐标,程序出错,跳出循环,中止程序。如果要人为控制跳出循环,可以在代码中用Exit Do语句跳出循环。在For 变量 和Next 变量之间如果要跳出循环,那么只要在循环体内加一个Exit for 就可以跳出循环,关于这方面的例程以后会讲到。
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '画直线
画直线方法也是很常用的,它的两个参数是点坐标变量
本课到此结束,请做思考题:
连续画圆,每次要求用户输入圆心、半径,当用户不再输入圆心或半径时程序才退出
第四课 程序的调试和保存
人非圣贤,孰能无过,初学者在编写复杂程序时往往会出现一些意想不到的错误,所以程序的调试显得尤为重要,随着学习的深入,以后我们需要经常进行程序调试。事实上,对于那些资深程序员来说,调试程序也是一项不可或缺的重要工作。
首先,在程序输入阶段,应该充分利用VBA编辑器的智能功能。当你在写代码时,输入一些字母后,编辑器可以自动列出合适的语句、对象、函数供你选择,可以用上下键选择,然后按TAB键(它位于“Q”键左边)确认。当输入一个回车符后程序会自动对这条语句进行分析,如果出现错误就会提示。
我们经常碰到的麻烦是程序的运行结果和预计的不一样,一般我会这样做:首先要想一想可能是哪一个变量有问题,然后去监视这个变量(或表达式),在程序合适的位置设置断点,这样可以使程序停下来看一看这个变量有没有按照我的设想在变化。下面我举一个简单的例子,先看源代码:
sub test()
for i=2 to 4 step 0.6
next i
end sub
这是一个非常简单的循环,每一次循环i便会增加0.6,当循环3次后i值就变为4.4,但问题是每一次循环时i值变为多少?
第一步:在菜单中选“调试”—“添加监视”,在表达试中填“i”,点击确定,这时你会看到临视窗口中会多一行。
第二步:把光标移到代码窗口中的“next i”行,按一下“F9”,于是每当程序运行到这里时就会暂停了。
好,一切就绪,请按F5执行程序,在监视窗口中C值立刻变为2,再按F5继续,C值为2.6,再按几次F5,直到程序结束,这样我们就成功监视了C值的变化。
第三步:在next i行再按一次F9,清除断点。监视的表达式的右键菜单选择“删除监视”。
另外,还可以用“逐语句”、“逐过程”、“运行到光标处”等方法进行调试,这些都在调试菜单中,操作比较简单,请读者自行领悟。
到目前为止,我们所做的工程都是“嵌入式工程”,它只是嵌入在当前的Autocad图形文件中, 以后打开这个文件时代码才会加载,如果别的dwg文件也要使用,那就需要把代码导出为.bas文件,供其他dwg文件导入。在VBA编辑器的“文件”菜单中有这两个功能,一试便知。
ACAD VBA还有一种工程叫“通用式工程”,只要进入ACAD就可以运行,程序可以在不同用户、不同的图形文件中共享,但是由于VBA功能太强,有时候会出现一些意想不到的事情,所以在学习阶段请暂时不要这样做。
本课结束,请做思考题;监视下列代码中的i和j的值,注意,此题虽然要监视2个变量,但是在代窗口中只要设置1个断点就足够了。
sub test()
for i=2 to 4 step 0.6
for j=-5 to 2 step 5.5
next j
next i
end sub
第五课 画函数曲线
先画一组下图抛物线。
下面是源码:
Sub myl()
Dim p(0 To 49) As Double '定义点坐标
Dim myl As Object '定义引用曲线对象变量
co = 15 '定义颜色
For a = 0.01 To 1 Step 0.02 '开始循环画抛物线
For i = -24 To 24 Step 2 '开始画多段线
j = i + 24 '确定数组元素
p(j) = i '横坐标
p(j + 1) = a * p(j) * p(j) / 10 '纵坐标
Next i '至此p(0)-p(40)所有元素已定义,结束循环
Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '画多段线
myl.Color = co '设置颜色属性
co = co + 1 '改变颜色,供下次定义曲线颜色
Next a
End sub
为了鼓励大家积极思考,从本课开始,我不再解释每一条语句的作用,只对以前没有提过的语句进行一些解释,也许你一时很难明白,建议用上一课提到的跟踪变量、添加断点的办法领悟每一条语句的作用。
在跟踪变量p时请在跟踪窗口中单击变量p前的+号,这样可以看清数组p中每一个元素的变化。
ACAD没有现成的画抛物线命令,我们只能用程序编写多段线画近似抛物线。理论上,抛物线的X值可以是无限小、无限大,这里取值范围在正负24之间。
程序第二行:Dim myl As Object '定义引用曲线对象变量
Object也是一种变量类型,它可以把变量定义为对象,本例中myl变量将引用多段线,所以要定义为Objet类型。
看画多段线命令:
Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '画多段线
其中括号中的p是一个数组,这个数组的元素数必须是偶数,每两个元数作为一个点坐标。
等号前面部分“Set myl”的作用就将myl变量去引用画好的多段线。
myl.Color = co '设置颜色属性。在ACAD中,颜色可以用数字表示,本例中co会增值,这样就会有五彩缤纷的效果。
本课第二张图:正弦曲线,下面是源码:
Sub sinl()
Dim p(0 To 719) As Double '定义点坐标
For i = 0 To 718 Step 2 '开始画多段线
p(i) = i * 2 * 3.1415926535897 / 360 '横坐标
p(i + 1) = 2 * Sin(p(i)) '纵坐标
Next i
ThisDrawing.ModelSpace.AddLightWeightPolyline (p) '画多段线
ZoomExtents '显示整个图形
End Sub
p(i) = i * 2 * 3.1415926535897 / 360 '横坐标
横坐标表示角度,后面表达式的作用是把角度转化弧度
ZoomExtents语句是缩放命令,它的作用是显示整个图形,消除图形以外的区域
本课思考题:画一条抛物线:y=0.5*x*x+3,其中X取值范围在正负50之间
第六课 数据类型的转换
上一节课我们用一个简单的公式把角度转化为弧度,这样做便于大家理解。不过VBA中有现成的方法可以转换数据类型。
我们举例说明:
jd = ThisDrawing.Utility.AngleToReal(30, 0)
这个表达式把角度30度转化为弧度,结果是.523598775598299。
AngleToReal需要两个参数,前面是表示要转换角度的数字,而后面一个参数可以取值为0-4之间的整数,有如下意义:
0:十进制角度;1:度分秒格式;2:梯度;3:弧度;4:测地单位
例:id= ThisDrawing.Utility.AngleToReal("62d30' 10""", 1)
这个表达式计算62度30分10秒的弧度
再看将字符串转换为实数的方法:DistanceToReal
需要两个参数,前一个参数是表示数值的字符串,后面可以取值1-5,表示数据格式,有如下意义:
1:科学计数;2:十进制;3:工程计数——英尺加英寸;4:建筑计数——英尺加分数英寸;5:分数格式。
例:以下表达式得到一个12.5的实数
temp1 = ThisDrawing.Utility.DistanceToReal("1.25E+01", 1)
temp2 = ThisDrawing.Utility.DistanceToReal("12.5", 2)
temp3 = ThisDrawing.Utility.DistanceToReal("12 1/2", 5)
而realtostring方法正好相反,它把一个实数转换为字符串。它需要3个参数
第一个参数是一个实数,第二个参数表示数据格式,含义同上,最后一个参数表示精确到几位小数。
temp1= ThisDrawing.Utility.RealToString(12.5, 1, 3)
得到这个字符串:“1.250E+01”,
下面介绍一些数型转换函数:
Cint,获得一个整数,例:Cint(3.14159) ,得到3
Cvar,获得一个Variant类型的数值,例:Cvar("123" & "00"),得到”12300”
Cdate,转换为date数据类型,例:MyShortTime = CDate("11:13:14 AM")
下面的代码可以写出一串数字,从000-099。
Sub test()
Dim add0 As String
Dim text As String
Dim p(0 To 2) As Double
p(1) = 0 'Y坐标为0
p(2) = 0 'Z坐标为0
For i = 0 To 99 '开始循环
If i < 10 Then '如果小于10
add0 = "00" '需要加00
Else '否则
add0 = "0" '需要加0
End If
text = add0 & CStr(i) '加零,并转换数据
p(0) = i * 100 'X坐标
Call ThisDrawing.ModelSpace.AddText(text, p, 4) '写字
Next i
End Sub
重点解释条件判断语句:
If 条件表达式 Then
……
Else
……
End if
如果满足条件那么程序往下执行,到else时不再往下执行,直接跳到End if后面
如果不满足条件,程序跳到else后往下运行。
Call ThisDrawing.ModelSpace.AddText(text, p, 4) '写字
这是写单行文本,需要三个参数,分别是:写的内容、位置、字高
第七课 写文字
客观地说,ACAD写字功能不够历害,而用VBA可以使写字效率更高。比较正规的做法是把定义文字样式,用样式来控制文字的特性。我们还是用实例来学习,先看下面一段代码,它的作用是先创建一个文字样式,然后用这个文字样式写一段多行文本。
Sub txt()
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式
Dim p(0 To 2) As Double '定义坐标变量
p(0) = 100: p(1) = 100: p(2) = 0 '坐标赋值
Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体
mytxt.Height = 100 '字高
mytxt.Width = 0.8 '宽高比
mytxt.ObliqueAngle = ThisDrawing.Utility.AngleToReal(3, 0) '倾斜角度(需转为弧度)
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt
Set txtobj = ThisDrawing.ModelSpace.AddMText(p, 1400, "\P" & "此心自光明正大,过人远矣")
txtobj.LineSpacingFactor = 2 '指定行间距
txtobj.AttachmentPoint = 3 '右对齐(1为左对齐,2为居中)
End Sub
我们看这条语句
Set mytxt = ThisDrawing.TextStyles.Add("mytxt")
添加文本样式并赋值给mytxt变量,只需要一个参数:文本样式名
fontfile、height、width、ObliqueAngle是文本样式最常用的属性
Call ThisDrawing.ModelSpace.AddMText(p, 1400, "\P" & "此心自光明正大,过人远矣")
这条语句是写文本,需要三个参数。第一个参数p是坐标,1400是宽度,最后一个参数是文本内容,其中\p是一个回车符
扩大字符间距用\T数字,例:\T3abc,使文字abc的间距扩大3 部,n取值范围是0.75-3
在论坛中有一个经常被同好提及的问题:如何使用文字叠加。举例说明:123\S+0.12^-0.34
\S是格式字符,^是分隔符,前面的数字在上,后面的数字在下。
\C是颜色格式字符,C后面跟一个数字表示颜色
\A是对齐方式,\A0,\A1,\A2分别表示底部对齐、中间对齐和顶部对齐
够不够,不够的话给个邮箱,我再发给你一个pdf文件!
‘叁’ 作为一个程序员,选择哪些兼职比较好,希望给一个较好的方案(计划),谢谢
接私活
大多数程序员想要在业余的时间挣点钱,第一想到的就是它,毕竟这是程序员本职的工作。但问题是哪里找私活?私活该怎么定价?这里大家优先选择熟人推荐的,比如你的朋友、同事、或者同事的同事等等。他们所在的公司可能刚好需要这样的私活需要找人做,比较靠谱。其次去各大外包网站寻找,很多技术网站都有人发布一些私活项目,网上搜索下就会找的到。那么私活该怎么定价?首先肯定是不能比你的工资低,不管是按时薪算还是月薪算,因为对于程序员来说你的业余时间比你工作时间更宝贵。
但这种接私活的方式并不是很推荐,自己最开始工作的时候有接过一个私活,但是后来就没做了。因为太累了,而且费心。如果你遇到雇主不是从事互联网的人,有可能连他自己的需求都理不清,就开始叫你做。做到一半的时候,又重新改需求。并且有时候做完的私活,尾款难以收到。
录制视频课程
现在在线教育大家越来越能接受,不管是网上的免费课程还是收费课程,总有受众人群的。所以这就是衍生了一种赚外快的方式,就是录制视频课程。一般录制的课程分为两种:免费课程和收费课程。免费课程是按照课程时长来算,一般至少是每小时 1000 - 2000 块,不同的网站与不同的课程级别,价格有浮动,但是这个时长是按照最后剪辑的市场,也就是说,最后剪辑的 1 小时课程,你很可能录制了 2、3 小时。当然,一开始录制会比较麻烦些,但是一旦上手了,后面录制就会比较快了,一般来说,每月靠录制课程赚个 5、6 K 是没有问题的。
还有一种是收费课程,但是收费课程一般都寻找一些大公司 title 好听的,或者有点名气的。因为这样才能吸引用户付费购买。收费课程除了录制课程费用,还有一定的提成,提成标准每家也都有所不同。如果你能力还不错,去录制一些免费课程应该没问题,如果你在业界小有名气,那只要你愿意,那肯定是没有问题。
自媒体
如今自媒体如日中天,以今日头条为首的自媒体平台非常的多。有的人玩今日头条年收入 50 万,有的人月收入一万。当然那些人都是全职在玩今日头条,但对于我们来说,利用业余时间每个月赚几千还是很轻松的。就已今日头条来说,你过了新手期,就会自动帮你开通头条广告。也就是说你以后发布的文章、视频、图集只要有阅读量就会有收益。今日头条视频一万点击量的单价是在 3-4 元左右,如果你开通原创之后一万点击量单价则高达 10-12 元。
‘肆’ :听到两个程序员聊天——A:“借我1000块。”B:“拿去,1024块,我给你凑了个整儿。” ——我
程序员认为 千(k) == 1024.
例: 程序员换算表: 1km == 1024m, 1kg == 1024g.
因: 成因很曲折 计算机是二进制的世界 -> 1024是2的10次方 -> 英语里用kilo一词来表示 -> kilo翻译成中文是”千”, 比如千米, 千克.
评: 也许一般人会认为500, 1000是很整的数, 但程序员会觉得512, 1024是很整的数. 不要奇怪, 如果128, 256, 512 这种形式看着不够整, 帮你转换成二进制: 10000000, 100000000, 1000000000…
‘伍’ C++ 编程,编写一个收银员程序以计算购物清单的总价格,最终输入“ END”表示结束,求代码
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
int Q;
double U, sum = 0;
string N, Find;
map<string, map<double, int>> item;
while (cin >> N) {
if (N == "END")
break;
cin >> U >> Q;
sum += U * Q;
item.insert(make_pair(N, map<double, int> {{U, Q}}));
}
cout << sum << endl;
cin >> Find;
map<string, map<double, int>>::iterator iter;
iter = item.find(Find);
cout << (iter->second.begin()->second) << endl;
return 0;
}
‘陆’ 一名优秀的JAVA程序员平常一天至少写多少行代码
优秀的JAVA程序员平常一天至少写150行代码,普通的JAVA程序员,平均一天的有效代码量大概是50~70行, 注意是有效代码。