Python基础入门(3)—— 什么是函数递归、字典、集合、文件操作、异常处理?

news2024/11/20 1:31:04

文章目录

  • 01 | 🚘函数 && 递归
    • 🚔函数
    • 🚔递归
  • 02 | 🚘字典
  • 03 | 🚘集合
  • 04 | 🚘文件
  • 05 | 🚘异常处理
  • 06 | 🚘习题

Better late than never.
迟做总比不做好;晚来总比不来好。

在这里插入图片描述

01 | 🚘函数 && 递归

在Python中,函数(function)和递归(recursion)是两个非常重要的概念。函数是有一定功能的代码块,可以接受参数并返回结果。递归是一种解决问题的方法,通过自身调用来解决一个问题。

以下是关于Python函数与递归的详细讲解:

🚔函数

  1. 定义函数:在Python中定义函数使用def语句,语法如下:

    def function_name(parameters):
    	function_body
    	return [expression]
    

    其中function_name是函数的名称,parameters是函数的参数,在圆括号内列出,如果没有参数,则留空。函数体包含了要执行的代码,return关键字后面的表达式是返回值(可选),它是函数调用的结果。

  2. 调用函数:要调用函数,请输入函数的名称以及任何必需的参数,并以圆括号括起来。示例:

    def my_func(name):
    	print('Hello, ' + name)
    
    my_func('Tom')     # 输出'Hello, Tom'
    
  3. 参数传递:Python中的参数有两种(位置参数和关键字参数)。位置参数是按顺序传递给函数的,而关键字参数则是通过参数名指定。示例:

    def add_numbers(x, y):
    	return x + y
    
    result1 = add_numbers(2, 3)         # 位置参数
    result2 = add_numbers(y=3, x=2)     # 关键字参数
    
    print(result1)      # 输出5
    print(result2)      # 输出5
    
  4. 默认参数:可以在函数定义时为参数指定默认值,这样在调用函数时可以不传递该参数。示例:

    def greet(name='John'):
    	print('Hello, ' + name)
    
    greet()             # 输出'Hello, John'
    greet('Tom')        # 输出'Hello, Tom'
    
  5. 不定长参数:如果不知道将要传递多少个参数,可以在函数定义中使用*args**kwargs来接受不确定数量的位置参数和关键字参数。示例:

    def my_func(*args):
    	for arg in args:
    		print(arg)
    
    my_func(1, 2, 3, 4)     # 输出1 2 3 4
    
    def my_func(**kwargs):
    	for key, value in kwargs.items():
    		print(key + ': ' + str(value))
    
    my_func(name='Tom', age=30)     # 输出'name: Tom' 和 'age: 30'
    
  6. 匿名函数(Lambda):Python支持使用lambda表达式创建匿名函数,lambda语法如下:

    lambda arguments: expression
    

    其中arguments是参数列表,expression是函数体,它是由参数产生的返回值。示例:

    add_numbers = lambda x, y: x + y     # 创建一个lambda函		数'add_numbers'
    result = add_numbers(2, 3)           # 调用lambda函数
    print(result)                        # 输出5
    

🚔递归

递归是一种在函数中调用自身以解决问题的技术。在递归函数中,需要找到基本情况和递归规则,确保在每次递归时问题的规模都缩小了。

以下是一个通过递归计算阶乘的示例:

def factorial(n):
    if n == 1:              # 基本情况
        return 1
    else:
        return n * factorial(n-1)     # 递归规则

result = factorial(5)

print(result)           # 输出120

函数递归调用的图解可以看下图示例:

在这里插入图片描述

总之,在Python中函数和递归都是重要的编程概念,而且它们可以相互结合使用来解决各种问题。函数可以接受参数并返回值,有默认参数、不定长参数和匿名函数等特性。递归则是一种解决问题的方法,通过自身调用来解决一个问题

02 | 🚘字典

