首页 > 编程语言 >跟着查老四学Python Day 3:数据结构与函数

跟着查老四学Python Day 3:数据结构与函数

时间:2023-03-30 18:09:24浏览次数:58  
标签:全局变量 函数 Python 字符串 参数 result print 数据结构 Day


老猫:请您扮演一个python讲师,帮助一个没有代码经验的人自学python,以下是此前你设置的学习计划

制定学习计划:将学习过程分为四个阶段,每个阶段关注不同的内容。

  • 第一周:掌握Python基础语法、数据类型、控制结构等。同时,学会如何在本地搭建Python开发环境。
  • 第二周:学习函数、模块、文件操作和异常处理等。尝试编写一些简单的函数和模块,加深理解。
  • 第三周:学习面向对象编程、类和对象、继承和多态等概念。编写一些简单的面向对象程序。
  • 第四周:学习常用的Python库,如NumPy、Pandas、Requests等。结合自己的兴趣和需求,完成一个简单的实践项目

以下是第一周的学习安排

第一天:Python基础

  1. 学习Python简介和发展历程
  2. 安装Python和配置开发环境(如使用Anaconda或者直接安装Python,选择合适的IDE,例如:PyCharm、Visual Studio Code)
  3. 学习基本数据类型(整数、浮点数、字符串、布尔值)
  4. 了解变量、运算符和基本输入输出操作
  5. 动手编写简单的Python程序,熟悉开发环境

第二天:控制结构与循环

  1. 学习条件判断(if-elif-else结构)
  2. 学习循环结构(for循环、while循环)
  3. 学习列表(list)和元组(tuple)的基本操作
  4. 动手编写一些涉及条件判断和循环的Python程序,加深对这些概念的理解

第三天:数据结构与函数

  1. 学习字典(dict)和集合(set)的基本操作
  2. 学习如何定义和调用函数
  3. 学习函数的参数传递(位置参数、默认参数、关键字参数、可变参数)
  4. 学习局部变量和全局变量的概念
  5. 编写一些涉及不同数据结构和函数的Python程序,巩固所学知识

第四天:实践与复习

  1. 学习列表推导式、生成器、迭代器等高级特性
  2. 复习前三天所学的知识点
  3. 选择一些适合初学者的编程题目,例如LeetCode或其他在线编程平台上的简单题目,进行实战练习
  4. 总结一下本周的学习收获,为接下来的学习做好准备

按照计划今天我们要学第三天的内容,你对计划有问题吗,如果没问题,你就说好,我还要提一些授课要求

查老四:好的,我们将继续按照计划进行第三天的内容学习。在开始之前,请确保您已经完成了前两天的内容学习,这样您才能更好地理解今天的课程。

在正式开始学习之前,我想先提一些授课要求:

  1. 请保持专注和耐心。学习编程需要时间和实践。如果在学习过程中遇到困难,请不要气馁,我们会一起解决问题。
  2. 动手实践是学习编程的关键。我会为您提供一些实践练习和代码示例,请务必动手尝试,这将有助于您更好地理解和掌握所学内容。
  3. 如果您在学习过程中有任何问题,请随时提问。我会竭尽所能为您提供帮助。
  4. 请务必按照计划进行学习。合理安排时间,确保每个阶段的学习内容都能得到充分的理解和练习。

现在,我们可以开始学习第三天的内容了。请确保您已准备好,然后我们将继续进行。


字典和集合

老猫:我要提一些要求: 1.每一节,除了概念讲授,还需要给出示例,示例我看明白之后,请给出练习题 2.示例和后续的练习题讲解都需要对代码最注释 3.使用格式化字符串(f-string) 4.节奏不用太快 5.我这边安装的是python 3.8.10 所有的代码和知识点请尽量对齐这个版本

查老四:好的,我会按照您的要求进行教学。现在我们开始学习第三天的内容。

第一部分:学习字典(dict)和集合(set)的基本操作

  1. 字典(dict)

