Python学习(三)—— 基础语法(下)

news2024/12/16 15:52:54

目录

一,函数

二,列表和元组

2.1 列表基础操作

2.2 切片

2.3 列表的增删查改

2.4 连接链表

2.5 元组 

三,字典

3.1 关于字典

3.2 字典的增删查改操作

3.3 遍历字典元素

3.4 合法的key类型

四,文件操作

4.1 打开关闭文件

4.2 读写文件

4.3 关于中文的处理


一,函数

Python 的函数和 C/C++ 的大体规则一致,但也有几点不同:

  • Python 的函数由def 开头,后面跟上函数名和参数列表,不需要在前面带上返回值类型
  • Python 的函数没有花括号,以def开头,return结尾,并且 Python 可以一次返回多个值,以逗号隔开
  • Python 的参数可以设定默认值,这点和 C++ 缺省参数一样
def Range(begin=1, end=100): #参数可以设置默认值
    sum = 0
    for i in range(begin, end+1):
        sum += i
    return begin, end, sum #可以一次返回多个参数

x = input('请输入第一个数 x:')
y = input('请输入第二个数 y:')
x = int(x)
y = int(y)

a, b, sum = Range(x, y)
print(f'x({a}) 与 y({b}) 中间所有数的和为:{sum}')

 

其它的像变量作用域,链式和嵌套调用以及递归等方面,Python对这些内容的定义和C++是一样的,这里不再赘述

二,列表和元组

2.1 列表基础操作

直接看代码,学习一门语言最简单粗暴的方式就是直接分析代码:

alist = [1, 'hello', True, 1.11] #允许往列表存放不同类型的元素
alist[2] = 'world' #可以通过下标访问和修改
print(alist[2])
print(alist[-1]) #下标为负数时表示倒数第几个值

 

可以用for或while来遍历列表元素:

alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 直接打印
for elem in alist:
    print(elem)

# 通过下标访问打印
for i in range(0, len(alist)):
    print(alist[i])

# 使用while打印
i = 0
while i < len(alist):
    print(alist[i])
    i += 1

2.2 切片

下标访问是一次访问一个元素,通过切片可以一次访问一组连续的元素,相当于得到一个子列表:

alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[1:3]) #表示的是[1, 3) 这样的前闭后开区间,所以最终结果只有2,3
print(alist[1:])        # 省略后边界, 表示获取到列表末尾
print(alist[:-1])       # 省略前边界, 表示从列表开头获取
print(alist[:])         # 省略两个边界, 表示获取到整个列表.

#切片操作还可以指定 "步长" , 也就是 "每访问一个元素后, 下标自增几步"
print(alist[::2])
print(alist[::5])

#步长可以是负数,表示从后往前访问,下标自减几步
print(alist[::-2])
print(alist[::-5])

 

2.3 列表的增删查改

直接看代码:

alist = [1, 2, 3, 4]
# 1,增加操作
alist.append(5) #append 在末尾新增一个元素,俗称“尾插”
alist.insert(1, 'hello') #insert 表示在指定位置插入
print(alist)

# 2,删除操作
alist.pop() # 不加参数表示删除最后一个元素,俗称“尾删”
alist.pop(1) # 按照下标删除元素
alist.remove(3) # 按照值删除元素
print(alist)

# 3,查找操作
print(2 in alist) #in操作符表示判断该元素是否在列表中,返回值是布尔类型
print(10 in alist)

print(alist.index(2)) #index方法表示查找元素在列表中的下标,返回值是一个整数,如果元素不存在,则抛异常
print(alist.index(10))

2.4 连接链表

直接看代码:

from string import printable

alist1 = [1, 2, 3, 4, 5]
alist2 = [6, 7, 8, 9, 10]

print(alist1 + alist2) # +结果会生成一个新的列表,而不会影响到旧列表

alist1.extend(alist1)
print(alist1)
print(alist2)

2.5 元组 

元组的功能和列表基本是一致的,但也有几点不同:

  • 元组用 ( ) 来表示
  • 元组不能修改里面的元素, 列表则可以修改里面的元素
  • 因此, 像读操作,比如访问下标, 切片, 遍历, in, index, + 等, 元组也是一样支持的.
  • 但是, 像写操作, 比如修改元素, 新增元素, 删除元素, extend 等, 元组则不能支持
  • 另外, 元组在 Python 中很多时候是默认的集合类型. 例如, 当一个函数返回多个值的时候,返回的元素类型其实是元组