在Python中,字典(Dictionary)是一种无序、可变的数据类型,用于存储键值对。它们非常灵活,在许多编程场景中都可以派上用场。以下是关于Python字典的详细讲解:

  1. 创建字典

    要创建一个字典,请使用花括号{}并以逗号分隔键值对。示例:

    my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
    

    如果希望创建一个空字典,请使用空的花括号{}。示例:

    my_dict = {}
    
  2. 访问字典内的值

    可以使用方括号[]来访问字典中的特定值,也可以使用get()方法。如果访问一个不存在的键,则会引发KeyError异常。但是如果使用get()方法,则在找不到指定键时返回None,或设置的默认值(可选参数)。示例:

    my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
    
    print(my_dict['name'])     # 输出'Tom'
    print(my_dict.get('address'))   # 输出None
    print(my_dict.get('address', 'Beijing'))     # 输出'Beijing'
    
  3. 修改字典

    要更改字典中的值,请使用给定键的索引。示例:

    my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
    
    my_dict['age'] = 40
    
    print(my_dict)      # 输出{'name': 'Tom', 'age': 40, 'gender': 'male'}
    
  4. 添加和删除键值对

    要向字典中添加一个键值对,请使用给定键的索引。示例:

    my_dict = {'name': 'Tom', 'age': 30}
    
    my_dict['gender'] = 'male'
    
    print(my_dict)      # 输出{'name': 'Tom', 'age': 30, 'gender': 'male'}
    

    要从字典中删除一个键值对,请使用del语句或pop()方法。示例:

    my_dict = {'name': 'Tom', 'age': 30}
    
    del my_dict['age']
    
    print(my_dict)      # 输出{'name': 'Tom'}
    
    my_dict.pop('name')
    
    print(my_dict)      # 输出{}
    
  5. 字典长度和键值大小写转换

    要获取字典中的键数,请使用len()函数。要将字典中的所有键转换为小写或大写,请使用keys()和lower()或upper()方法。示例:

    my_dict = {'Name': 'Tom', 'Age': 30, 'Gender': 'male'}
    
    print(len(my_dict))       # 输出3
    
    lower_keys = [key.lower() for key in my_dict.keys()]
    
    print(lower_keys)         # 输出['name', 'age', 'gender']
    

    总之,在Python中,字典是一种非常有用的数据类型,可以存储键值对并提供快速且方便的访问。通过学习如何创建、访问、修改、添加和删除字典,并掌握一些基本的方法和技巧,能更好地应用它们来解决各种编程问题。

03 | 🚘集合

在Python中,集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。它们非常有用,可以帮助解决各种编程问题。以下是关于Python集合的详细讲解:

  1. 创建集合

    要创建一个集合,请使用花括号{}或set()函数,并以逗号分隔多个元素。示例:

    my_set = {1, 2, 3}
    
    my_set = set([1, 2, 3])
    

    如果希望创建一个空集合,请不要使用空的花括号{},因为这将创建一个空字典。相反,您应该使用set()函数。示例:

    my_set = set()
    
  2. 集合操作

    与其他数据类型一样,集合也支持各种操作。以下是几个重要的集合操作:

    1. 添加元素:可以使用add()方法向集合中添加元素,或使用update()方法向其添加另一个集合。示例:

      my_set = {1, 2, 3}
      
      my_set.add(4)
      
      print(my_set)    # 输出{1, 2, 3, 4}
      
      my_set.update({4, 5, 6})
      
      print(my_set)    # 输出{1, 2, 3, 4, 5, 6}
      
    2. 删除元素:可以使用remove()或discard()方法删除集合中的元素。remove()方法在需要删除的元素不存在时会引发KeyError异常,而discard()方法则不会。示例:

      my_set = {1, 2, 3}
      
      my_set.remove(2)
      
      print(my_set)    # 输出{1, 3}
      
      my_set.discard(4)
      
      print(my_set)    # 输出{1, 3}
      
    3. 集合运算:可以使用一些内置函数执行集合操作(如联合、交集和差异)。这些操作包括union()、intersection()和difference()。示例:

      set_a = {1, 2, 3}
      set_b = {3, 4, 5}
      
      set_c = set_a.union(set_b)
      
      print(set_c)     # 输出{1, 2, 3, 4, 5}
      
      set_d = set_a.intersection(set_b)
      
      print(set_d)     # 输出{3}
      
      set_e = set_a.difference(set_b)
      
      print(set_e)     # 输出{1, 2}
      
  3. 集合推导式

    与列表推导式类似,Python也具有集合推导式的概念。它允许将一行代码转换为集合中的多个元素。示例:

    my_set = {x**2 for x in range(10)}
    
    print(my_set)    # 输出{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
    