字典是一种可变的、无序的键值对(key-value)集合。字典的键必须是唯一的,而值可以是任意类型的数据(如数字、字符串、列表等)。

示例:创建一个简单的字典

# 创建一个字典,包含姓名、年龄和职业
person = {
    "name": "张三",
    "age": 30,
    "job": "程序员"
}

# 访问字典中的值
print(f"姓名:{person['name']}")  # 输出:姓名:张三

练习题:创建一个字典,包含你喜欢的书籍、电影和音乐。然后尝试访问其中的一个元素并打印出来。

  1. 集合(set)

集合是一种无序且元素不重复的数据结构。集合中的元素必须是不可变的,如数字、字符串和元组。

示例:创建一个简单的集合

# 创建一个集合,包含一些数字
numbers = {1, 2, 3, 4, 5}

# 向集合中添加一个元素
numbers.add(6)

# 从集合中删除一个元素 
numbers.remove(1)

# 打印集合
print(f"集合:{numbers}") # 输出:集合:{2, 3, 4, 5, 6}

练习题:创建一个集合,包含一些你喜欢的水果。然后尝试向集合中添加一个新的水果,并删除一个已有的水果,最后打印出集合。


老猫:字典和集合在使用场景上的区别是什么

查老四:字典和集合在使用场景上有一些明显的区别,以下是它们各自的特点和使用场景:

  1. 字典(dict):

字典是一种键值对(key-value)的数据结构,它的特点是键唯一,值可以是任意类型的数据。字典常用于以下场景:

  • 存储和查询具有唯一标识的数据,例如用户信息、配置设置等。
  • 需要通过某个键值(如 ID、用户名)快速查找对应的数据。
  • 对数据进行频繁的增加、删除、更新操作。
  1. 集合(set):

集合是一种无序且元素不重复的数据结构。它的特点是元素唯一,且元素必须是不可变的(如数字、字符串和元组)。集合常用于以下场景:

  • 去除重复元素,例如统计独立 IP 访问量、统计不同的单词等。
  • 集合运算,如并集、交集、差集等,用于处理多个集合之间的关系。
  • 检查某个元素是否存在于集合中,例如检查用户是否在黑名单中

总结:字典主要用于存储和查询具有唯一标识的数据,而集合主要用于处理无序且元素不重复的数据。在实际应用中,可以根据数据类型和需求选择合适的数据结构。


练习 1

下面是一个简单的程序,创建一个包含我的喜欢的书籍、电影和音乐的字典,并访问其中一个元素并打印出来:

# 创建一个包含我的喜欢的书籍、电影和音乐的字典
favorites = {'book': 'The Catcher in the Rye', 'movie': 'The Shawshank Redemption', 'music': 'Bohemian Rhapsody'}

# 访问其中一个元素并打印出来
print(f"My favorite movie is '{favorites['movie']}'")

输出:

My favorite movie is 'The Shawshank Redemption'

解释一下上面的代码:

  • 我们首先创建了一个名为favorites的字典,包含我的喜欢的书籍、电影和音乐。每个元素都有一个键('book','movie'和'music'),以及对应的值。
  • 然后,我们使用print()函数和格式化字符串(f-string)来访问字典中的一个元素。在这个例子中,我们使用favorites['movie']来获取我最喜欢的电影,并将其插入到格式化字符串中。

练习 2

下面是一个简单的程序,创建一个包含我喜欢的水果的集合,并向集合中添加一个新的水果、删除一个已有的水果,最后打印出集合:

# 创建一个包含我喜欢的水果的集合
fruits = {'apple', 'banana', 'orange'}

# 向集合中添加一个新的水果
fruits.add('kiwi')

# 删除一个已有的水果
fruits.remove('banana')

# 打印出集合
print(fruits)

输出:

{'apple', 'kiwi', 'orange'}

解释一下上面的代码:

  • 我们首先创建了一个名为fruits的集合,包含一些我喜欢的水果。
  • 然后,我们使用add()方法向集合中添加一个新的水果('kiwi')。
  • 接着,我们使用remove()方法从集合中删除一个已有的水果('banana')。
  • 最后,我们使用print()函数打印出修改后的集合。

