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

python基础 面向练习学习python1

python基础 面向练习学习python1

    • 1. 电话查询
      • 问题描述
      • 1. 问题分析
        • 1. 输入输出分析
        • 2. 需求分析:将题目的数据存储并查询
        • 2. 所需知识: python 数据存储的类型
        • 3. 确定数据存储类型
        • 4. 如何书写代码
        • 拓展 从键盘中添加或删除联系人
        • 5. 回到数据查询 代码
        • 拓展 功能增加
      • 2. 代码
        • 1. 题目详细部分
          • 输入输出要求
          • **输入输出示例**
        • 2. 最终提交代码
    • 2. 成绩统计(列表版)
      • 问题描述
      • 1. 问题分析
        • 1. 输入输出分析
        • 2. 需求分析: 读取键盘输入内容,存储在列表中,并计算平均分,和找出前三名
        • 3. 所需知识: python读取键盘内容的数据类型,如何转化为列表,列表如何计算平均值,列表如何排序并输出成绩前三最大数
          • 1. python读取键盘输入内容(input)的数据类型
          • 2. 将字符串转化为列表的方法
            • 1. **使用 `split()` 方法**:
            • 2. **使用列表推导式**:
            • 3. **使用 `list()` 函数**:
            • 4. **使用正则表达式**:
          • 3. 列表如何计算平均值
          • 拓展:获取列表中对象的个数 : len( )
            • 使用方法
            • 示例
            • 注意事项
          • 4. 列表如何排序
          • 5. 获取列表中确定位置的值
        • 4. 书写代码
      • 2. 代码
    • 3. **补考几科(列表)**
      • 问题描述
      • 1.问题分析
        • 1. 输入输出分析
        • 2. 需求分析 : 读取每行输入每门课程的成绩,如何转化为列表,计算平均分和 要补考的门数
        • 3. 所需知识 : python如何把每行输入的成绩转化为列表,列表计算平均分,列表筛选出小于60分的门数。
          • 1. python 多行输入存储
          • 2. 列表计算平均分
          • 3. 列表筛选出小于60分的门数
      • 使用列表推导式
      • 使用 `filter()` 函数
          • 4. 书写代码
        • 2. 代码
    • 4. 课程及其编码保存为字典
      • 问题描述
      • 1. 问题分析
        • 1. 输入输出分析
        • 2. 需求分析: 输入格式存储为字典,向字典中添加键值对,修改其中的键值对,删除其中的键值对,排序字典的键值对并输出
        • 3. 所需知识: python 如何将输入格式存储为字典, 字典的增删改查操作如何实现,字典排序如何实现
          • 1. python 如何将输入 格式存储为字典
          • 2. 字典的增删改查操作如何实现
            • 1. **添加键值对:**
            • 2. **修改键值对:**
            • 3. **删除键值对:**
            • 4. **查询键值对:**
          • 3.字典排序如何实现
          • 5. 拓展: 使用update() 完成字典的增加操作
          • 6. 拓展: 使用 pop() 方法删除字典中指定键的键值对
        • 4.书写代码
      • 2. 代码
        • 优化代码
        • 输出要求键值对变换

1. 电话查询

问题描述

定义一个电话簿,里头设置以下联系人:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘mayun’:‘13309283335’,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘zhaolong’:‘18989227822’,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘zhangmin’:‘13382398921’,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘Gorge’:‘19833824743’,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘Jordan’:‘18807317878’,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘Curry’:‘15093488129’,‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‘Wade’:'19282937665’‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

现在输入人名,查询他的号码。

1. 问题分析

1. 输入输出分析

输入:人名
输出:电话号码

2. 需求分析:将题目的数据存储并查询

我们要解决几个问题,
数据的存储,数据的查询,
首先如何存储数据?
输入人名,输出电话号码,
人名相当于是地址标记,电话号码是数据,
但是不是,如果输入电话号码查找人名该怎么办呢?
所以,他们应该是同等的,
两个数据链接起来,输入一个可以查找其他的数据就像对象的封装一样,
python有哪个数据类型能完成我的想法?
但是,我们要先知道python里面有哪些数据类型

2. 所需知识: python 数据存储的类型

在Python中,有许多种不同的数据类型,每种类型都有其特定的用途和适用场景。下面是一些常见的数据类型以及它们的简要介绍:

  1. 整数(int):用于表示整数值,如 -5, 0, 100 等。

  2. 浮点数(float):用于表示带有小数部分的数值,如 3.14, -0.001, 2.71828 等。

  3. 字符串(str):用于表示文本数据,由单引号 ' 或双引号 " 包裹,如 'hello', "world", '123' 等。

  4. 列表(list):用于存储一系列有序的元素,可以包含不同类型的数据,如 [1, 2, 3], ['apple', 'banana', 'orange'] 等。

  5. 元组(tuple):类似于列表,但是元组是不可变的,即不能修改其中的元素,如 (1, 2, 3), ('a', 'b', 'c') 等。

  6. 字典(dict):用于存储键值对,每个键都与一个值相关联,键必须是唯一的,如 {'name': 'John', 'age': 30, 'city': 'New York'} 等。

  7. 集合(set):用于存储无序、不重复的元素,主要用于去重和集合运算,如 {1, 2, 3}, {2, 2, 3, 3, 4, 4} 等。

  8. 布尔值(bool):用于表示真值或假值,只有两个取值:TrueFalse

3. 确定数据存储类型

根据之前的描述,我们需要一个能够存储键值对,并且能够根据键或值进行快速查找的数据类型。在Python中,字典(dict)正是满足这个需求的数据类型。

字典是一种无序的数据集合,它通过键值对的方式来存储数据,每个键对应一个值。这种键值对的存储方式非常灵活,既能够通过键快速查找值,也能够通过值快速查找键。因此,字典非常适合用来存储联系人的名字和对应的电话号码,无论是根据名字查找电话号码,还是根据电话号码查找名字,都能够很方便地完成。

4. 如何书写代码

好的,我们确定了存储的数据类型如何书写存储在字典的代码?
典型的字典存储,直接定义

phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
}

在这段代码中,我们创建了一个名为 phone_book 的字典,其中每个键都是联系人的名字,对应的值是他们的电话号码。例如,键 'mayun' 对应的值是 '13309283335',表示马云的电话号码是 13309283335

可以根据实际情况,添加或修改字典中的键值对,来存储更多的联系人信息。例如,如果想要添加一个新的联系人,可以像这样将新的键值对添加到 phone_book 字典中:

phone_book['new_contact'] = '123456789'

这样,就成功地向电话簿中添加了一个新的联系人信息。