总之,在Python中,集合是一种非常有用的数据类型。通过学习如何创建、添加、删除和操作集合,并掌握一些基本的技巧,能更好地应用它们来解决各种编程问题。

04 | 🚘文件

在Python中,文件操作是一种非常常见的编程任务。它可以帮助读取、写入和操作文件数据。以下是关于Python文件操作的详细讲解:

  1. 打开文件

    要读取或写入文件,请首先打开它。在Python中,使用open()函数可以打开一个文件,该函数接受两个参数:文件名和打开模式。

    打开模式用于指定文件应如何打开。有几种不同的模式可用,包括:

    1. “r”:读取模式。默认值。如果文件不存在,则引发FileNotFoundError异常。

    2. “w”:写入模式。如果文件已存在,则其内容将被清除。如果文件不存在,则创建一个新文件。

    3. “a”:追加模式。将新内容添加到文件的末尾。如果文件不存在,则创建一个新文件。

    4. “x”:独占排他模式。创建文件,但如果文件已存在,则调用返回FileExistsError异常。

    示例:

    file = open("myfile.txt", "r")
    
  2. 读取文件

    要读取打开的文件,请使用read()或readline()方法读取文件内容。read()方法将读取整个文件,并将其作为字符串返回,而readline()方法将逐行读取文件,并返回每行作为一个字符串。示例:

    file = open("myfile.txt", "r")
    
    content = file.read()
    
    print(content)
    
    file.close()
    
  3. 写入文件

    要向文件中写入数据,请使用write()或writelines()方法。write()方法将作为参数传递的字符串写入文件,而writelines()方法将多个字符串写入文件。示例:

    file = open("myfile.txt", "w")
    
    file.write("This is my first line\n")
    file.write("This is my second line\n")
    
    file.close()
    
  4. 关闭文件

    完成对文件的读取或写入后,请务必关闭打开的文件。可以使用close()方法来关闭文件。示例:

    file = open("myfile.txt", "r")
    content = file.read()
    print(content)
    file.close()
    
  5. with语句

    Python中的with语句是一种很优美的写法,可以在代码块结束时自动关闭文件。不需要显式地调用close()方法。以下是使用with语句读取文件的示例:

    with open("myfile.txt", "r") as file:
    	content = file.read()
    	print(content)
    

总之,在Python中进行文件操作是一种非常常见的编程任务。通过学习如何打开、读取和写入文件,并了解不同的文件操作模式和用法,能更好地操作和处理文件数据。同时需要注意合理使用文件操作,避免资源浪费和不必要的安全风险。

05 | 🚘异常处理

在Python中,异常处理是一种重要的编程技术。它可以帮助捕获和处理发生在程序执行期间的错误,以避免程序崩溃或出现不可预知的行为。以下是关于Python异常处理的详细讲解:

  1. 什么是异常?

    在Python中,当代码发生错误时,将引发异常对象。异常包含有关错误的信息,例如错误类型和堆栈跟踪等。常见的异常包括ZeroDivisionError、NameError和TypeError等。示例:

    a = 10 / 0
    

    上面的代码将引发ZeroDivisionError异常,提示“division by zero”。

  2. 捕获异常

    要捕获异常,请使用try-except语句块。try块将包含可能引发异常的代码,而except块将包含异常处理代码。except块捕获特定类型的异常,并向用户提供有用的错误消息并采取适当的操作。示例:

    try:
    	a = 10 / 0
    except ZeroDivisionError as e:
    	print("Error: ", e)
    

    上述代码将捕获ZeroDivisionError异常,并输出错误信息“Error: division by zero”。

  3. 多个异常

    可以在同一个try块中处理多个异常。只需添加每个异常的一个except块即可。示例:

    try:
    	a = int(input("Enter a number: "))
    	b = int(input("Enter another number: "))
    	c = a / b
    except ZeroDivisionError as e:
    	print("Error: ", e)
    except ValueError as e:
    	print("Error: ", e)
    

    上面的代码将如果除数为零,输出“Error: division by zero”,如果输入的不是数字,输出“Error: invalid literal for int() with base 10”。

  4. finally块

    try-except语句还允许使用finally块,该块包含在完成代码块后始终运行的代码。即使异常未被捕获,finally块也会执行。示例:

    try:
    	f = open("myfile.txt", "r")
    	print(f.read())
    except FileNotFoundError as e:
    	print("Error: ", e)
    finally:
    	f.close()
    

    上述代码将打开一个文件并打印其内容。如果文件不存在,输出“Error: [Errno 2] No such file or directory"。无论文件的哪个部分出现问题,都会关闭文件。

  5. 自定义异常

    在Python中,您还可以通过创建子类来创建自定义异常。 自定义异常可用于检测特定的错误,并向用户提供更有针对性的错误消息。示例:

    class MyError(Exception):
    	def __init__(self, message):
        	self.message = message
    
    
    try:
    	raise MyError("A custom error occurred.")
    except MyError as e:
    	print(e.message)
    

    以上代码将抛出MyError异常,并输出“A custom error occurred.”。