对了答案,基本一致


函数定义和调用

老猫:好的非常感谢,那么我们继续第二节“学习如何定义和调用函数”

查老四:1. 函数定义和调用

函数是一种实现特定功能的代码块。通过定义和调用函数,我们可以避免重复编写相同的代码。

示例:定义和调用一个简单的函数

# 定义一个函数,用于计算两个数的和
def add(a, b):
    return a + b

# 调用函数,并打印结果
result = add(3, 4)
print(f"3 + 4 = {result}")  # 输出:3 + 4 = 7

练习题:定义一个函数,接受两个参数,一个是字符串,另一个是整数。函数将字符串重复整数次,并返回结果。例如,传入的字符串是 "hello",整数是 3,函数应返回 "hellohellohello"。

请完成练习题,如果您有任何疑问或需要帮助,请随时向我提问。当您准备好进行下一部分时,请告诉我。


老猫:能否稍微详细解释一下def 和 return

查老四:当然可以。在 Python 中,我们使用 def 关键字来定义一个函数。def 后面跟着函数名和括号,括号内是函数的参数。在函数名和参数列表之后,我们用冒号(:)表示函数体的开始。函数体是一组实现函数功能的语句。以下是一个简单的函数定义示例

def greet(name):
    greeting = f"Hello, {name}!"
    return greeting

在这个示例中,我们定义了一个名为 greet 的函数,它接受一个参数 name。函数的功能是创建一个问候语并返回。

return 语句用于从函数中返回一个值。当函数执行到 return 语句时,它将结束函数的执行并将 return 后面的表达式的值返回给调用者。在上面的示例中,return greeting 语句将把 greeting 变量的值返回给调用该函数的代码。

如果函数没有 return 语句,或者 return 语句后面没有表达式,那么函数将返回 NoneNone 是一个特殊的值,表示“无”或“空”。

这里有一个不使用 return 语句的示例:

def greet(name):
    greeting = f"Hello, {name}!"
    print(greeting)

# 调用函数
greet("张三")  # 输出:Hello, 张三!

在这个示例中,greet 函数没有返回值,而是直接在函数内部使用 print 语句输出问候语。当我们调用这个函数时,它会打印问候语,但不会返回任何值。

请注意,在实际编程中,我们通常推荐函数返回结果而不是直接打印。这样,调用者可以自由地选择如何处理函数返回的结果(例如,将结果存储在变量中、打印或将其用作其他函数的参数)。


练习

下面是一个简单的程序,定义了一个名为repeat_string的函数,接受两个参数:一个字符串和一个整数。函数将字符串重复整数次,并返回结果:

def repeat_string(s, n):
    """
    重复字符串n次并返回结果。

    参数:
    s -- 要重复的字符串
    n -- 要重复的次数

    返回值:
    返回重复后的字符串
    """
    return s * n

# 测试函数
result = repeat_string('hello', 3)
print(result)

输出:

hellohellohello

解释一下上面的代码:

  • 我们定义了一个名为repeat_string的函数,接受两个参数:一个字符串s和一个整数n
  • 函数内部使用乘法运算符(*)将字符串s重复n次,并将结果作为返回值返回。
  • 然后我们调用函数,并将结果保存在变量result中。
  • 最后,我们使用print()函数打印出result的值。

对了答案,基本一致


函数的参数传递

老猫:好的,那么我们开始第三节:函数的参数传递

查老四:好的,我们现在开始第三节:函数的参数传递。

在 Python 中,函数可以接受多种类型的参数。以下是一些常见的参数类型:

  1. 位置参数(Positional arguments)
  2. 默认参数(Default arguments)
  3. 关键字参数(Keyword arguments)
  4. 可变参数(Variable-length arguments)

我们将逐一介绍这些参数类型及其用法。

  1. 位置参数

位置参数是最常见的参数类型。当我们调用函数时,需要按照函数定义中参数的顺序依次传入参数值。这些参数值在函数内部将按照相应的顺序与参数名绑定。