拓展 从键盘中添加或删除联系人

如果想通过键盘输入的方式来增加或删除字典中的值,可以编写一个交互式的程序。
下面是一个示例代码,演示了如何通过用户输入来添加或删除电话簿中的联系人信息:

phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
}def add_contact():# 操作和功能用函数定义,方便调用和整合name = input("请输入联系人姓名:")# 接收输入用户的姓名number = input("请输入联系人电话号码:")# 接收输入用户的电话号码phone_book[name] = number# 默认以姓名为键,电话号码为值print("已成功添加联系人:{} - {}".format(name, number))# 展示成功添加的联系人def delete_contact():name = input("请输入要删除的联系人姓名:")# 用户输入键删除 姓名和电话号码if name in phone_book:#判断是否存在于电话簿中,健壮性del phone_book[name]#删除操作print("已成功删除联系人:{}".format(name))# 展示给用户,可以确定是否完成操作else:print("未找到联系人:{}".format(name))# 告诉用户打错了或者已经删除while True:# 主程序开始入口print("\n电话簿操作菜单:")print("1. 添加联系人")print("2. 删除联系人")print("3. 退出程序")#用户选择页面choice = input("请选择操作(输入对应数字):")#用户需要的操作  if choice == '1':add_contact()elif choice == '2':delete_contact()elif choice == '3':print("程序已退出。")breakelse:#保证程序的健壮性print("无效的选项,请重新输入。")

这段代码实现了一个简单的电话簿管理程序。程序会不断显示菜单,让用户选择操作。用户可以选择添加联系人、删除联系人或退出程序。根据用户的选择,程序会执行相应的操作,并根据用户输入的信息来更新电话簿中的数据。
但是这个代码有个问题,用户无法看到电话本的电话
我们加一行代码


为了让用户清楚地知道电话簿中已经包含的联系人信息,我们可以在菜单显示之前,添加一个选项来显示当前电话簿的内容。下面是更新后的代码:

phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
}def add_contact():name = input("请输入联系人姓名:")number = input("请输入联系人电话号码:")phone_book[name] = numberprint("已成功添加联系人:{} - {}".format(name, number))def delete_contact():name = input("请输入要删除的联系人姓名:")if name in phone_book:del phone_book[name]print("已成功删除联系人:{}".format(name))else:print("未找到联系人:{}".format(name))def show_phone_book():print("电话簿内容:")for name, number in phone_book.items():print("{} - {}".format(name, number))while True:show_phone_book()print("\n电话簿操作菜单:")print("1. 添加联系人")print("2. 删除联系人")print("3. 退出程序")choice = input("请选择操作(输入对应数字):")if choice == '1':add_contact()elif choice == '2':delete_contact()elif choice == '3':print("程序已退出。")breakelse:print("无效的选项,请重新输入。")

在这个版本中,我们添加了一个新的函数 show_phone_book(),它会遍历电话簿中的每个联系人,并打印出他们的名字和电话号码。在每次用户进行操作之前,我们会先调用这个函数来显示电话簿的内容,这样用户就能清楚地知道当前电话簿中包含哪些联系人信息。


5. 回到数据查询 代码

刚刚我们解决了数据存储的问题现在我们面临数据查询的问题,那么python是如何查询字典呢?

在Python中,你可以使用字典的键来快速查询对应的值。字典内部实现了一种高效的数据结构,使得根据键来查找对应的值具有很高的效率,平均时间复杂度为 O(1)。

你可以通过以下两种方式来查询字典中的值:

  1. 使用键直接访问值

    phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
    }# 使用键直接访问值
    print(phone_book['mayun'])  # 输出:13309283335
    

    这种方式是最简单直接的查询方法,你只需要使用字典的键作为索引,就可以直接获取对应的值。

  2. 使用 get() 方法

    phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
    }# 使用 get() 方法访问值
    print(phone_book.get('mayun'))  # 输出:13309283335
    

    get() 方法接受一个键作为参数,返回对应键的值。与直接访问不同的是,如果键不存在于字典中,get() 方法会返回 None,而不是抛出 KeyError 异常。

无论是直接使用键访问值,还是使用 get() 方法,都能够很方便地查询字典中的值。

拓展 功能增加

好的,我们可以在之前的电话簿管理程序中加入一个功能,允许用户通过输入联系人的名字来查询其电话号码。下面是更新后的代码:

phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
}def add_contact():name = input("请输入联系人姓名:")number = input("请输入联系人电话号码:")phone_book[name] = numberprint("已成功添加联系人:{} - {}".format(name, number))def delete_contact():name = input("请输入要删除的联系人姓名:")if name in phone_book:del phone_book[name]print("已成功删除联系人:{}".format(name))else:print("未找到联系人:{}".format(name))def show_phone_book():print("电话簿内容:")for name, number in phone_book.items():print("{} - {}".format(name, number))def search_contact():name = input("请输入要查找的联系人姓名:")if name in phone_book:print("{} 的电话号码是:{}".format(name, phone_book[name]))else:print("未找到联系人:{}".format(name))while True:print("\n电话簿操作菜单:")print("1. 添加联系人")print("2. 删除联系人")print("3. 查找联系人")print("4. 退出程序")choice = input("请选择操作(输入对应数字):")if choice == '1':add_contact()elif choice == '2':delete_contact()elif choice == '3':search_contact()elif choice == '4':print("程序已退出。")breakelse:print("无效的选项,请重新输入。")

在这个更新后的程序中,我们添加了一个名为 search_contact() 的新函数。当用户选择查找联系人操作时,程序会提示用户输入联系人的名字,然后根据输入的名字在电话簿中查找对应的电话号码,并将结果显示给用户。

2. 代码

依据问题分析部分,我们可以书写完整代码,但是根据题目的详细要求,我们要做出修改

1. 题目详细部分
输入输出要求

【输入形式】‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

人名,是一个字符串。
【输出形式】‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

电话号码。如果该人不存在,返回"not found"
【样例输入】‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

mayun
【样例输出】‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

13309283335‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入输出示例

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入输出
示例 1Curry15093488129
2. 最终提交代码
phone_book = {'mayun': '13309283335','zhaolong': '18989227822','zhangmin': '13382398921','Gorge': '19833824743','Jordan': '18807317878','Curry': '15093488129','Wade': '19282937665'
}def search_contact(name):if name in phone_book:return phone_book[name]else:return "not found"# 获取用户输入
name = input()# 调用函数进行查询并输出结果
print(search_contact(name))

好的这个题目就结束了,看第二题

2. 成绩统计(列表版)

问题描述

