Python程序语言学习——实验作业04——函数的应用

简要记录下本次实验作业的内容和总结。(因为觉得在文章首部添加目录没多大意思,就删了。)

实验1. 利用自定义函数求所有水仙花数,并用逗号隔开输出。 所谓水仙花数是一个三位数,其每位上的数字的立方和等于其本身, 如153 = 1^3 + 5^3 + 3^3 故153是水仙花数。

查看代码

 def flowerNumer(n):
     n1 = sum(int(i) ** 3 for i in list(n))
     return n if (int(n) == n1) else 0
 ​
 ​
 if __name__ == '__main__':
     num_list = [str(i) for i in range(100, 1000) if flowerNumer(str(i))]
     print("所有的水仙花数有:" + ','.join(num_list))

实验2. 回文数判断。 设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。 从键盘输入一个5位数字,请编写程序判断这个数是不是回文数。 如:123454321和9889就是回文数。

查看代码

 import sys
 ​
 ​
 def palindrome_num(n):
     # reversed()返回的是一个对象,需转换成序列
     n1 = ''.join(reversed(n))
     s = "是回文数" if str(n) == n1 else "不是回文数"
     # n1 = list(reversed(n))
     # s = "是回文数" if list(n) == n1 else "不是回文数"
     # n1 = tuple(reversed(n))
     # s = "是回文数" if tuple(n)==n1 else "不是回文数"
     print(n + s)
 ​
 ​
 def isValid(msg):
     # 若输入的不是整数或者不是5位数  # 输出:“输入不合法!”,并不返回任何值
     # 法二:
     # return 1 if msg.isnumeric() and len(msg) == 5 else "输入不合法!"
     if msg.isnumeric() and len(msg) == 5:
         return 1
     else:  # 若输入的不是整数或者不是5位数
         print("输入不合法!")  # 输出:“输入不合法!”,并不返回任何值
 ​
 ​
 if __name__ == '__main__':
     while True:
         num = input("请输入一个5位数:")
         if num == '0':
             sys.exit()
         if isValid(num) is None: # 若返回值为None,即输入不合法,重新输入
             continue
         else:  # 否则调用palindrome_num()判断num是否是回文数
             palindrome_num(num)
         #  法二:
         # if isValid(num) == 1:
         #     palindrome_num(num)
         # else:
         #     print(isValid(num))
         #     continue

实验3. 三角形判断。 编写函数判断输入的3个数字是否能构成三角形的3条边。

查看代码

import sys
 ​
 ​
 def isTriangle(num_t):
     a, b, c = num_t
     if ((a + b) > c) and ((a + c) > b) and ((b + c) > a):
         print("{},{},{} 可以构成一个三角形".format(a, b, c))
     else:
         print("{},{},{} 不可以构成一个三角形".format(a, b, c))
 ​
 ​
 def isValid(n):
     try:
         a, b, c = n.split()
         a = float(a)
         b = float(b)
         c = float(c)
         if a > 0 and b > 0 and c > 0:
             return a, b, c  # 以元组的形式返回三边的值
         else:
             # 若a,b,c任意一个值小于零,不返回任何值
             print("输入不合法!")
     except ValueError:
         # 若a,b,c任意一个值不是整数或小数,不返回任何值
         print("输入不合法!")
 ​
 ​
 if __name__ == '__main__':
     while True:
         num = input("请输入三个数,以空格分隔:")
         if num == '':
             # 当不输入任何字符时,退出程序
             sys.exit('\n退出程序')
         if isValid(num) is None:
             # isValid()无返回值,即输入不合法,继续执行
             continue
         else:
             # 否则 将返回值传入isTriangle()
             isTriangle(isValid(num))

实验4. 七段数码管绘制:通过绘制七段数码管理解使用函数及其封装的价值。

查看代码