示例:

def greeting(greet, name):
    return f"{greet}, {name}!"

# 调用函数,传入位置参数
result = greeting("Hello", "John")
print(result)  # 输出:Hello, John!
  1. 默认参数

有时我们希望为函数参数提供一个默认值。当调用函数时,如果未提供相应的参数值,那么函数将使用默认值。在函数定义中,我们可以通过在参数名后面使用等号(=)为参数设置默认值。

示例:

def greeting(greet, name="John"):
    return f"{greet}, {name}!"

# 调用函数,未传入 name 参数
result = greeting("Hello")
print(result)  # 输出:Hello, John!

# 调用函数,传入 name 参数
result = greeting("Hello", "Alice")
print(result)  # 输出:Hello, Alice!
  1. 关键字参数

关键字参数允许我们在调用函数时,通过指定参数名来为参数赋值。这样我们就不需要按照函数定义中参数的顺序传递参数值。

示例:

def greeting(greet, name):
    return f"{greet}, {name}!"

# 调用函数,使用关键字参数
result = greeting(name="John", greet="Hello")
print(result)  # 输出:Hello, John!
  1. 可变参数

有时我们希望函数能够接受任意数量的参数。我们可以使用星号*来表示可变参数。在函数内部,这些参数将以元组(tuple)的形式存在。

示例:

def print_args(*args):
    print(f"传入了 {len(args)} 个参数:{args}")

# 调用函数,传入可变数量的参数
print_args(1, 2, 3)  # 输出:传入了 3 个参数:(1, 2, 3)
print_args("a", "b")  # 输出:传入了 2 个参数:('a', 'b')

此外,我们还可以使用两个星号**表示可变关键字参数。在函数内部,这些参数将以字典(dict)的形式存在。

def print_kwargs(**kwargs):
    print(f"传入了 {len(kwargs)} 个关键字参数:{kwargs}")

# 调用函数,传入可变数量的关键字参数
print_kwargs(a=1, b=2)  # 输出:传入了 2 个关键字参数:{'a': 1, 'b': 2}
print_kwargs(name="John", age=30)  # 输出:传入了 2 个关键字参数:{'name': 'John', 'age': 30}

在这个示例中,我们定义了一个名为 print_kwargs 的函数,它接受可变关键字参数。当我们调用这个函数时,可以传入任意数量的关键字参数。函数内部会统计关键字参数的数量并以字典形式输出这些参数。

现在我们已经了解了函数参数的不同类型及其用法。接下来,我将为您提供两个练习题以巩固所学知识:

练习题 1: 编写一个函数,接受任意数量的整数参数,并返回它们的和。

练习题 2: 编写一个函数,接受任意数量的关键字参数。函数应返回一个字典,其中键是原关键字参数的键,值是对应值的类型。

请尝试完成这两个练习题。如果您有任何问题,请随时向我提问。当您准备好查看答案时,请告诉我。


老猫:这两个练习题覆盖了这一节的内容了吗,如果没有还请补充

查老四:这两个练习题涵盖了本节中的可变参数和可变关键字参数。但为了更全面地巩固本节的内容,我将为您提供两个额外的练习题,以涵盖位置参数、默认参数和关键字参数:

练习题 3: 编写一个函数,接受两个位置参数:一个是字符串,另一个是整数。函数应返回一个新字符串,其中原字符串重复整数次。如果没有提供整数参数,默认重复 2 次。

练习题 4: 编写一个函数,接受两个关键字参数:一个是字符串,另一个是整数。函数应返回一个新字符串,其中原字符串重复整数次。如果没有提供整数参数,默认重复 2 次。

请尝试完成这四个练习题。如果您有任何问题,请随时向我提问。当您准备好查看答案时,请告诉我。

练习 1

下面是一个简单的程序,定义了一个名为sum_numbers的函数,接受任意数量的整数参数,并返回它们的和:

def sum_numbers(*args):
    """
    计算任意数量整数的和并返回结果。

    参数:
    *args -- 任意数量的整数

    返回值:
    返回所有整数的总和
    """
    total = 0
    for num in args:
        total += num
    return total

# 测试函数
result = sum_numbers(1, 2, 3, 4, 5)
print(result)

输出:

15

解释一下上面的代码:

  • 我们定义了一个名为sum_numbers的函数,使用特殊语法*args来表示接受任意数量的整数参数。
  • 函数内部使用循环遍历所有传递给函数的整数参数,并将它们累加到变量total中。
  • 最后,函数将变量total作为返回值返回。
  • 然后我们调用函数,并将结果保存在变量result中。
  • 最后,我们使用print()函数打印出result的值。

练习 2

下面是一个简单的程序,定义了一个名为kwarg_types的函数,接受任意数量的关键字参数,并返回一个字典,其中键是原关键字参数的键,值是对应值的类型:

def kwarg_types(**kwargs):
    """
    将关键字参数及其类型转换成一个字典并返回。

    参数:
    **kwargs -- 任意数量的关键字参数

    返回值:
    返回由键和值类型组成的字典
    """
    types_dict = {}
    for key, value in kwargs.items():
        types_dict[key] = type(value).__name__
    return types_dict

# 测试函数
result = kwarg_types(name='Alice', age=30, is_student=True)
print(result)

输出:

{'name': 'str', 'age': 'int', 'is_student': 'bool'}

解释一下上面的代码:

  • 我们定义了一个名为kwarg_types的函数,使用特殊语法**kwargs来表示接受任意数量的关键字参数。
  • 函数内部使用循环遍历所有传递给函数的关键字参数,并使用type()函数获取参数值的类型。然后将键值对添加到types_dict字典中。
  • 最后,函数将types_dict作为返回值返回。
  • 然后我们调用函数,并将结果保存在变量result中。
  • 最后,我们使用print()函数打印出result的值。

练习 3

下面是一个简单的程序,定义了一个名为repeat_string的函数,接受两个位置参数:一个字符串和一个整数(可选)。函数将字符串重复整数次并返回新字符串:

def repeat_string(s, n=2):
    """
    重复字符串n次并返回结果。

    参数:
    s -- 要重复的字符串
    n -- 要重复的次数,默认值为2

    返回值:
    返回重复后的字符串
    """
    return s * n

# 测试函数
result1 = repeat_string('hello', 3)
print(result1)

result2 = repeat_string('hello')
print(result2)

输出:

hellohellohello
hellohello

解释一下上面的代码:

  • 我们定义了一个名为repeat_string的函数,使用一个必需参数s表示要重复的字符串,以及一个可选参数n表示要重复的次数。如果没有提供n参数,则默认为2。
  • 函数内部使用乘法运算符(*)将字符串s重复n次,并将结果作为返回值返回。
  • 然后我们分别调用函数两次,并将结果保存在变量result1result2中。
  • 最后,我们使用print()函数打印出result1result2的值。

练习 4

下面是一个简单的程序,定义了一个名为repeat_string的函数,接受两个关键字参数:一个字符串和一个整数(可选)。函数将字符串重复整数次并返回新字符串:

def repeat_string(s, n=2):
    """
    重复字符串n次并返回结果。

    参数:
    s -- 要重复的字符串
    n -- 要重复的次数,默认值为2

    返回值:
    返回重复后的字符串
    """
    return s * n

# 测试函数
result1 = repeat_string(s='hello', n=3)
print(result1)

result2 = repeat_string(n=4, s='world')
print(result2)

result3 = repeat_string(s='hello')
print(result3)

输出:

hellohellohello
worldworldworldworld
hellohello

解释一下上面的代码:

  • 我们定义了一个名为repeat_string的函数,使用两个关键字参数sn表示要重复的字符串和次数。如果没有提供n参数,则默认为2。
  • 函数内部使用乘法运算符(*)将字符串s重复n次,并将结果作为返回值返回。
  • 然后我们分别调用函数三次,分别传入不同的关键字参数,分别将返回值保存在变量result1result2result3中。
  • 最后,我们使用print()函数打印出result1result2result3的值。