输入一组学生成绩,存放于列表中,计算所有学生的平均分和前三名的成绩。

1. 问题分析

1. 输入输出分析

输入: 一组学生成绩

输出: 学生平均分和前三名成绩

约束 :学生成绩存储在列表

2. 需求分析: 读取键盘输入内容,存储在列表中,并计算平均分,和找出前三名
3. 所需知识: python读取键盘内容的数据类型,如何转化为列表,列表如何计算平均值,列表如何排序并输出成绩前三最大数
1. python读取键盘输入内容(input)的数据类型

在Python中,input() 函数接受用户输入,并将输入的内容作为字符串返回。无论用户输入的是数字、字母、符号还是其他内容,input() 函数都会将其作为字符串类型返回。

因此,无论用户输入的内容是什么,我们都会得到一个字符串。例如,如果用户输入了数字 "90 80 70",那么 input() 函数将返回字符串 "90 80 70";如果用户输入了字母 "abc def",那么 input() 函数将返回字符串 "abc def"

在我们的程序中,我们可以使用 input() 函数来接收用户输入的成绩,然后将输入的字符串按照空格分割成一个列表。接下来,我们可以将列表中的字符串成绩转换为整数类型,以便进行数值计算。

2. 将字符串转化为列表的方法

在Python中,有几种常用的方法可以将字符串转换为列表:

1. 使用 split() 方法

split() 方法可以根据指定的分隔符将字符串分割成多个子串,并返回一个包含所有子串的列表。

# 示例
string = "apple banana cherry"
lst = string.split()  # 使用空格分割字符串,默认按空格分割
print(lst)  # 输出:['apple', 'banana', 'cherry']
2. 使用列表推导式

如果字符串的内容符合某种规律(例如每个单词之间用空格分隔),我们可以使用列表推导式将字符串拆分为列表。

# 示例
string = "apple banana cherry"
lst = [word for word in string.split()]  # 使用列表推导式将字符串按空格分割成列表
print(lst)  # 输出:['apple', 'banana', 'cherry']
3. 使用 list() 函数

list() 函数可以将字符串中的每个字符分割成单独的字符,并返回一个包含所有字符的列表。

# 示例
string = "apple"
lst = list(string)  # 将字符串拆分为单个字符的列表
print(lst)  # 输出:['a', 'p', 'p', 'l', 'e']
4. 使用正则表达式

如果需要更复杂的分割规则,可以使用 Python 的 re 模块中的正则表达式功能。

import re# 示例:按照逗号和空格分割字符串
string = "apple, banana, cherry"
lst = re.split(r',\s*', string)
print(lst)  # 输出:['apple', 'banana', 'cherry']

这些方法中,最常用的是 split() 方法和列表推导式,它们适用于大多数情况下的字符串拆分需求。

3. 列表如何计算平均值

还有一件很重要的事情 字符串虽然改成列表了,但列表里仍然是字符串

我们需要把他们转化为整数

scores = [int(scores) for score in scores] #将字符串列表转换为整数列表

要计算列表中所有元素的平均值,可以按照以下步骤进行:

  1. 将列表中所有元素相加,得到总和。
  2. 将总和除以列表的长度,得到平均值。

下面是一个示例代码:

# 定义一个包含成绩的列表
scores = [90, 85, 88, 92, 95]# 计算总和
total = sum(scores)# 计算平均值
average = total / len(scores)# 输出结果
print("平均值为:", average)

这段代码首先定义了一个包含成绩的列表 scores,然后使用 sum() 函数计算列表中所有成绩的总和,将结果存储在变量 total 中。接着,使用 len() 函数获取列表的长度,即学生人数,然后将总和除以学生人数,得到平均值,并将结果存储在变量 average 中。最后,使用 print() 函数输出平均值。

在实际应用中,只需将以上代码中的 scores 替换为所拥有的成绩列表,即可计算该列表中所有元素的平均值。

拓展:获取列表中对象的个数 : len( )

len() 是 Python 内置函数之一,用于获取对象的长度或元素个数。它可以应用于各种数据类型,包括字符串、列表、元组、字典等。

使用方法

语法:len(object)

  • object:要获取长度的对象。
示例
  1. 获取字符串的长度:
string = "Hello, world!"
length = len(string)
print("字符串的长度为:", length)  # 输出:13
  1. 获取列表的长度:
my_list = [1, 2, 3, 4, 5]
length = len(my_list)
print("列表的长度为:", length)  # 输出:5
  1. 获取元组的长度:
my_tuple = (1, 2, 3, 4, 5)
length = len(my_tuple)
print("元组的长度为:", length)  # 输出:5
  1. 获取字典的长度(即键值对的数量):
my_dict = {"a": 1, "b": 2, "c": 3}
length = len(my_dict)
print("字典的长度为:", length)  # 输出:3
注意事项
  • 对于字符串,len() 返回字符串中字符的个数。

  • 对于列表、元组和字典,**len() 返回它们包含的元素的个数**(即列表和元组中元素的数量,字典中键值对的数量)。

  • 如果传入的对象是空的,len() 将返回 0。

  • 如果传入的对象是一个自定义类的实例,可以在类中定义 __len__() 方法来自定义长度的计算方式。

4. 列表如何排序

在Python中,可以使用 sorted() 函数或列表对象的 sort() 方法对列表进行排序。

  1. 使用 sorted() 函数sorted() 函数可以接受一个可迭代对象(如列表)作为参数,并返回一个新的已排序的列表,而不修改原始列表。
# 示例:使用 sorted() 函数对列表进行排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
  1. 使用列表对象的 sort() 方法sort() 方法会就地修改列表对象,将其排序。
# 示例:使用 sort() 方法对列表进行排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print(numbers)  # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

无论使用 sorted() 函数还是 sort() 方法,都可以实现对列表的排序。如果需要保留原始列表,可以使用 sorted() 函数;如果希望就地修改原始列表,可以使用 sort() 方法。

5. 获取列表中确定位置的值

要获取列表中特定位置的值,你可以使用索引。在 Python 中,列表的索引从 0 开始,因此第一个元素的索引为 0,第二个元素的索引为 1,依此类推。你可以通过将索引放在列表名称后的方括号内来访问列表中的元素。下面是一个示例:

my_list = [10, 20, 30, 40, 50]# 获取第一个元素(索引为0)
first_element = my_list[0]
print("第一个元素:", first_element)  # 输出:10# 获取第三个元素(索引为2)
third_element = my_list[2]
print("第三个元素:", third_element)  # 输出:30

如果你想获取列表中的最后一个元素,可以使用负数索引 -1。负数索引从列表的末尾开始,-1 表示最后一个元素,-2 表示倒数第二个元素,依此类推。例如:

my_list = [10, 20, 30, 40, 50]# 获取最后一个元素
last_element = my_list[-1]
print("最后一个元素:", last_element)  # 输出:50# 获取倒数第三个元素
third_from_last_element = my_list[-3]
print("倒数第三个元素:", third_from_last_element)  # 输出:30

使用索引,你可以方便地访问列表中特定位置的值。

4. 书写代码

现在我们开始书写代码,

首先python读取键盘输入内容

scores = input()#用scores来接受input()的返回值此时scores的数据类型为字符串

然后我们把字符串转化为列表,再传递给scores,因为数据简单,我们选择split()方法来转换

scores = scores.split()#split()将空格中的字符串变为列表的元素

字符串虽然改成列表了,但列表里仍然是字符串

我们需要把他们转化为整数

scores = [int(score) for score in scores] #将字符串列表转换为整数列表

然后计算平均值,列表内元素相加再除以列表的长度

total = sum(scores)#使用sum()方法计算总和
average = total/len(scores)#使用len()方法获取total列表的长度

因为要求输出的保留一位小数,所以

print("{:.1f}".format(average))

最后对列表排序,前三名输出

sorted_scores = sorted(scores)#使用sorted()函数给整数列表排序
first_score = sorted_scores[-1]
second_score = sorted_scores[-2]
third_score = sorted_scores[-3]

因为要求输出的之间要空格在一行

所以

print(str(first_score)+" "+str(second_score)+" "+str(third_score)+" ")

2. 代码

所有代码功能已经实现,现在开始完整代码

scores = input()#用scores来接受input()的返回值此时scores的数据类型为字符串
scores = scores.split()#字符串转化为字符串列表
scores = [int(score) for score in scores] #将字符串列表转换为整数列表
total = sum(scores)#使用sum()方法计算总和
average = total/len(scores)#使用len()方法获取total列表的长度
sorted_scores = sorted(scores) #使用sorted()函数给整数列表排序
first_score = sorted_scores[-1]
second_score = sorted_scores[-2]
third_score = sorted_scores[-3]
print("{:.1f}".format(average))
print(str(first_score)+" "+str(second_score)+" "+str(third_score)+" ")

到这里初级方法写这个代码就完成了,当然还有高级方法完成以下

#主程序
def str_to_list(scores):#字符串转化为整数列表scores = scores.split()#字符串转化为字符串列表scores = [int(score) for score in scores] #将字符串列表转换为整数列表return scoresdef calculate_scores(scores):#封装功能方法total = sum(scores)#使用sum()方法计算总和average = total/len(scores)#使用len()方法获取total列表的长度sorted_scores = sorted(scores) #使用sorted()函数给整数列表排序first_score = sorted_scores[-1]second_score = sorted_scores[-2]third_score = sorted_scores[-3]return average,first_score,second_score,third_scorescores = input()#用scores来接受input()的返回值此时scores的数据类型为字符串
scores = str_to_list(scores)
average,first_score,second_score,third_score=calculate_scores(scores)
print("{:.1f}".format(average))
print(str(first_score)+" "+str(second_score)+" "+str(third_score)+" ")

虽然暂时达不到,但是思想可以借鉴,每一个功能就封装为一个方法

#主程序
def str_to_list(scores):#字符串转化为整数列表scores = scores.split()#字符串转化为字符串列表scores = [int(score) for score in scores] #将字符串列表转换为整数列表return scoresdef calculate_scores(scores):#封装功能方法total = sum(scores)#使用sum()方法计算总和average = total/len(scores)#使用len()方法获取total列表的长度sorted_scores = sorted(scores) #使用sorted()函数给整数列表排序first_score = sorted_scores[-1]second_score = sorted_scores[-2]third_score = sorted_scores[-3]return sorted_scores,first_score,second_score,third_scorescores = input()#用scores来接受input()的返回值此时scores的数据类型为字符串
scores = str_to_list(scores)
sorted_scores,first_score,second_score,third_score=calculate_scores(scores)
print("{:.1f}".format(average))
print(str(first_score)+" "+str(second_score)+" "+str(third_score)+" ")

3. 补考几科(列表)

问题描述

【问题描述】输入一个学生5门课程的成绩,存放于列表中,输出平均分和要补考的门数。

1.问题分析

1. 输入输出分析

输入: 每行输入每门课程的成绩(一共5门)
输出: 平均分和要补考的门数 两行

2. 需求分析 : 读取每行输入每门课程的成绩,如何转化为列表,计算平均分和 要补考的门数
3. 所需知识 : python如何把每行输入的成绩转化为列表,列表计算平均分,列表筛选出小于60分的门数。
1. python 多行输入存储

在 Python 中,你可以使用循环来逐行读取多行输入,并将每一行存储在一个列表中。下面是一个示例代码,演示了如何实现这一功能:

# 创建一个空列表来存储多行输入
lines = []# 使用循环逐行读取输入,直到输入结束(输入空行为结束标志)
while True:line = input("请输入一行内容(输入空行结束):")if line == "":break  # 如果输入为空行,退出循环lines.append(line)  # 将输入的行添加到列表中# 输出存储的多行输入
print("你输入的内容是:")
for line in lines:print(line)

这段代码会提示用户逐行输入内容,直到输入空行为止。用户每输入一行内容,都会将该行添加到列表 lines 中。最后,程序会输出存储的多行输入内容。

2. 列表计算平均分

之前说过了,不再说

3. 列表筛选出小于60分的门数

在 Python 中,可以使用列表推导式或 filter() 函数来筛选符合条件的数据。

使用列表推导式

列表推导式是一种简洁的方法,用于根据条件从一个列表中生成一个新的列表。语法如下:

new_list = [expression for item in iterable if condition]

其中:

  • expression 是一个表达式,用于定义新列表中的元素。
  • item 是可迭代对象中的元素。
  • iterable 是一个可迭代对象,例如列表、元组、集合等。
  • condition 是一个条件,只有当条件为 True 时,item 才会被包含在新列表中。

示例:

# 从列表中筛选出所有大于等于5的元素
old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = [x for x in old_list if x >= 5]
print(new_list)  # 输出:[5, 6, 7, 8, 9, 10]

使用 filter() 函数

filter() 函数用于过滤可迭代对象中的元素,返回一个迭代器,其中包含使函数返回 True 的元素。语法如下:

filter(function, iterable)

其中:

  • function 是一个函数,用于定义过滤条件。
  • iterable 是一个可迭代对象,例如列表、元组、集合等。

示例:

# 定义一个函数,用于判断元素是否大于等于5
def greater_than_five(x):return x >= 5# 使用 filter() 函数筛选符合条件的元素
old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = list(filter(greater_than_five, old_list))
print(new_list)  # 输出:[5, 6, 7, 8, 9, 10]

无论使用列表推导式还是 filter() 函数,都可以实现对列表中符合条件的元素进行筛选。选择哪种方法取决于个人偏好和具体情况。

4. 书写代码
  1. 首先读取每行输入的成绩用之前提到的python多行输入存储
# 创建一个空列表来存储多行输入
scores = []# 使用循环逐行读取输入,直到输入结束(输入空行为结束标志)
while True:score = input()if score == "":break  # 如果输入为空行,退出循环scores.append(score)  # 将输入的行添加到列表中
  1. 将字符串列表转化为整数列表
scores = [int(scores) for score in scores] #将字符串列表转换为整数列表
  1. 列表计算平均分
total = sum(scores)#sum()计算和
average = total/len(scores)#len()计算长度
  1. 列表筛选出小于60分的门数

    # 筛选小于60分的方法
    def smaller_than_60(x):return x < 60# 使用filter()函数筛选符合条件的元素 
    retaken_scores = list(filter(smaller_than_60,scores)
    #计算要补考的门数
    retaken_number = len(scores)
    
2. 代码

step_by_step 错误的

scores = []
while True : # 循环没有条件,从里面阻止score = input()# 输入赋值给scoreif score == "":#如果为空,跳出循环breakscores.append(score) #列表的append()方法用于添加列表的内容
# 多行输入已经到字符串列表
# 现在由字符串列表转为 整数列表
scores = [int(score) for score in scores]
# 现在开始计算平均分
total = sum(scores)
average = total /len(scores)
#最后计算要补考的科目
#首先定义一个补考函数
def smaller_than_60(x):return x < 60
# 用filter()函数筛选可迭代对象的元素
retaken_scores = list(filter(smaller_than_60,scores))
retaken_number = len(retaken_scores)
print(average)
print(retaken_number)

功能成方法

# python123 35 题 T3# 多行输入已经转换字符串列表方法
def input_to_list():    for _ in range(5):score = input()# 输入赋值给scorescores.append(score) #列表的append()方法用于添加列表的内容return scores#由字符串列表转为 整数列表
def strlist_to_intlist(scores):scores = [int(score) for score in scores]return scores# 求平均数
def average_score(scores):total = sum(scores)average = total / len(scores)return average# 补考函数
def smaller_than_60(x):return x < 60def retaken_number(scores):# 用filter()函数筛选可迭代对象的元素retaken_scores = list(filter(smaller_than_60,scores))retaken_number = len(retaken_scores)return retaken_numberscores = []
scores = input_to_list()
scores = strlist_to_intlist(scores)
average = average_score(scores)
retaken_number = retaken_number(scores)
print(average)
print(retaken_number)

4. 课程及其编码保存为字典

问题描述

描述

按以下格式输入课程及编码的字典,然后编写代码完成如下功能:‪‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(1)向字典中添加键值对"chemist":205。‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(2)修改"math"对应的值为 201。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(3)用pop方法删除"biology"对应的键值对(若不存在该键,则返回“not exist")。‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(4)并按照键的升序打印字典 的全部信息,参考格式如下(注意,其中冒号为英文冒号,逐行打印)‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‪‪

1. 问题分析

1. 输入输出分析

输入: 课程和编码的字典

{“math”:200, “chinese”:202, “english”:203}

输出:按照键的升序打印字典 的全部信息

205:chemist
202:chinese
203:english
201:math‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

(注意,其中冒号为英文冒号,逐行打印)

2. 需求分析: 输入格式存储为字典,向字典中添加键值对,修改其中的键值对,删除其中的键值对,排序字典的键值对并输出
3. 所需知识: python 如何将输入格式存储为字典, 字典的增删改查操作如何实现,字典排序如何实现
1. python 如何将输入 格式存储为字典

输入的格式是一个字符串,表示一个字典,其中键值对以键值对应的字符串形式给出,键值对之间用逗号分隔,键与值之间用英文冒号分隔。这种格式可以通过 eval() 函数来转换为字典。

下面是一个示例代码:

input_str = '{"math":200, "chinese":202, "english":203}'
course_dict = eval(input_str)
print(course_dict)

运行这段代码,会输出:

{'math': 200, 'chinese': 202, 'english': 203}

这样,输入的字符串就被转换成了一个字典。注意,使用 eval() 函数时需要确保输入的字符串是安全的,不包含任何恶意代码,否则可能存在安全风险。

2. 字典的增删改查操作如何实现

字典的增删改查操作如下:

1. 添加键值对:

使用字典的索引赋值操作或者 update() 方法来添加键值对。

2. 修改键值对:

使用字典的索引赋值操作来修改键对应的值。

3. 删除键值对:

使用 del 关键字或者 pop() 方法来删除键值对。

4. 查询键值对:

使用键来索引字典的值,或者使用 get() 方法来获取键对应的值,以避免键不存在时出现错误。

下面是具体的实现示例:

# 定义初始字典
course_dict = {'math': 200, 'chinese': 202, 'english': 203}# 添加键值对
course_dict['chemist'] = 205
print("添加键值对后的字典:", course_dict)# 修改键值对
course_dict['math'] = 201
print("修改键值对后的字典:", course_dict)# 删除键值对
deleted_value = course_dict.pop('biology', 'not exist')
print("删除键值对后的字典:", course_dict)
print("删除的值(若键不存在则返回):", deleted_value)# 查询键值对
course_english = course_dict['english']
print("英语成绩:", course_english)# 更安全的查询方式
course_biology = course_dict.get('biology', 'not exist')
print("生物成绩(安全查询):", course_biology)

运行以上代码,会得到如下输出:

添加键值对后的字典: {'math': 200, 'chinese': 202, 'english': 203, 'chemist': 205}
修改键值对后的字典: {'math': 201, 'chinese': 202, 'english': 203, 'chemist': 205}
删除键值对后的字典: {'math': 201, 'chinese': 202, 'english': 203, 'chemist': 205}
删除的值(若键不存在则返回): not exist
英语成绩: 203
生物成绩(安全查询): not exist

这样,你就可以实现字典的增删改查操作了。

3.字典排序如何实现

字典是无序的数据结构,无法直接对字典进行排序。但是,我们可以对字典的键或值进行排序,然后再根据排好序的键或值来访问字典的键值对。具体做法是使用 sorted() 函数或者 collections 模块中的 OrderedDict 类。

  1. **对键进行排序:**使用 sorted() 函数对字典的键进行排序,然后遍历排序后的键,依次访问字典的键值对。

  2. **对值进行排序:**如果需要按照值进行排序,可以使用 sorted() 函数结合 key 参数,指定排序的依据为字典的值。

下面是具体的实现示例:

# 定义初始字典
course_dict = {'math': 200, 'chinese': 202, 'english': 203, 'chemist': 205}# 按照键进行排序并打印
sorted_keys = sorted(course_dict.keys())
print("按照键升序排序后的字典:")
for key in sorted_keys:print("{}:{}".format(key, course_dict[key]))# 按照值进行排序并打印
sorted_items = sorted(course_dict.items(), key=lambda x: x[1])
print("按照值升序排序后的字典:")
for key, value in sorted_items:print("{}:{}".format(key, value))

运行以上代码,会得到按照键或值升序排序后的字典输出。

5. 拓展: 使用update() 完成字典的增加操作

update() 方法用于将一个字典中的键值对添加到另一个字典中,或者用一个字典中的键值对更新另一个字典中相同键的值。具体用法如下:

# 定义两个字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}# 使用 update() 方法将 dict2 的键值对添加到 dict1 中
dict1.update(dict2)# 输出更新后的 dict1
print(dict1)

运行以上代码,会输出:

{'a': 1, 'b': 3, 'c': 4}

可以看到,update() 方法将 dict2 的键值对添加到 dict1 中,并更新了相同键的值。

6. 拓展: 使用 pop() 方法删除字典中指定键的键值对

pop() 方法用于删除字典中指定键的键值对,并返回对应的值。具体用法如下:

# 定义一个字典
my_dict = {'a': 1, 'b': 2, 'c': 3}# 使用 pop() 方法删除指定键的键值对,并返回对应的值
value = my_dict.pop('b')# 输出删除后的字典和返回的值
print("删除后的字典:", my_dict)
print("删除的值:", value)

运行以上代码,会输出:

删除后的字典: {'a': 1, 'c': 3}
删除的值: 2

可以看到,pop('b') 删除了字典中键为 ‘b’ 的键值对,并返回了对应的值。如果指定的键不存在,则 pop() 方法会引发 KeyError 异常,但可以提供一个默认值,以避免异常,例如 pop('z', None) 将返回 None 而不会引发异常。

4.书写代码

python输入的格式存储为字典

input_str = input() #获取键盘输入
course_dict = eval(input_str) #使用eval函数转化

实现向字典中添加键值对"chemist":205。‪‪‪‪‪‫‪‪‪‪‪‪‪‪

# 直接使用字典的索引赋值操作
course_dict[chemist] = 205
# 使用update()方法添加键值对
course_dict_add = {'chemist':205}
course_dict.update(course_dict_add)

实现修改"math" 对应的值为201

#使用字典的索引赋值操作来修改键对应的值。
course_dict[math] = 201

实现用pop方法删除"biology"对应的键值对(若不存在该键,则返回"not exist")

#因为明确用pop方法,我们必须使用pop() 
# pop(x,y)如果有x就删除,没有就返回y
deleted_value = course_dict.pop('biology','not exist')

实现按照键的升序打印字典的全部信息

#键的升序就是按照 科目的升序
sorted_keys = sorted(course_dict.keys())
#键是key 值是item
#打印全部
for key in sorted_keys:print("{}:{}".format(key, course_dict[key]))

2. 代码

最终书写完整代码

def str_to_dict(x):y = eval(x)return y
def add_dict(x1):x2 = {'chemist':205}x1.update(x2)return x1
input_str = input()
course_dict = str_to_dict(input_str)
course_dict = add_dict(course_dict)
course_dict['math'] = 201
deleted_value = course_dict.pop('biology','not exist')
sorted_keys = sorted(course_dict.keys())
for key in sorted_keys:print("{}:{}".format(key, course_dict[key]))
优化代码

你的代码基本实现了题目要求,但是我注意到了一些可以改进的地方:

  1. **eval() 函数的使用:**虽然 eval() 函数能够将字符串转换为字典,但是它具有一定的安全风险,因为它会执行字符串中的任何有效 Python 表达式。在这种情况下,如果输入的字符串不符合字典的格式,可能会引发异常。更安全的方法是使用 json 模块来解析 JSON 格式的字符串。

  2. **函数命名:**函数命名应当尽量清晰明了,可以更具体地描述函数的功能。

  3. **全局变量和局部变量的使用:**尽量避免在函数中直接修改全局变量,而应该将函数的结果作为返回值返回,在主程序中接收并处理。

下面是一个改进后的示例代码:

import jsondef str_to_dict(input_str):# 使用 json.loads() 方法将输入的字符串转换为字典return json.loads(input_str) #json更加安全可靠def add_chemist(course_dict):# 添加化学成绩course_dict['chemist'] = 205return course_dict# 获取用户输入
input_str = input("请输入课程及编码的字典:")
# 将字符串转换为字典
course_dict = str_to_dict(input_str)
# 添加化学成绩
course_dict = add_chemist(course_dict)
# 修改数学成绩
course_dict['math'] = 201
# 删除生物成绩
deleted_value = course_dict.pop('biology', 'not exist')
# 按键升序打印字典
sorted_keys = sorted(course_dict.keys())
for key in sorted_keys:print("{}:{}".format(key, course_dict[key]))

这样,你的代码更加清晰易读,并且减少了使用 eval() 函数带来的安全风险。

输出要求键值对变换

按照键的升序输出字典的键值对,每行格式为"值:键"。可以在遍历字典时,先将键值对的值和键格式化成你想要的形式输出。下面是相应的修改:

import jsondef str_to_dict(input_str):# 使用 json.loads() 方法将输入的字符串转换为字典return json.loads(input_str)def add_chemist(course_dict):# 添加化学成绩course_dict['chemist'] = 205return course_dict# 获取用户输入
input_str = input("请输入课程及编码的字典:")
# 将字符串转换为字典
course_dict = str_to_dict(input_str)
# 添加化学成绩
course_dict = add_chemist(course_dict)
# 修改数学成绩
course_dict['math'] = 201
# 删除生物成绩
deleted_value = course_dict.pop('biology', 'not exist')
# 按键升序打印字典
sorted_keys = sorted(course_dict.keys())
for key in sorted_keys:print("{}:{}".format(course_dict[key], key))

相关文章:

python基础 面向练习学习python1

python基础 面向练习学习python1 1. 电话查询问题描述1. 问题分析1. 输入输出分析2. 需求分析&#xff1a;将题目的数据存储并查询2. 所需知识&#xff1a; python 数据存储的类型3. 确定数据存储类型4. 如何书写代码拓展 从键盘中添加或删除联系人5. 回到数据查询 代码拓展 功…...

Ubuntu安装Docker和Docker Compose

文章目录 Docker安装Docker Compose安装示例前端Dockerfile示例 Docker官网&#xff1a; https://docs.docker.com/ Docker镜像仓库&#xff1a; https://hub.docker.com/ Docker安装 安装curl(可选) 如果已经安装了curl&#xff0c;则跳过此步骤 # 更新包缓存 sudo apt u…...

【linux软件基础知识】-死锁问题

死锁问题 当两个或多个线程由于每个线程都在等待另一个线程持有的资源而无法继续时,就会发生死锁 如下图所示, 在线程 1 中,代码持有了 L1 上的锁,然后尝试获取 L2 上的锁。 在线程 2 中,代码持有了 L2 上的锁,然后尝试获取 L1 上的锁。 在这种情况下,线程 1 已获取 L…...

C#面:简要谈对微软.NET 构架下 remoting 和 webservice 两项技术的理解以及实际中的应用

在微软 .NET 框架下&#xff0c;Remoting 和 WebService 是两种常用的技术&#xff0c;用于实现分布式应用程序的通信和交互。 Remoting&#xff08;远程调用&#xff09;&#xff1a; Remoting是一种用于在不同应用程序域之间进行通信的技术。它允许对象在不同的进程或计算机…...

《21天学通C++》(第十九章)STL集合类(set和multiset)

为什么需要set和multiset: 1.自动排序&#xff1a; set和multiset会自动按照元素的值进行排序。 2.快速查找&#xff1a; 由于元素是有序的&#xff0c;set和multiset可以提供对元素的快速查找&#xff0c;通常是基于二叉搜索树实现的&#xff0c;查找操作的时间复杂度为O(log …...

CSDN上是不是有机器人点赞和收藏?

我在CSDN上写作&#xff0c;主要是本来是记录学习工作中的一些知识点&#xff0c;看得人不多本来就能预想到的。 但是今天发现五一写的一篇博客&#xff0c;出现了很奇怪的阅读、点赞、收藏数。只有2个人阅读&#xff0c;但是有8个点赞&#xff0c;还有5个收藏。 我不禁怀疑CS…...

头歌C语言课程实验(递归函数、嵌套函数)

第1关&#xff1a;递归求阶乘数列 任务描述 题目描述&#xff1a;用递归求Sn1!2!3!4!5!…n!之值&#xff0c;其中n是一个数字。 相关知识&#xff08;略&#xff09; 编程要求 请仔细阅读右侧代码&#xff0c;结合相关知识&#xff0c;在Begin-End区域内进行代码补充。 输…...

树莓派的几种登录方式、及登录失败解决方式

使用TF卡安装树莓派的系统后&#xff0c;可以通过编辑TF卡里的文件来设置和启用 “ VNC ” 、“ SSH ” 和 “ 串口 ” 功能。不过&#xff0c;在使用中打开VNC和SSH可能并不直观或方便&#xff0c;因为这些服务通常在树莓派的系统内部配置和启动。但你可以通过以下步骤来设置和…...

数据库中视图的知识点

视图&#xff08;子查询&#xff09;&#xff1a;是从一个或多个表导出的虚拟的表&#xff0c;其内容由查询定义。具有普通表的结构&#xff0c;但是不实现数据存储。对视图的修改&#xff1a;单表视图一般用于查询和修改&#xff0c;会改变基本表的数据&#xff0c;多表视图一…...

aardio封装库) 微软开源的js引擎(ChakraCore)

前言 做爬虫肯定少不了JavaScript引擎的使用&#xff0c;比如在Python中现在一般用pyexecjs2来执行JavaScript代码&#xff0c;另外还有一些其他执行JavaScript的库&#xff1a; https://github.com/eight04/node_vm2: rpc调用nodejs&#xff0c;需要安装nodehttps://github.…...

LeetCode-hot100题解—Day6

原题链接&#xff1a;力扣热题-HOT100 我把刷题的顺序调整了一下&#xff0c;所以可以根据题号进行参考&#xff0c;题号和力扣上时对应的&#xff0c;那么接下来就开始刷题之旅吧~ 1-8题见LeetCode-hot100题解—Day1 9-16题见LeetCode-hot100题解—Day2 17-24题见LeetCode-hot…...

【Linux】gcc/g++的使用

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中gcc/g使用的相关内容。 如果看到最后您觉得这篇文章写得不错…...

2024-5-3学习笔记 虚拟继承原理

目录 原理 总结 前面提到过&#xff0c;解决菱形继承产生的数据二义性问题和数据冗余&#xff0c;就需要用到虚拟继承&#xff0c;关于它是如何解决的&#xff0c;我们来一起研究。 class Person { public :string _name ; // 姓名 }; class Student : virtual public Perso…...

C语言什么是“野指针”?

一、问题 “野指针”是⼀个⽐较陌⽣的术语&#xff0c;那么它到底是什么呢&#xff1f; 二、解答 当程序⾥声明了⼀个指针⽽又没有给这个指针赋值&#xff0c;使其指向⼀个地址时&#xff0c;这样的指针就称为“野指针”。 “野指针”会随意地指向⼀个地址。当对这个指针进⾏操…...

LeetCode--所有质数、质数对

1.0 Q: 输出 100 以内所有质数 1.1 /* 第一层循环控制检查到哪个数* 第二层通过遍历除以每个比他小的数的方式,检查每个数是不是质数* 由于要遍历检查,设置一个标记,只要任意一次循环可以整除,我们就设置该标记为不是质数 */boolean isPrime true;for (int i 2; i < 100…...

JavaScript异步编程——05-回调函数

我们在前面的文章《JavaScript 基础&#xff1a;异步编程/单线程和异步》中讲过&#xff0c;Javascript 是⼀⻔单线程语⾔。早期我们解决异步场景时&#xff0c;⼤部分情况都是通过回调函数来进⾏。 &#xff08;如果你还不了解单线程和异步的概念&#xff0c;可以先去回顾上一…...

JAVA基础之jsp标准标签

jsp动作标签实现实例化一个实体类 <jsp:useBean id"标识符" class"java类名" scope"作用范围"> 传统的java方式实例化一个实体类 Users user new Users(); <%%> id: 对象名 * class:类 创建对象时,完全限定名(包名…...

VM16激活码以及连接centos7过慢的问题

一、激活码 任选一个&#xff0c;直到能用为止 ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF71R-DMX85-08DQY-8YMNC-PPHV8 FA1M0-89YE3-081TQ-AFNX9-NKUC0 二-连接centos7过慢的问题 先备份/etc/ssh/sshd_config,备份命令为 cp /etc/ssh/sshd_config /etc/…...

MySQL 迁移到 Oracle 需要注意的问题

MySQL /Oracle 常见问题 1. VARCHAR/VARCHAR2/NVARCHAR 差异&#xff1a; MySQL 的 VARCHAR 是以字符为单位计算的&#xff0c;Oracle 的 VARCHAR 是 以字节为单位计算的&#xff0c;所以对中文的存储 Oracle 是 MySQL 的 2 倍 (GBK)和 3 倍(UTF8) 2. NULL 差异 A. MySQL…...

【数字经济】上市公司供应链数字化数据(2000-2022)

数据来源&#xff1a; 时间跨度&#xff1a;2000-2022年 数据范围&#xff1a;各上市企业 数据指标&#xff1a; 样例数据&#xff1a; 参考文献&#xff1a;[1]刘海建,胡化广,张树山,等.供应链数字化的绿色创新效应[J].财经研究,2023,49(03):4-18. 下载链接&#xff1a;https:…...

通过AOP实现项目中业务服务降级功能

最近项目中需要增强系统的可靠性&#xff0c;比如某远程服务宕机或者网络抖动引起服务不可用&#xff0c;需要从本地或者其它地方获取业务数据&#xff0c;保证业务的连续稳定性等等。这里简单记录下业务实现&#xff0c;主要我们项目中调用远程接口失败时&#xff0c;需要从本…...

LeetCode:盛最多水的容器

文章收录于LeetCode专栏 盛最多水的容器 给你n个非负整数a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点(i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线i的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与…...

阿里云 OSS桶对象存储攻防

目录 Bucket权限配置错误-公开访问 Bucket桶爆破 特定的Bucket策略配置 Bucket Object遍历...

外网禅道配置

exportfs -avrf 修改代码&#xff0c;避免启动太慢&#xff1a;vi /opt/zbox/bin/zbox.php 启动和停止 /opt/zbox/zbox start /opt/zbox/zbox stop...

MM模块学习一(供应商创建,物料类型的定义及功能)

物料管理流程&#xff1a; 源头&#xff1a;采购需求->采购申请 MRP&#xff1a;物料需求计划。运行物料需求计划的结果&#xff0c;根据物料的性质来判断是外购&#xff08;采购申请&#xff09;或者是生产&#xff08;计划订单->生产订单&#xff09;。 采购申请&am…...

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境&#xff1a; 秋叶安装包&#xff0c;安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包&#xff0c;直接解压包到comfyui根目录/custom_nodes/&#xff0c;重启后&#xff0c;按指导文件操作。 注意&#xff1a;网盘指导包中有配置好的流程json文件&#xff0…...

(类)偏特化Partial Specialization

当编写一个模板特化&#xff0c;涉及部分但不是全部模板参数时&#xff0c;它被称为偏特化&#xff08;Partial Specialization&#xff09;。【注意&#xff0c;偏特化是针对类模板而言&#xff0c;函数模板不可偏特化&#xff0c;只能全特化】 偏特化是C模板编程中的一种技术…...

TypeScript 基础学习笔记:interface 与 type 的异同

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 TypeScript 学习笔记&#xff1a;interface 与 type 的异同&#x1f3a3; 引言&#x1f680; 快速入门1️⃣ Interface&#xff08;接口&#xff09;&#x1f4cb; 定义&#x1f91d; 实现&#x1f4a1; 特点 2️⃣ Type Al…...

【管理咨询宝藏95】SRM采购平台建设内部培训方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏95】SRM采购平台建设内部培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 重点是建设一个适应战略采…...

第七届机电、机器人与自动化国际会议(ICMRA 2024)即将召开!

第七届机电、机器人与自动化国际会议&#xff08;ICMRA 2024&#xff09;将于2024年9月20日-22日在中国武汉举行。ICMRA 2024为各国专家学者提供一个学术交流的平台&#xff0c;讨论机电、机器人和自动化领域的最新研究成果和未来的研究方向&#xff0c;旨在能够建立起国家间&a…...

婚纱摄影网站图片/网站自然排名怎么优化

A. 阿里巴巴 数据中台 — 概述 概述 云上数据中台业务模式 — 6大独特价值 业务体感OneTeam协同作战特色大数据人云上数据中台大数据技术云上数据中台建设方法论云上数据中台产品化服务 底层基础设施 业务前台 — 业务数据化 VS 数据业务化云上数据中台 — 智能数据能力 既&q…...

珠海做网站推广公司/如何写推广软文

我正在通过Java创建几个XML文件,到目前为止一切正常,但是现在我在尝试创建一个带有命名空间前缀节点的文件时遇到了问题,即像< tns&#xff1a;node>这样的东西. …< / tns&#xff1a;node>使用我的代码的重构版本,该代码已经用于没有名称空间的普通xml文件.抛出的…...

集团公司网站建设方案/百度搜索榜排名

原文摘要描述17. Business Drives by Dave Muirhead【业务决定技术】为了建设一个系统&#xff0c;架构师必须把技术部门和业务部门团结在一起。但要明白二者的立场是不同的&#xff0c;避免技术人员作出业务决策。建造系统通常都是讲求投资回报的&#xff0c;从开工到投产…...

建站小二/百度收录入口

1. one team&#xff1a;生活日历 身为生活日历应该添加一些假期提醒以及工作人和双休日安排。可以添加第三方登录&#xff0c;使用户登录更加简单方便。应用了悬浮安妮&#xff0c;感觉把悬浮按钮放在顶部的的效果会更好&#xff0c;同时信息的显示不够清晰&#xff0c;绿色的…...

怎么做网站dreamwave/杭州网站建设 seo

复制文件夹中所有内容到指定位置 /*** 复制文件夹下的所有文件到指定目录* param oldPath* param newPath*/public static void copyFolder(String oldPath, String newPath) {try {// 如果文件夹不存在&#xff0c;则建立新文件夹(new File(newPath)).mkdirs();//读取整个文件…...

h5网站设计/做网站推广的公司

四、学习逆变&#xff08;DC-AC&#xff09;电路和LLC的基本工作原理。 全桥逆变电路包括单相全桥逆变电路和三相全桥逆变电路&#xff0c;逆变的主要功能是把直流电逆变成某一频率或可变频率的交流电供给负载。 单相半桥逆变电路基本工作原理 第一阶段&#xff0c;VT1基极脉…...