青少年Python编程
收集自 [凤城老人的头条主页](今日头条)https://www.toutiao.com/c/user/token/MS4wLjABAAAAxHBExdkfJD32c6VhwSeqxK0WMbt1NEq0PBTEO_kWL_g/?source=tuwen_detail&log_from=31227430b6d62_1671074929797 《青少年Python编程系列》
一、input()输入的内容是字符串类型
a = input("输入边长:")
a = float(a) #inpuut输入为字符串,此处转化成浮点数字
s = a * a
print("正方形面积s=",s) #输出语句可以同时输出多个内容,中间以逗号隔开,每个变量类型可以不同。不同的内容之间以空格隔开。
二、内置函数
print函数:通常情况下,默认会逐行显示内容;在print函数内部添加两个装饰项,则能实现对结束字符与分隔符的调整。
print("Hello", end=' ')
print("你好")
print(1, 2, 3, 4, 5, sep=';')
结果:
Hello 你好
1;2;3;4;5
2、pow()函数
作用与**运算符相同,用于计算幂运算,里面需要写两个参数,分别为底和幂。
3、round()函数
该功能将一个浮点数值四舍五入为指定的小数值精度,默认情况下精确到整数值。
4、eval()函数
其主要功能在于将输入的字符串内容解析并转化为可执行的Python语句。例如下面这段代码中,请注意以下几点说明:变量a被赋值为整数值2;该字符串内容由a + 3组成;转换成Python语句后即为2 + 3;经过计算后得到的结果是5。例如以下所示的是针对函数编号1至4的示例代码:
a = 3 *
b = pow(3, 4)
print(a, b) #两者结果一样
print(round(3.7)) # 4
print(round(120.6192, 2)) # 120.62
a = 2
print(eval("a+3"))
#print(eval("Hello")) #这段代码执行后会报错:字符串中的Hello被转换成了代码执行,变成了一个标识符,但是这个变量没有被定义,因此程序报错。
a = eval(input("请输入边长:"))
s = a * a
print("正方形的面积:", s)
在编程中,eval()函数具有多种巧妙的应用,在计算正方形面积的例子中就能充分体现这一特性。在当前的代码中无法预知边长是整型还是浮点型数据类型,在这种情况下就必须将边长统一转换为浮点型数据进行处理;当用户输入整数值时运算结果始终以浮点形式返回;采用eval()函数后能够显著提升代码效率
三、字符串的使用
无论是用单引号还是双引号书写字符串,在Python中都代表的是一个单一的行文本内容
poem1 = '''远上寒山石径斜,
白云生处有人家。
停车坐爱枫林晚,
霜叶红于二月花。'''
poem2 = """日照香炉生紫烟,
遥看瀑布挂前川。
飞流直下三千尺,
疑是银河落九天。
"""
print(poem1, poem2, sep='\n')
在处理多行注释时曾使用过三个单引号。如果没有将其赋值为任何变量,则该内容仍为多行注释;如果将其赋值为一个变量,则会转换为一段多行字符串。
2、字符串索引
字符串中每个字符都具有其对应的位置编号。利用索_index_能够访问字符串中的单个_char_。正向_index_的编缉起始于_0;反向_index_的编缉采用负数值表征,并从-1_编缉起始
| 索引 | P | Y | T | H | O | N |
|---|---|---|---|---|---|---|
| 正向 | 0 | 1 | 2 | 3 | 4 | 5 |
| 反向 | -6 | -5 | -4 | -3 | -2 | -1 |
为了获取字母'N'这一字符,请问您可以选择两种不同的方法:一种是通过正向索引操作来实现,并将其表示为lang[5];另一种则是通过反向索引的方式进行访问,并将其表示为lang[-1]。
易错点: 正向索引起始值为0,不是1。
3、字符串切片
在编程中,我们常常用到对字符串进行片段提取。它是一种用于获取特定字符串片段的技术。切片操作的语法结构如下所示:str[start:end:step]。其中start表示起始位置,在获取时会包含该位置;如果未指定则默认从0开始。end表示结束位置,在获取时会排除该位置;若未指定则默认至字符串末尾。step参数定义了步长长度,在未指定时默认为1(即每隔一个字符提取一个),若为负数则表示逆序遍历
s = "123456789"
print(s[1:5]) # 2345 从索引为1到索引为5(不包括5)
print(s[:7]) # 1234567 起始索引省略为0,到索引7(不包括7)
print(s[1:6:2]) # 246 起始索引为1,结束索引为6(不包括6),步长为2
print(s[-5:-3]) # 56 起始索引为反向索引-5,结束索引为反向索引-3(不包括-3)
print(s[::-1]) # 987654321 起始索引和结束索引为空,为从头到尾,步长-1为反向
4、成员运算符
成员运算符通过关键字in来判断字符串是否包含另一个字符串。在编程中,我们可以通过in或not in来判断一个字符串中是否包含另一个特定的子串或字符序列。
s = "Hello Python!"
print("h" in s) # True 字符串中有h,in的判断结果为True
print("h" not in s) # False 字符串中有h,not in的判断结果为False
print("ab" in s) # False 字符串中没有ab, in的判断结果为False
print("ab" not in s) # True 字符串中没有ab, not in的判断结果为True
5、len()函数
len()函数可以获取字符串的长度,即字符串中有多少个字符。
6、count()函数
使用count()方法可以获取字符串中的子字符串的数量。
str.count(sub_str, beg=0, end=len(str))
count()方法必须包含一个或多个子字符串作为必要参数。其后两个附加参数为可选设置,分别指定起始索引和结束索引的位置
s = "This is a sausage"
print(s.count('s'))
# 结果为4,字符串中有4个字母‘s’
7、find()方法和index()方法
调用find()函数可以查找并返回目标子串在主串中的首次出现的位置信息;若找不到该子串,则函数将返回-1。与之相对应的是index()函数的功能:它也能查找并返回目标子串在主串中的首次出现的位置信息;然而,在无法找到目标子串的情况下会触发异常(即导致程序抛出异常)。
str.find(sub_str, beg=0, end=len(str))
str.index(sub_str, beg=0, end=len(str))
find()方法和index()方法中至少包含一个特定字符作为参数;随后的两个参数是可选的,并分别用于指定开始位置和结束位置;我们接下来会详细讲解它们的具体应用。
s = "This is a sausage"
print(s.find('s'))
print(s.index('s'))
# find()和index()结果都为3,第四个字符是s,索引号为3
print(s.find('s', 4))
print(s.index('s', 4))
# 结果为6。从索引为4的字符串开始往后找,第一个s出现在is上,索引号为6
print(s.find('z', 4))
# 结果为-1。字符串中没有字母z,返回-1。
print(s.index('z', 4))
# 程序报错
8、upper()方法和lower()方法
成员函数upper()能够将字符串中的所有字符转换为大写字母的形式;成员函数lower()则能够将字符串中的所有字符转换为小写字母的形式。
str.upper()
str.lower()
9、replace()方法
replace()方法可以将字符串中的子字符串替换为新的子字符串。
str.replace(old, new [, max])
该方法必须有两个必须的参数:源字符串和目标字符;可选参数指定最多替换次数,默认情况下会替换单个字符直到无更多字符匹配
s = "This is a sausage"
print(s.replace('sausage', 'pizza'))
# 结果为:This is a pizza。sausage被替换成pizza。
s2 = "SOS SOS SOS SOS SOS"
print(s2.replace('SOS', 'HELP', 2))
# 结果为:HELP HELP SOS SOS SOS。最后一个参数2,规定了最多替换2个。
10、strip()方法
该Python内置函数被用来去除字符串头尾指定的字符或内容,默认处理的是空格和换行符
注意:只删除头尾两端的,不会删除中间的。
四、列表
列表(list)是一种由数据元素组成的有序集合,在特定顺序下按线性方式排列的数据项集合,在这种数据结构中进行的基本操作包括对元素执行查找、插入以及删除等操作。
生成一个列表时,可以通过将逗号分隔的不同数据项用方括号包裹起来实现.字符,字符串以及数值等多种不同类型的数据也可以同时存在于同一列表内.
在列表与字符串操作之间存在诸多相似之处,在其中的介绍相当详尽的地方进行讨论。这里特别强调引用以下内容
1、字符串拆分成列表
具有特定规律性的字符串可以通过选定的分隔符将其分割并整理成列表形式,并具体操作方式如下:通过调用Python内置函数中的split()方法来实现这一功能
str.split(sep, num)
split()函数包含两个参数:一个是用于分隔的分隔符,默认设置为包括空格、回车换行符以及制表符等;另一个是限定分割的次数,默认值被设定为-1次方,则表示会将字符串分割成所有可能的部分。
s = '西瓜,苹果,梨子,桃子,芒果'
list1 = s.split(',')
print(list1)
# ['西瓜', '苹果', '梨子', '桃子', '芒果']
list2 = s.split(',', 2)
print(list2)
# ['西瓜', '苹果', '梨子,桃子,芒果']
第一个split()中只输入了分隔符,没有输入次数,所有的逗号都是分隔符。
第二个split()中指定了分隔2次,从第3个逗号开始不再是分隔符。
s = 'I like swimming.\nDo you like swimming?'
list1 = s.split()
print(list1)
# ['I', 'like', 'swimming.', 'Do', 'you', 'like', 'swimming?']
这个例子中split()中没有写任何参数,空格和换行都是分隔符。
2、列表结合成字符串
该字符串的join()方法可指定一个分隔符将列表元素连接成一个单一字符串其调用格式为str.join(iterable)其中str为要连接的内容iterable为可迭代对象如列表元组等。例如对于列表[1234]执行','.join([1234])的结果将是'1,2,3,4'。
sep.join(list)
我们看一下具体的使用方法:
list1 = ['苹果', '西瓜', '梨子', '橘子', '芒果']
s1 = ' '.join(list1)
print(s1)
# 苹果 西瓜 梨子 橘子 芒果
s2 = ';'.join(list1)
print(s2)
# 苹果;西瓜;梨子;橘子;芒果
3、列表的复制
3.1 可变数据类型和不可变数据类型
我们先来做一个实验:
a = [1, 2, 3, 4]
b = a
a.append(5)
print(a)
print(b)
看上面的代码以后,我们思考一下,得到的结果与实际的结果是不是一致。
实验证明,在修改列表a的值后(或:修改之后),会发现导致列表b的值随之变化(或:随之发生变化)。这就意味着我们需要引入一个新的知识概念——可变数据类型。(或:这引出了一个新的概念:可变数据类型)列表作为一种特殊的可变数据类型具有以下特点:其变量名称实际上是指向内存中的对象的一个标签(或:标识符)。每次我们对变量进行赋值时(或:再次赋值),都是将新的指针(或:引用)分配给该变量名(或:该标识符),但这些新的指针始终指向同一个内存地址(或:位置),而不是在内存中创建另一个独立的列表对象。(或:而不是生成一个新的独立对象存储在不同的内存位置)