对了答案,基本一致


局部变量和全局变量

老猫:

查老四:当然可以。在 Python 中,根据变量的作用范围,我们可以将变量分为局部变量和全局变量。

  1. 局部变量:

局部变量是在函数内部定义的变量。它只在函数内部有效,函数执行完毕后,局部变量就会被销毁。局部变量只能在其所在的函数内部访问。

示例:

def my_function():
    local_var = "Hello, I'm a local variable!"
    print(local_var)

my_function()  # 输出:Hello, I'm a local variable!
print(local_var)  # 报错:NameError: name 'local_var' is not defined

在这个示例中,我们在 my_function 函数内部定义了一个局部变量 local_var。在函数内部,我们可以访问这个变量。但是在函数外部,当我们尝试访问 local_var 时,会引发 NameError,因为这个变量在函数外部是未定义的。

  1. 全局变量:

全局变量是在函数外部定义的变量。它在整个程序执行期间都是有效的。全局变量可以在函数内部和函数外部访问。

示例:

global_var = "Hello, I'm a global variable!"

def my_function():
    print(global_var)

print(global_var)  # 输出:Hello, I'm a global variable!
my_function()  # 输出:Hello, I'm a global variable!

在这个示例中,我们在函数外部定义了一个全局变量 global_var。这个变量在函数内部和函数外部都可以访问。

需要注意的是,如果在函数内部需要修改全局变量的值,需要使用 global 关键字来声明。

示例:

global_var = 10

def update_global_var():
    global global_var
    global_var = 20
    print(f"Inside function: {global_var}")

print(f"Before function: {global_var}")  # 输出:Before function: 10
update_global_var()  # 输出:Inside function: 20
print(f"After function: {global_var}")  # 输出:After function: 20

在这个示例中,我们在 update_global_var 函数内部使用 global 关键字声明了全局变量 global_var,然后修改了它的值。在函数外部,我们可以看到全局变量的值已经被更新。

现在您已经了解了局部变量和全局变量的概念。


老猫:除了变量定义和使用的范围不同,这两个变量在具体使用的时候还有其他区别吗。

查老四:除了局部变量和全局变量的作用范围不同之外,它们在具体使用时还有以下几点不同:

  1. 生命周期:局部变量的生命周期只在函数内部,即当函数执行完毕时,局部变量将被销毁,不再占用内存。而全局变量的生命周期从定义开始,直到程序结束,它们在整个程序运行期间一直存在。
  2. 命名空间:局部变量和全局变量在不同的命名空间。局部变量位于函数内部的命名空间,而全局变量位于模块级别的命名空间。这意味着即使在同一个模块中,相同名称的局部变量和全局变量不会互相影响。
  3. 修改全局变量:在函数内部,如果想要修改全局变量,需要使用 global 关键字来声明这个变量为全局变量。否则,如果在函数内部直接赋值,将会创建一个同名的局部变量,而不是修改全局变量。示例如下:
count = 0

def increment_count():
    global count
    count += 1

increment_count()
print(count)  # 输出:1
  1. 使用原则:通常情况下,我们应该尽量避免使用全局变量,因为全局变量可能导致代码难以维护和理解。全局变量容易引起不同函数间的相互依赖,从而导致程序出现意外的副作用。相反,我们应该尽量使用局部变量和函数参数,使函数尽可能地独立和可重用。

总结一下,局部变量和全局变量之间的主要区别在于作用范围、生命周期、命名空间和使用原则。在实际编程中,我们应该尽量使用局部变量和函数参数,以保持代码的清晰和可维护性。


老猫:好的,非常感谢,是否方便给我出练习题呢。

练习题 1: 编写一个函数 calculate_area,计算给定半径的圆的面积。该函数应该使用局部变量存储计算结果,并返回结果。同时,请确保函数内部不使用任何全局变量。