atuple = (1, 2, 3, 4)

def getPoint():
    return 10, 20
result = getPoint()

print(atuple)
print(type(atuple))
print(type(result))

 

问题:有列表了为什么还要有元组?

解答:

  •  你有一个列表,现在需要调用一个函数进行一些处理;但是你有不是特别确认这个函数是否会把你的列表数据弄乱,那么这时候传一个元组就安全很多
  • 我们马上要讲的字典,是一个键值对结构。要求字典的键必须是 "可hash对象" (字典本质上也是一个hash表),而一个可hash对象的前提就是不可变,因此元组可以作为字典的键,但是列表不行

三,字典

3.1 关于字典

字典是一种键值对的结构,如下代码:

a = { } #创建空的字典
b = dict()
print(type(a))
print(type(b))

 

 也可以在创建的同时指定初始值,键值对之间用逗号分开,如下代码:

student = {'id': 1, 'name': '张三'}

# 为了美观,我们创建字典时,分成多行来写
student1 = {
    'id': 2,
    'name': '李四' #最后一个键值对的逗号可写可不写
}

print(student)
print(student1)

 

3.2 字典的增删查改操作

student = {
    'id': 1,
    'name': '张三'
}

#新增/修改:使用 [] 根据key来新增/修改 value
student['score'] = 90 # 如果key不存在,则在后面新增键值对
print(student)

student['score'] = 100 # 如果key存在,则修改键值对的value
print(student)

# 查询操作
print('id' in student) # 判定key是否在字典中,返回类型是布尔
print(['id']) # 使用[]来根据key查找对应的value,如果不存在会抛异常

# 删除操作
student.pop('score') # 使用pop方法根据key删除键值对
print(student)

 

3.3 遍历字典元素

student = {
    'id': 1,
    'name': '张三',
    'score': 100
}

# 直接用for循环获取所有的key,进而获得 value
for key in student:
    print(key, student[key])

#可以使用 keys 方法获取到字典中所有的 key
print(student.keys())

#使用 values 方法可以获取到字典所有的value
print(student.values())

#使用 items 方法可以获取字典所有的键值对
print(student.items())

  •  此处的dict_keys,dict_values,dict_items都是一种特殊的类型,专门用来表示字典的值的

3.4 合法的key类型

不是所有的类型都可以作为字典的key,字典本质是一个哈希表,哈希表的 key 要求是“可哈希的”,也就是可以计算出一个哈希值

  • 可以使用 hash 函数计算某个对象的哈希值.
  • 但凡能够计算出哈希值的类型, 都可以作为字典的 key.
  • 列表和字典都无法计算哈希值
print(hash(0))
print(hash(3.14))
print(hash('hello'))
print(hash(True))
print(hash(())) 

 

四,文件操作

4.1 打开关闭文件

打开和关闭文件用到的函数是open和close,这两个库函数的参数和使用是和C一样的,可以参照往期博客:C语言进阶——文件操作_如果文件名随时间变更,怎么通过c打开文件-CSDN博客

f = open('123.txt', 'r')
f.close()

 

可以先在项目目录建一个txt文件 

4.2 读写文件

读写操作和也基本和C一致,如下代码:

# 往文件写数据
f = open('123.txt', 'w')
f.write('hello world1')
f.close()

f = open('123.txt', 'a') # a 是追加写,如果是w,就是把文件的旧数据全删除再重新写入
f.write('hello world2')
f.write('hello world3')
f.close()

读取文件也有多种方式,我们可以先往123.txt里添加部分值:

# 读取文件数据
f = open('123.txt', 'r')
print(f.read(12)) #read读取指定长度的数据
f.close()

f = open('123.txt', 'r')
# 可以使用for一次循环读取一行
for line in f:
    print(f'line = {line}')
f.close()

f = open('123.txt', 'r')
# readlines 是直接把文件整个内容读取出来,返回一个列表,每个元素为一行
lines = f.readlines()
print(lines)
f.close()