总之,在Python中,异常处理是一种非常重要的编程技术。通过学习如何捕获和处理异常,以及了解不同类型的异常和自定义异常的用法,您将能够更好地编写健壮、可靠的程序。

06 | 🚘习题

利用字典创建3人(姓名和电话号码如下)的简易通讯录:

小赵123456789
小明123456788
小花123456787

要求输入姓名时能够以“姓名:电话”的形式反馈联系电话,当输入姓名有误时,系统提示“您的输入有误,请重新查询”。最后遍历字典,输出所有人的信息
输入样例:小明
输出样例:

小明:123456788
小赵 123456789)
小明 123456788)
小花 123456787)

以下是Python实现该简易通讯录的代码:

address_book = {
    '小赵': '123456789',
    '小明': '123456788',
    '小花': '123456787'
}

while True:
    name = input("请输入姓名:")
    if name in address_book:
        print(name + ":" + address_book[name])
    else:
        print("您的输入有误,请重新查询")

    flag = input("是否继续查询(Y/N):")
    if flag.upper() != 'Y':
        break

print("所有人的信息如下:")
for name, number in address_book.items():
    print(name, number)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

M302A-CW/BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包

M302A-CW/BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的…

MFP450 基础飞行平台问世,支持室内室外无GPS环境飞行

无人机开发入门,我们需要一个怎样的基础飞行平台? 开源无人机的发展日新月异,但遗憾的是,在PX4和FMT生态中,还很少看到一个稳定可靠的基础飞行平台。目前国内市场的选择不多,还是以DIY为主,尤其…

GEE:使用 ROC 曲线和 AUC 评估分类算法性能

作者:CSDN @ _养乐多_ 在机器学习和遥感数据分析领域,评估分类算法的性能是关键任务之一。Google Earth Engine(GEE)平台提供了丰富的遥感数据和分析工具,结合 ROC(接收者操作特征)曲线和 AUC(曲线下面积)分析,可以有效评估分类算法的准确性和可靠性。 本文将介绍如…

基于阻塞队列实现异步秒杀

文章目录 1 异步秒杀思路2 Redis完成秒杀资格判断3 基于阻塞队列实现秒杀优化总结 1 异步秒杀思路 我们来回顾一下下单流程 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分…

搞懂 API,跨域资源贡献 (CORS )和安全性问题