练习题 2: 创建一个全局变量 pi,表示圆周率(取值 3.14159)。编写一个函数 calculate_volume,计算给定半径的球的体积。该函数应该使用全局变量 pi,并返回计算结果。

请尝试完成这两个练习题。如果您有任何问题,请随时向我提问。当您准备好查看答案时,请告诉我

练习1:

下面是一个简单的程序,定义了一个名为calculate_area的函数,接受一个参数radius表示圆的半径,计算并返回圆的面积:

def calculate_area(radius):
    """
    计算给定半径的圆的面积。

    参数:
    radius -- 圆的半径

    返回值:
    返回圆的面积
    """
    # 使用局部变量存储计算结果
    area = 3.14 * radius ** 2
    return area

# 测试函数
result = calculate_area(4)
print(result)

输出:

50.24

解释一下上面的代码:

  • 我们定义了一个名为calculate_area的函数,使用一个必需参数radius表示圆的半径。
  • 函数内部使用局部变量area存储计算结果,并将其作为返回值返回。
  • 在计算圆的面积时,我们使用常量3.14和半径的平方(radius ** 2)进行计算。
  • 然后我们调用函数,并将结果保存在变量result中。
  • 最后,我们使用print()函数打印出result的值。

练习 2

下面是一个简单的程序,创建了一个名为pi的全局变量,表示圆周率(取值3.14159),并定义了一个名为calculate_volume的函数,使用全局变量pi计算给定半径的球的体积:

# 创建全局变量 pi
pi = 3.14159

def calculate_volume(radius):
    """
    计算给定半径的球的体积。

    参数:
    radius -- 球的半径

    返回值:
    返回球的体积
    """
    # 使用全局变量 pi 计算球的体积
    volume = (4 / 3) * pi * radius ** 3
    return volume

# 测试函数
result = calculate_volume(2)
print(result)

输出:

33.51032133333334

解释一下上面的代码:

  • 我们首先创建了一个名为pi的全局变量,表示圆周率。
  • 然后,我们定义了一个名为calculate_volume的函数,使用一个必需参数radius表示球的半径。
  • 函数内部使用全局变量pi计算球的体积,并将其作为返回值返回。
  • 在计算球的体积时,我们使用球体积公式 跟着查老四学Python Day 3:数据结构与函数_Python 进行计算。
  • 然后我们调用函数,并将结果保存在变量result中。
  • 最后,我们使用print()函数打印出result的值。

老猫:请给出习题答案:

查老四:以下是这两个练习题的答案及解释:

练习题 1:

def calculate_area(radius):
    pi = 3.14159
    area = pi * radius ** 2
    return area

result = calculate_area(5)
print(result)  # 输出:78.53975

这个函数接受一个数值参数 radius,计算圆的面积。函数内部使用局部变量 piarea,并将计算结果返回。

练习题 2:

pi = 3.14159

def calculate_volume(radius):
    volume = 4 / 3 * pi * radius ** 3
    return volume

result = calculate_volume(5)
print(result)  # 输出:523.5983333333332

这段代码定义了一个计算球体积的函数 calculate_volume,然后调用该函数计算半径为 5 的球体积,并将结果输出.

  1. pi = 3.14159:这里我们定义了一个全局变量 pi,表示圆周率的近似值。这个变量可以在整个程序范围内使用。
  2. def calculate_volume(radius)::我们定义了一个名为 calculate_volume 的函数,该函数接受一个参数 radius,表示球的半径。
  3. volume = 4 / 3 * pi * radius ** 3:这是函数内部的第一行代码。我们计算球体积的公式为 4/3 * pi * radius ** 3。我们将计算结果赋值给局部变量 volume
  4. return volume:这是函数内部的第二行代码。我们将局部变量 volume 的值返回给函数的调用者。这意味着当我们调用这个函数时,我们会得到球体积的计算结果。
  5. result = calculate_volume(5):这里我们调用 calculate_volume 函数,并传入半径值 5。函数会根据传入的半径计算球体积,并将结果返回。我们将返回的结果存储在名为 result 的变量中。
  6. print(result):最后,我们使用 print 函数输出 result 变量的值,即球体积的计算结果。