可变数据类型:变量在内存中创建后,内存中的数据可以被修改。(list)
不可变数据类型:一旦变量在内存中被创建,则其存储的位置固定;内存中的原始数据无法被直接更改。若试图对内存中的数据进行修改操作,则会导致其他区域重新加载或重建。(int, float, bool)
如前所述,在之前的方法中,
我们发现列表不能单独通过一个变量赋值操作来实现复制。
那么如何从内存中开辟出一个新空间用于复制新的列表呢?
我们可以利用切片技术来进行这一操作。
new = old[:]
通过这个方法我们修改一下原来的代码,再看看效果:
a = [1, 2, 3, 4]
b = a[:]
a.append(5)
print(a)
print(b)
五、元组(Tuple)
在功能上与Python列表相似,在数据结构上都属于线性表类型。然而两者的显著区别在于:对于已经赋值的元素无法进行修改操作;同时可以将这种特性理解为一种仅具备读取功能而不支持数据更新的列表类型。
Python元组是不可变数据类型,Python列表是可变数据类型。
虽然元组类型无法被修改属性值(即不能通过切片或赋值改变其内容),但在其他方面与列表并无显著差异。那么为什么要引入元组类型呢?通常用于存储一组具有固定数量和明确索引位置的数据。例如学生信息通常包括学号、性别和出生年月等字段。其属性值一旦被赋值后几乎不会发生更改。我们可以使用固定的长度元组来存储这些信息。相比于列表结构,在Python中对元组的操作速度更快。
六、字典类型和集合类型
字典(以dictionary命名并由函数dict实现)代表另一类可变数据结构。这些结构能够容纳不同类型的元素。例如字符串、整数以及元组等其他数据结构。
键与值配对构成字典。
键与值配对构成字典。
基本语法如下:
字典的每个键值对(key=>value)以冒号分隔开;各键值对之间则以逗号分隔;整个字典则由一对花括号{}包裹起来:
d = {key1: value1, key2: value2 }
我们从字面意义上理解了"字典"一词。无论采取何种查询方式, 最终都会关联着我们要查找的那个特定汉字.此外, 在超市里标价牌上都具有明确的标示意义.
集合(Set)由独一无二(unique)的元素构成,并被视为一种非顺序数据结构。主要功能涵盖存在性检查以及去重操作。集合操作支持并集(Union)、交集(Intersection)、差值计算(Difference)、以及对称差分运算(Symmetric Difference)。这使得集合成为处理复杂数据关系的理想工具。
集合的创建使用花括号或者set函数。(空集合只能用set函数创建 )
然而由于集合中的元素具有唯一性这一特性 我们可以通过去除列表中重复项来实现这一目的 这也是实现这一目标的最便捷途径