# 至于这里要打开文件三次是因为:
# 在一个open和close之间,每次读取时,下次读取都会从上次读取的结尾位置开始读取

 

4.3 关于中文的处理

上面的操作在处理字母和数字时就没问题,但是在处理中文时,就会有报错或者乱码问题

  • 我们知道, 计算机只能表示二进制数据. 要想表示英文字母, 或者汉字, 或者其他文字符号, 就都要通过编码.
  • 最简单的字符编码就是 ascii. 使用一个简单的整数就可以表示英文字母和阿拉伯数字.
  • 但是要想表示汉字, 就需要一个更大的码表.
  • 一般常用的汉字编码方式, 主要是 GBK 和 UTF-8
  • 必须要保证文件本身的编码方式, 和 Python 代码中读取文件使用的编码方式匹配, 才能避免出现问题.
  • Python3 中默认打开文件的字符集跟随系统, 而 Windows 简体中文版的字符集采用了 GBK, 所以 如果文件本身是 GBK 的编码, 直接就能正确处理.
  • 如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题

 此时修改打开文件的代码, 给 open 方法加上 encoding 参数, 显式的指定为和文本相同的字符集, 问题即可解决,如下代码:

# 读取文件数据
f = open('123.txt', 'r', encoding='utf8')

lines = f.readlines()
print(lines)
f.close()

 

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

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

相关文章

QTreeView 与 QTreeWidget 例子

1. 先举个例子 1班有3个学生&#xff1a;张三、李四、王五 4个学生属性&#xff1a;语文 数学 英语 性别。 语文 数学 英语使用QDoubleSpinBox* 编辑&#xff0c;范围为0到100,1位小数 性别使用QComboBox* 编辑&#xff0c;选项为&#xff1a;男、女 实现效果&#xff1a; 2…

基于SpringBoot的疫苗在线预约功能实现十

一、前言介绍&#xff1a; 1.1 项目摘要 随着全球公共卫生事件的频发&#xff0c;如新冠疫情的爆发&#xff0c;疫苗成为了预防和控制传染病的重要手段。传统的疫苗预约方式&#xff0c;如人工挂号或电话预约&#xff0c;存在效率低、易出错、手续繁琐等问题&#xff0c;无法…

.NET 9 已发布,您可以这样升级或更新

.NET 9 已经发布&#xff0c;您可能正在考虑更新您的 ASP.NET Core 应用程序。 我们将介绍更新应用程序所需的内容。从更新 Visual Studio 和下载 .NET SDK 到找出可能破坏应用程序的任何重大更改。 下载 .NET 9 SDK 这些是下载 .NET 9 SDK 所需的步骤。 更新 Visual Studi…

IMX6ULL开发板基础实验:Framebuffer驱动程序的简单应用实例代码详细分析

前言 这个代码之所以可以写得这么短&#xff0c;写得这么方便&#xff0c;原因在于LCD的驱动程序已经写好了&#xff0c;并且这个驱动程序符号Framebuffer的标准&#xff0c;这才使得我们在实现上层应用时变得很方便。 源代码&#xff1a; #include <sys/mman.h> #inc…

Jenkins:持续集成与持续部署的利器

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Jenkins 2、Jenkins的起源 二、Jenkins的核心…

C语言基础14(动态内存控制后续)

文章目录 野指针、空指针、空悬指针野指针空指针空悬指针 void与void*的区别内存操作常用内存操作函数内存填充内存拷贝内存比较内存查找 野指针、空指针、空悬指针 野指针 定义&#xff1a;指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)&a…

CSS在线格式化 - 加菲工具

CSS在线格式化 打开网站 加菲工具 选择“CSS在线格式化” 或者直接访问 https://www.orcc.online/tools/css 输入CSS代码&#xff0c;点击左上角的“格式化”按钮 得到格式化后的结果

分布式事物XA、BASE、TCC、SAGA、AT

分布式事务——Seata 一、Seata的架构&#xff1a; 1、什么是Seata&#xff1a; 它是一款分布式事务解决方案。官网查看&#xff1a;Seata 2.执行过程 在分布式事务中&#xff0c;会有一个入口方法去调用各个微服务&#xff0c;每一个微服务都有一个分支事务&#xff0c;因…