这些答案涵盖了所提及的两个练习题。如果您有任何问题,请随时告诉我。

查老四的代码确实更清晰一些


当日总结

今天我们学习了以下内容:

  1. 字典(dict)和集合(set)的基本操作。
  2. 如何定义和调用函数。
  3. 函数的参数传递(位置参数、默认参数、关键字参数、可变参数)。
  4. 局部变量和全局变量的概念以及它们之间的区别。

我们通过示例和练习题巩固了这些概念。这些知识点为您提供了更多关于 Python 函数和变量使用的详细信息,帮助您编写更为复杂的 Python 程序。

这里是今天的学习总结。如果您有任何问题或需要进一步阐述,请随时告诉我。如果您准备好继续学习下一个主题,请告知我

标签:全局变量,函数,Python,字符串,参数,result,print,数据结构,Day
From: https://blog.51cto.com/cloudzun/6159955

相关文章

  • Python计算机视觉基础实验3-显著性检测(HC&FC)
    一、实验基础图像显著性检测图像的显著性是指对于给定一副真实世界中的场景图像,人们会自动地识别出感兴趣区域,忽略掉不感兴趣的区域,即将注意力集中在图像中某些显著的部分区域。图像的注意预测,也称视觉显著性检测,指通过智能算法模拟人的视觉系统特点,预测人类的视觉凝视点(就是全神贯......
  • opencv-python 4.8. 图像金字塔
    理论通常,我们曾经使用恒定大小的图像。但在某些情况下,我们需要使用不同分辨率的(相同)图像。例如,在搜索图像中的某些内容时,如脸部,我们不确定该对象在所述图像中的大小。在这种情况下,我们需要创建一组具有不同分辨率的相同图像,并在所有图像中搜索对象。这些具有不同分辨率的图像被称......
  • [Python]异步wait和gather
    相同点:从功能上看,asyncio.wait和asyncio.gather实现的效果是相同的。不同点:使用方式不一样,wait需要传一个可迭代对象,gather传多个元素wait比gather更底层,gather可以直接得到结果,wait先得到future再得到结果wait可以通过设置timeout和return_when来终止任务gather可以......
  • 如何把一个 Python 项目发布到 PyPI 上指南教程 All In One
    如何把一个Python项目发布到PyPI上指南教程AllInOne如何发布一个Python项目到PyPI上如何发布一个Python包到PyPI上https://pypi.org/user/xgqfrms/官方文档PackagingPythonProjects打包Python项目https://packaging.python.org/en/latest/tutorials/......
  • python中类成员修饰符
    在java,c#类的成员修饰符包括,公有、私有、程序集可用的、受保护的。对于python来说,只有两个成员修饰符:公有成员,私有成员成员修饰符是来修饰谁呢?当然是修饰成员了。那么pyt......
  • [Python]async异步爬虫
    importasyncioimportaiohttpasyncdefdownload_img(session,url):file_name=url.rsplit('/')[-1]print(f"下载图片:{file_name}")awaitasyncio.......
  • 【Python】函数的可变参数 *args 和 **kwargs的使用
    可变参数*args和**kwargs*args和**kwargs主要用于定义函数的可变参数,*args和**kwargs组合起来可以传入任意的参数。(注意:参数*args必须在**kwargs之前定义)*arg......
  • python——list求交集、并集、差集
    https://blog.csdn.net/qq_41985134/article/details/122956104   ......
  • python学习(二)
    1Python中的标识符和保留字有的单词赋予了特定的意义,在给对象起名字时不能使用例如代码:importkeywordprint(keyword.kwlist)结果:['False','None','True','and......
  • python+playwright 学习-42 离线安装 playwright 环境
    前言有些同学可能是在公司局域网办公,无法连到外网去在线下载,本篇教大家在本地局域网部署好playwright环境playwright本地下载先找个有网络的电脑,下载playwright,不要......