import time
 from turtle import *
 ​
 ​
 def drawGap():  # 绘制数码管间隔
     penup()  # 提起笔移动,不绘制图形,用于另起一个地方绘制
     fd(5)  # 向当前画笔方向移动 5 像素长度
 ​
 ​
 def drawLine(draw):  # 绘制单段数码管
     drawGap()  # 调用drawGap() ,绘制间隔
     # turtle.pendown() 移动时绘制图形,缺省时也为绘制
     pendown() if draw else penup() # draw不为0绘制图形,否则另起一个地方
     fd(40)  # 画笔向当前方向绘制40像素长的线条
     drawGap()  # 调用drawGap(),绘制间隔
     right(90)  # 顺时针移动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)
     left(90)  # 逆时针移动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)
     left(180)  # 逆时针移动180°
     penup()  # 画笔另起一个新的点
     fd(20)  # 沿当前方向移动20像素
 ​
 ​
 def drawDate(date):
     pencolor('light coral')  # 设置画笔的颜色为淡珊瑚色,默认初始值为黑色
     for i in date:
         if not i.isnumeric():
             sety(-50)
             pencolor('wheat')
             if i == '-':
                 write('年', font = ('微软雅黑', 24, 'normal'))
                 pencolor('lightblue')  # 设置画笔的颜色为“lightblue”
                 fd(45)
             elif i == '=':
                 write('月', font = ('微软雅黑', 24, 'normal'))
                 pencolor('lightpink')  # 设置画笔的颜色为“lightpink”
             elif i == '+':
                 write('日', font = ('微软雅黑', 24, 'normal'))
         else:
             drawDigit(eval(i))
         sety(0)
 ​
 ​
 if __name__ == '__main__':
     # 坐标位置(200,200)处绘制一个大小为 800*350像素的画布
     setup(800, 350, 200, 200)
     screensize(bg = 'lightyellow')
     penup()  # 开始绘制
     hideturtle()  # 绘制完日期,隐藏画笔的turtle形状
     speed('fastest')
     fd(-350)
     pensize(5)  # 定义画笔的大小为 5
     # 使用strftime 方法将 gmtime() 获取的当前的日期以“%Y-%m=%d+”的格式赋值给变量a
     a = time.strftime("%Y-%m=%d+", time.gmtime())
     drawDate(a)  # 调用自定义函数 drawDate()
     done()  # 必须是图形绘制程序的最后一个语句

自定义函数floweNumber(),传入参数为n,用sum()中嵌套元组生成式求各个位数上的数字立方和n1。当满足原数 n == n1时,返回n,否则返回0。

在主函数中,调用自定义函数floweNumber(),传入参数i的范围在[100,1000)内。若返回值不为0,将数字i添加到列表num_list中。最后用’,’jion(num_list)将所有水仙花数以英文逗号分隔输出。

注意:传入参数i需转换成字符串,以便在floweNumber() 中可以使用sum()中嵌套元组生成式的方式逐个计算每位数的立方和,最后添加到列表时也需要将i转换成字符串,因为join()的参数必须是Iterable的,数字不是Iterable的。

因为需要输入,所以自定义一个对输入值合法的判断的函数 isValid()。根据题目要求,必须是5位数的数字,那么输入值不能是非整数,且长度为5。

定义一个用于判断是否是回文数的函数palindrome_num(),用reversed()反转传入参数n,并赋值给新的变量n1。由于reversed()返回的是一个对象,需转换成序列,我用join()将其转换成字符串。然后比较 str(n) == n1,若相等,字符型 s = "是回文数",否则 s = "不是回文数",最终输出 n+s的结果。即传入值是否是回文数。

在主函数中调用isValid()将输入值num作为参数传入,若满足要求,即是5长度为5的整数,返回1,否则输出”输入不合法!”并且不返回任何值。若判断调用isValid()的值若为None,结束当前循环,重新执行;否则调用自定义函数palindrome_num(),传入num。

变量num获取控制台输入的三个数,以空格间隔。定义一个判断输入值合法的函数isValid(),num作为参数传入,变量a,b,c分别对应输入的三个数,并将三个数转换成float类型,(input()获取的是一个字符串)。判断a,b,c是否都大于0,是则以元组形式返回三个数,否则输出”输入不合法!”并不返回值。在进行前面的操作时,可能会出现因为a,b,c任意一个值不是整数或小数,或者控制台输入的数据不是3个的情况,需要获取try: except获取ValueError异常,输出提示”输入不合法!”并不返回任何值。

在主函数中,首先要对num进行判断是否为空,若为空则退出程序。然后判断调用isValid()函数的返回值是否为None,若是,即输入不合法,终止本次循环,重新执行;否则调用isTriangle() 判断是三个数否能构成三角形。如果输入合法,isValid()返回的是三个数的元组,将返回值传入isTriangle()中,再用变量a,b,c分别获取元组中的三个数,判断是否满足任意两个数之和都大于第三个数,并输出相应的结论。