Serdes技术与Xilinx GT概览

目录 一、前言 二、Serdes技术 2.1 芯片间信号传输 2.2 Serdes技术 三、 Xilinx GT 3.1 7系列器件GT 3.2 Ultrascale GT 3.3 Ultrascale GT 四、参考资料 一、前言 对于芯片间高速信号传输技术&#xff0c;不得不提serdes以及在Xilinx在此基础上的高速收发器GT系列&…

HarmonyOS Next 元服务新建到上架全流程

HarmonyOS Next 元服务新建到上架全流程 接上篇 这篇文章的主要目的是介绍元服务从新建到上家的完整流程 在AGC平台上新建一个项目 链接 一个项目可以多个应用 AGC新建一个元服务应用 新建一个本地元服务项目 如果成功在AGC平台上新建过元服务&#xff0c;那么这里会自动显…

【Spark】Spark的两种核心Shuffle工作原理详解

如果觉得这篇文章对您有帮助&#xff0c;别忘了点赞、分享或关注哦&#xff01;您的一点小小支持&#xff0c;不仅能帮助更多人找到有价值的内容&#xff0c;还能鼓励我持续分享更多精彩的技术文章。感谢您的支持&#xff0c;让我们一起在技术的世界中不断进步&#xff01; Sp…

【CSS in Depth 2 精译_079】第 13 章:渐变、阴影与混合模式概述 + 13.1:CSS 渐变效果(一)——使用多个颜色节点

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;一&#xff09; ✔️13.1.2 颜色插值13.1.3 径向渐变13.1.4 锥形渐变 文…

Linux 中的 mkdir 命令:深入解析

在 Linux 系统中&#xff0c;mkdir 命令用于创建目录。它是文件系统管理中最基础的命令之一&#xff0c;广泛应用于日常操作和系统管理中。本文将深入探讨 mkdir 命令的功能、使用场景、高级技巧&#xff0c;并结合 GNU Coreutils 的源码进行详细分析。 1. mkdir 命令的基本用法…

mp4影像和m4a音频无损合成视频方法

第一步&#xff1a;复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步&#xff1a;下载-影像.mp4和-音频.m4a 第四步&#xff1a;合并视频&#xff1b; 使用ffmpeg进行无损合成&#xff08;如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…

Leonardo.Ai丨一键生成图片(AI绘图)

随着人工智能技术的迅速发展,AI在各个领域的应用越来越广泛,特别是在图像生成方面。AI艺术创作的崛起,不仅让艺术创作变得更加便捷和创新,也为设计师、艺术家及普通用户提供了全新的工具。Leonardo.Ai作为一款基于人工智能的图像生成工具,通过简洁的操作和强大的功能,成功…

简单的Java小项目

学生选课系统 在控制台输入输出信息&#xff1a; 在eclipse上面的超级简单文件结构&#xff1a; Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…

Android实现RecyclerView边缘渐变效果

Android实现RecyclerView边缘渐变效果 1.前言&#xff1a; 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果&#xff0c;可以使RecyclerView的边缘在滚动时逐渐淡出或淡入&#xff0c;以提升用户体验。 2.Recyclerview属性&#xff1a; 2.1、requiresFading…

Avalonia的Ribbon

将以前Avalonia项目中的Ribbon单独隔离&#xff0c;提交到了github,方便大家查看修改。 Ribbon做成了组件&#xff0c;但是想要界面效果&#xff0c;还得结合窗体功能开发。 项目地址&#xff1a; jinyuttt/AvaloniaRibbonUI: AvaloniaRibbon component

Vue04

目录 一、学习目标 1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 2.组件通信 3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09; 4.进阶语法 二、scoped解决样式冲突 1.默认情况&#xff1a; 三、data必须是一个函数 1、data为什么要写…

C# 探险之旅:第十八节 - 元组(Tuple):神奇的背包与丢弃的艺术,还有变身大法!

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上C#的奇妙旅程。今天&#xff0c;我们要聊的是一个非常实用又有点懒散的旅行伴侣——元组&#xff08;Tuple&#xff09;。想象一下&#xff0c;你正准备来一场说走就走的旅行&#xff0c;但是不想带太多行李&#xff0c;只想简单…