当前位置: 首页 > news >正文

函数的定义与使用及七段数码管绘制

函数的定义

函数是一段代码的表示

函数是一段具有特定功能的、可重用的语句组

函数是一种功能的抽象,一般函数表达特定功能

两个作用:降低编程难度 和 代码复用

求一个阶乘

 fact就是 函数名 n就是参数 return就是输出部分即返回值

而函数的调用就是函数名()即调用 函数调用之后得到返回值 

函数是ipo的实现,也是完整代码的封装

必须要有的参数放在前面,你要先给它值,而可以有可以没有的让它放在后面,这是一种约定 或者是强制约定

 这个就是可选参数,你没有给它传值,它就按照默认的执行

  这样就可以求n!*m!值了,只需要在定义的时候使用*,这样你在传参的时候就可以声明多个参数了相当于*m=(2,3,2)

 就是一个指定了名字

如果要在return中返回多个返回值,可以在参数直接使 用分割 

 

 

 就是说即使我们定义的这个函数中,没有使用global声明,但是经过这个函数的调用,我们已经修改了全局变量添加了c 

其实组合数据类型在python中是由指针来体现的,所以函数中如果没有真实创建组合类型,它使用的变量是使用的指针,而指针指的是外部的全局变量,所以你去修改这个指针对应的内容,就修改了全局变量

 

 

 

 

谨慎使用lambda函数 

七段数码管绘制

 

 

 

#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/3/25 12:32
# @File : 七段数据管.py
import turtle
def drawLine(draw):   #绘制单段数码管turtle.pendown() if draw else turtle.penup()turtle.fd(40)turtle.right(90)
def drawDigit(digit): #根据数字绘制七段数码管drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup()turtle.fd(20)
def drawDate(date):  #获得要输出的数字for i in date:drawDigit(eval(i))  #通过eval()函数将数字变为整数
def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate('20230325')turtle.hideturtle()turtle.done()
main()

这段代码是一个使用turtle库绘制七段数码管的程序,可以根据传入的日期数字在窗口中绘制对应的数字。

具体来说,程序中定义了三个函数:

drawLine(draw):绘制单段数码管,如果draw为True,则绘制实线,否则绘制虚线。
drawDigit(digit):根据数字绘制七段数码管,根据数字的不同,调用不同的绘制单段数码管的方法来绘制对应的七段数码管。
drawDate(date):获得要输出的数字,通过eval()函数将数字变为整数,遍历日期数字并绘制对应的数字。
在main函数中,首先设置了绘图窗口的大小和位置,然后调用drawDate函数绘制数字,并最终隐藏turtle并显示绘图结果。

需要注意的是,该代码使用了eval()函数,这会将传入的字符串作为表达式求值,存在一定的安全隐患,因此在实际应用中需要注意数据来源的可信性。

优化后的代码

import turtle, time
def drawGap(): #绘制数码管间隔turtle.penup()turtle.fd(5)
def drawLine(draw):   #绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90)
def drawDigit(d): #根据数字绘制七段数码管drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup()turtle.fd(20)
def drawDate(date):turtle.pencolor("red")for i in date:if i == '-':turtle.write('年',font=("Arial", 18, "normal"))turtle.pencolor("green")turtle.fd(40)elif i == '=':turtle.write('月',font=("Arial", 18, "normal"))turtle.pencolor("blue")turtle.fd(40)elif i == '+':turtle.write('日',font=("Arial", 18, "normal"))else:drawDigit(eval(i))
def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-350)turtle.pensize(5)
#    drawDate('2018-10=10+')drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))turtle.hideturtle()turtle.done()
main()

 添加了 drawGap() 函数来绘制数码管间隔,使得绘制出的数字更加美观。
修改了 drawLine() 函数,使得绘制单段数码管时会调用 drawGap() 函数绘制数码管间隔。
修改了 drawDate() 函数,使得绘制出的数字中,年月日之间的间隔更加明显,并且添加了字体和字号,使得绘制出的数字更加美观。
使用了 time 模块来获取当前日期,并将其作为参数传递给 drawDate() 函数,使得可以绘制出当前日期。

http://www.lryc.cn/news/44049.html

相关文章:

  • 怎么压缩pdf文件大小?pdf文件太大如何压缩?
  • 阿里云Linux服务器登录名ecs-user和root选择问题
  • 【云原生】 初体验阿里云Serverless应用引擎SAE(三),挂载配置文件使应用的配置和运行的镜像解耦
  • Oracle用户密码过期,修改永不过期
  • welearn 视听说1-4
  • 【git】将本地项目同步到远程
  • 10-链表练习-LeetCode82删除排序链表中的重复元素II
  • 贯穿设计模式第五话--接口隔离原则
  • C语言计算机二级/C语言期末考试 刷题(四)
  • JDK8中Stream接口的常用方法
  • ThingsBoard源码解析-数据订阅与规则链数据处理
  • 探究Transformer模型中不同的池化技术
  • Android 9.0 设置讯飞语音引擎为默认tts语音播报引擎
  • 直流无刷电机驱动的PWM频率
  • 机房动环监控4大价值,轻松解决学校解决问题
  • 用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)
  • Burpsuite详细教程
  • 目标检测:FP(误检)和FN(漏检)统计
  • 【MySQL专题】04、性能优化之读写分离(MyCat)
  • 信息系统项目管理师第四版知识摘编:第5章 信息系统工程
  • 【2023春招】西山居游戏研发岗笔试AK
  • 什么是分布式,分布式和集群的区别又是什么?
  • Cellchat和Cellphonedb细胞互作一些问题的解决(error和可视化)
  • 大文件分片上传的实现【前后台完整版】
  • Java序列化面试总结
  • fs的常用方法
  • 【华为OD机试 2023最新 】字符串重新排列、字符串重新排序(C++ 100%)
  • Matlab自动消除论文插图白边的7种方法
  • Python每日一练(20230330)
  • 面试官:Tomcat 在 SpringBoot 中是如何启动的(二)