由于源代码是由老师提供的,所以我对源代码进行了一些个性化的修改。主要研究了其中的一些函数方法。接下来,我将对我在这个专题中学到的新知识做一个简单的总结。

[En]

Since the source code is provided by the teacher, I made a little personalized modification to the source code. It mainly studies some of the function methods. Next, I will make a simple summary of the new knowledge I have learned in this feature.

参考资料:

Original: https://www.cnblogs.com/XSem/p/16154253.html
Author: 阿银呀
Title: Python程序语言学习——实验作业04——函数的应用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499924/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Sharding-JDBC(四)集成dynamic-datasource

    目录 * – 1.Maven依赖 – 2.yml配置 – 3.DataSourceConfig.java – 4.TUserServ…

    Python 2023年9月28日
    056
  • 只需几个命令,轻松学scrapy爬虫爬小说

    环境:python3.9(PATH变量已设置) 首先我们打开一个cmd命令提示符,windows10下就powershell吧,创建一个scrapy命令可以执行的项目环境: F:\…

    Python 2023年10月4日
    036
  • 25~30K的学员面试考题,10分钟就写完?

    前言 今天的这个案例,是一位同学的面试题,人在国外,月薪25~30K原来以为是很难的反爬行、反向或算法等等,谁知道,是一个很简单的爬虫 [En] Originally though…

    Python 2023年5月24日
    057
  • 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

    摘要:本文讲述图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp()和pyrDown()函数。 一.图像金字塔 图像金字塔是指由一组图像且不同分别率的子图集合,它是图像…

    Python 2023年10月31日
    046
  • HTML详解

    一、初识HTML 初始基本标签代码解释 点击查看代码 <!–DOCTYPE:告诉浏览器我们要使用什么规范–> <!DOCTYPE html> <h…

    Python 2023年6月9日
    075
  • Django中如何实现常规的数据库表操作

    一.前言 Django中实现了一套操作数据库的强大API,今天博主想按照数据库学习的常规思路来分享一下如何在Django中实现一些常规的数据库操作,话不多说,请看下文的干货。 二….

    Python 2023年8月6日
    057
  • Tensor的创建方法

    1、直接创建Tensor——torch.tensor() 2、从numpy创建tensor——torch.from_numpy(ndarray) 3、根据数值创建tensor (1…

    Python 2023年8月1日
    077
  • BUUCTF刷题十一道(05)

    文章目录 [HCTF 2018]admin * flask session [网鼎杯 2018]Fakebook [NCTF2019]Fake XML cookbook [安洵杯 …

    Python 2023年8月15日
    069
  • 基于android手机的健身预约系统APP开发

    博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开…

    Python 2023年11月7日
    036
  • Pandas时间序列处理

    pd.date_ranges生成时间序列 time格式:年月日分隔符号可以是”-“,”/”,空格这三种格式(年月日、日月年、月日年都…

    Python 2023年8月22日
    049
  • python flask + js ajax + echarts 53万条招聘信息可视化系统的渣实现

    (从0到1非常详细步骤)flask+ajax+echarts 53万条招聘信息可视化系统的实现 本篇blog默认:您已经入门echarts、html、js、json、python,…

    Python 2023年8月14日
    045
  • windows系统搭建Django虚拟环境

    一、创建文件夹 在e盘创建了一个文件夹作为虚拟环境的文件夹 文件夹创建好后,打开文件夹,在上方网址栏输入cmd,打开命令提示符。 二、搭建环境 电脑中建议安装的是python3.6…

    Python 2023年8月6日
    055
  • JS中的reduce()函数介绍

    定义 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。 reduce() 可以作为一个高阶函数,用于函数的 compose。 注…

    Python 2023年8月23日
    044
  • 进程概念——Linux

    “技术是时间积淀出来的,你能速成的东西,别人也可以速成,所以需要耐心学习” 猛戳订阅🍁🍁 👉Linux操作系统详解👈 🍁🍁 这里是目录标题 一、冯诺依曼结构…

    Python 2023年11月5日
    037
  • Python中的路径

    windows路径使用的是\,linux路径使用的是/。 特别的,在windows系统中如果有这样的一个路径 D:\nxxx\txxx\x1,程序会报错。因为在路径中存在特殊符 \…

    Python 2023年6月3日
    070
  • Python教程:with语句的用法

    上下文管理协议(Context Management Protocol):包含方法 __enter__()和 __exit__(),支持该协议的对象要实现这两个方法。 上下文管理器…

    Python 2023年11月1日
    050
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球