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

函数的定义

函数是一段代码的表示

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

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

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

求一个阶乘

 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() 函数,使得可以绘制出当前日期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4604.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计量】回归背后的微操作——论文自救记录(进行中)

【计量】回归背后的微操作 1. 变量的选择 与 模型的设定 https://zhuanlan.zhihu.com/p/50577508?yidian_smb 2. 变量的处理 2.1 常用的处理——中心化、标准化、归一化 目的:统一量纲(Scale)—— 可以理解成 100分制下,1 2分…

Spring Security 6.0系列【2】认证篇之使用数据库存储用户

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录前言1. 环境搭建1.1 创建用户表1.…

Oracle用户密码过期,修改永不过期

修改密码有效过期时间,可以通过以下四步设置,如果再第一步发现本身的密码过期时间为无限期的,那就请各位小伙伴绕过,如果发现不是无期限的,那么必须设置第四步,才会生效。 目录 第一步:查询密码…

实验三 数据更新及视图

实验三 数据更新及视图 1.实验目的 1.加深对数据库相关性质的理解; 2.各种约束性理解; 3.学会数据库中数据的更新的方法; 4.学会视图的创建与查询。 2.实验内容 对已建好的各表输入适当的数据并练习数据的插入、删除和修改,注意…

瑞吉外卖项目Day2———完善登录问题、员工功能

创建过滤器类(filter) package com.study.filter;import com.alibaba.fastjson.JSON; import com.study.common.R; import lombok.extern.slf4j.Slf4j; import org.springframework.util.AntPathMatcher;import javax.servlet.*; import javax.servlet.annotation.WebFilter; …

华为OD机试题,用 Java 解【统计匹配的二元组个数】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:统计匹配的二元组个数 题目 给…

串口,IIC,SPI,USB等总线叙述

串口,IIC,SPI,USB等总线叙述 文章目录串口,IIC,SPI,USB等总线叙述1 串口2.I2C3.SPI4.USB控制(Control)传输方式同步(Isochronous)传输方式中断(In…

在等GPT-5多模态?试试Genmo!Adobe AI首轮内测报告;ChatGPT三条使用哲学与实践;论文追更与阅读神器 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『微软 New Bing 引入广告』日活跃用户超1亿,探索广告投放的未来 微软正在尝试在 New Bing 的聊天回复中投放广告。虽然广…

【11】Activity的生命周期

其实Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity 的集合,这个栈也被称作返回栈(back stack)。栈是一种后进先出的数据结构,在默认情况 下,每当我们启动了一个新的Activity,它就会在…

【机器学习】03-转换器和预估器、K-近邻算法、朴素贝叶斯算法、决策树等算法知识

分类算法 一、sklearn转换器和预估器 1 转换器 - 特征工程的父类 fit_transform()fit() 计算 每一列的平均值、标准差transform() (x - mean) / std进行最终的转换 2 估计器(sklearn机器学习算法的实现) 估计器(estimator)–一类实现算法的API 实例化一个estimatorestimat…

剑指offer JZ23 链表中环的入口结点

Java JZ23 链表中环的入口结点 文章目录Java JZ23 链表中环的入口结点一、题目描述二、hash法,记录第一次重复的结点三、快慢指针法使用hash法和快慢指针法解决剑指offer 第JZ23 链表中环的入口结点的问题。 一、题目描述 给一个长度为n链表,若其中包含环…

【新】(2023Q2模拟题JAVA)华为OD机试 - 寻找链表的中间结点

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:寻找链表的中间结点 题目 给…

利用自动化平台可以做的那亿点事 |得物技术

前言 相信大家对接口自动化已经不陌生了,这是几乎我们每个迭代都会投入的事情,但耗费了这么多精力去编写和维护,实际的收益如何呢?如果收益不好,是不是说明我们自动化 case 的实现方式、使用方式还有改进的地方呢&…

第09章_子查询

第09章_子查询 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…

【ABAP】ME55双击跳转MD04增强

最近收到了一个需求,大致的要求是在标准报表ME55的ALV短文本列双击后跳转到MD04的详情。刚开始没有找到增强点想用间接的办法实现,在ME55上增加一列,展示想看到的内容,最后由于需要展示的内容太多,该方案被舍弃。 经过…

深度学习实战19(进阶版)-SpeakGPT的本地实现部署测试,基于ChatGPT在自己的平台实现SpeakGPT功能

大家好,我是微学AI,今天给大家带来SpeakGPT的本地实现,在自己的网页部署,可随时随地通过语音进行问答,本项目项目是基于ChatGPT的语音版,我称之为SpeakGPT。 ChatGPT最近大火,其实在去年12月份…

SpringBoot @Transactional事务详解

事务用处及作用 事务主要是保证数据统一、一致的一种操作。 详细的一些专用术语在此这里不会说太多,如需了解自行百度了(还不是枯燥乏味),大致就是这意思。 事务用处 比如坤坤,坤坤拿着100元去买鸡,一个…

JAVA ---程序流程

(一)引言 在生活中,我们经常会发现在医院或者官方机构办事是要走流程的,同样的程序必须能操控自己的世界,在执行过程中作出判断与选择。在Java中,通过流程控制语句可实现程序执行流程的随意控制&#xff0…

C#中使用I/O文件流

流,即是二进制数值,文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。 在 .NET 中,System.IO 命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。 这些命名空间还包含对文件执行压…

Android开发 Intent

1. Intent 在组件之间传递信息,一般需要设置发送方,接收方和数据。 下图是Intent 的常用属性: 2. Intent分类 1)显式Intent:精确匹配发送方和接收方 方法一: startActivity(new Intent(this,MainActiv…