在 Web 应用开发中,API 是应用程序和其他系统之间进行数据交互的主要方式。 跨域资源共享(CORS)是一种常见的处理跨域请求的技术,但同时也带来了一些安全性问题。我将分享 CORS 技术及其安全性问题。 跨域资源共享(COR…

django CBV 与 DRF APIView源码分析

django CBV源码分析 在django框架中,视图层中的逻辑即可以使用函数处理也可以使用类进行处理,如果在视图层中使用函数处理请求,就是FBV(function base views),如果在视图层中使用类处理请求,就是CBV(class base views…

Windows无法完成格式化怎么办?正确的3个解决方法!

案例:Windows无法完成格式化怎么办 【由于我的U盘使用时间过长,很多文件都是不需要的,我想将其格式化,但插入电脑后,Windows根本无法完成格式化,这是为什么呢?我应该怎么做呢?求答案…

谁想和我一起做低代码平台!一个可以提升技术,让简历装x的项目

序言 正如文章标题所述,最近一段时间低代码这个概念非常的火,但其实在不了解这个东西的时候觉得它真的很炫酷,从那时就萌生了做一个低代码平台的想法。 但随着时间的变化,现在市面上低代码各个业务方向的平台都有了,可…

算法训练第二周题解汇总

A - AABCC [ABC300D] AABCC - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大意&#xff1a; 题解&#xff1a; 就是纯暴力题&#xff0c;由于 a<b<c&#xff0c;所以≤N&#xff0c;a<500&#xff1b;<N&#xff0c;c<。先用埃筛预处理&#xff0c;然后枚举的…

hutool工具

目录 官网 简介 pom.xml EscapeUtil使用 HttpRequest使用 官网 Hutool参考文档 简介 Hutool 是一个小而全的 Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;涵盖了Java开发开发中的方方面面 使用 Hu…

Java入门指南:从零开始的基础语法

java语言概述 Java是一种高级编程语言&#xff0c;最初由Sun Microsystems&#xff08;现在是Oracle Corporation的一部分&#xff09;在1995年推出。Java以其简单、可移植和安全的特性而闻名&#xff0c;并广泛用于各种应用程序开发&#xff0c;从桌面应用程序到移动应用程序和…

Linux如何卸载或者删除docker

1.查看当前docker状态: systemctl status docker 2.如果是运行状态则停掉: systemctl stop docker 3.查看yum安装的docker文件包: yum list installed |grep docker ​ 删除所有安装的docker文件包 yum -y remove docker.x86_64 其他的docker相关的安装包同样删除操作&#xf…

国内GPU渲染农场有哪些值得推荐?

GPU凭借它在图形渲染领域强大的架构和计算能力&#xff0c;给广大用户带来了一种更为高效的解决方案&#xff0c;我们启用GPU渲染加速&#xff0c;实际就是调用GPU加速图形的渲染和填充。既然聊到GPU渲染&#xff0c;CG行业的朋友们肯定也好奇国内值得推荐的GPU渲染农场有哪些&…

【C++】-类和对象之日期类的具体实现(中)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…

企业数字化转型的五个常见问题以及回答

数字化、数字化转型其实并不是新的概念&#xff0c;早在十年前就提出来了&#xff0c;但近两年才开始真正走向公众视野。由于概念的泛滥与传统信息化的双重叠加影响&#xff0c;多数企业存在认知上的诸多困扰。 数字化转型为何成为当前热点&#xff1f; 什么是数字化转型&…

云渲染可以渲动画吗?

云渲染可以渲动画吗&#xff1f; 首先我来回答你这个问题&#xff0c;云渲染当然可以渲动画啦&#xff01;像2022年暑期档最火的动画电影《新神榜&#xff1a;杨戬》就是在云渲染的支持下才能准时上线跟大家见面的哦&#xff01; Renderbus瑞云渲染和追光动画也是老朋友了&…

Android Jetpack Compose的附带效应

Android Jetpack Compose的附带效应 Jetpack Compose 是许多开发人员的首选&#xff0c;因为它具有有趣、简单、有效和直接的特性&#xff0c;并且能够轻松地以声明方式构建自定义组件。但是&#xff0c;要充分利用其功能&#xff0c;重要的是要很好地掌握副作用和效果处理程序…

十六、Java数据结构与算法 - 图

文章目录 一、图的基本介绍1.1 为什么要有图1.2 图的举例说明1.3 图的常用概念 二、图的表示方式2.1 邻接矩阵2.2 邻接表 三、图的快速入门案例四、图的遍历4.1 深度优先遍历DFS4.1.1 基本思想4.1.2 算法步骤4.1.3 图示 4.2 广度优先遍历BFS4.2.1 基本思想4.2.2 算法步骤4.2.3 …

Segment Anything模型部分结构和代码解析

0x0. 前言 上个月Meta提出的Segment Anything Model&#xff08;SAM&#xff09;希望在视觉领域通过Prompt基础大模型的套路来解决目标分割的问题。经过实测&#xff0c;在大多数场景中SAM的表现都足够惊艳&#xff0c;并且基于SAM的各种二创工作也爆发了比如 检测一切的Groun…

Prometheus监控报警-web,域名,端口, 钉钉版本

Prometheus监控报警-web&#xff0c;域名&#xff0c;端口&#xff0c; 钉钉版本 采用文章 https://www.yuque.com/youngfit/qok2pe/nypstd#616a2e58https://www.jianshu.com/p/eae67b770c3ehttps://blog.csdn.net/Sebastien23/article/details/113645177https://www.cnblogs…