(一)程序设计基础
目录1.标识符\变量2.输出3.输入1、数值表达式2、字符串表达式3、变量表达式4、列表、元组和字典表达式5、函数调用表达式6、算术、比较和逻辑运算表达式补充常见的类型转换及其用法补充一些常见的输入要求4、运算符\赋值语句1、算术运算符2、赋值运算符3、逻辑运算符4、比较运算符5、数据类型1索引2、切片3、字符串的处理与操作6、嵌套1.单一嵌套2.多维嵌套了解程序的编纂基础是入手一门编程语言的重要起点编程语言是为了实现某些目的而使用的一种工具这种工具就像小时候玩的积木有不同形状的也有相同形状的为了搭好一个完美的“作品”我们要充分考虑每一块积木的形状以更好的将它放置在合适的地方。编写程序也是一般python语言里有很多的自带函数以及库文件也可以与多种资源实现交互在面对一个需要解决的问题时我们首先要有一个初步的关于该问题的解决方法即给出一个流程图式的工作步骤就像学习有机化学式有一道题是化工流程大致的结构就和这个相差无几。然后通过选择合适的程序语言去堆砌从而实现对目标问题的解决。1.标识符\变量在数学的方程中有两个名词分别叫做因变量和自变量他们统称为变量在编程中也有相类似的一个定义也称为变量之所以称之为变量是因为它的值可以跟随编程者的输入以及程序的运行过程而进行变化通常情况下一个变量都有一个“代称”就像方程yaxb一样自变量的代称是x因变量的代称是y那么同理也会有方程zayb、eadb·····诸如此类变量的代称都是可以人为定义的。我们在定义变量时有时会使用一个字母有时会使用一个字符串那么这里就涉及到了另一个知识点——标识符换一句话就是标识符就是变量的名字代称。在Python中标识符的规则如下标识符由字母、数字、下划线组成区分大小写如a1、aa、a_a、Aa都是可以的并且Aa和aa是不同的变量名第一个字符必须是字母或下划线不能以数字开头如1a是无法识别的标识符不能使用 Python 的关键字和保留字例如if、while、for等标识符应具有描述性便于理解和维护。前四条是标识符的定义法则而第五条则是一个基于方便实用和理解的规则没有强制性要求一般在编写短的程序时只需要单个字母命名就够用了在某些较长的程序里为了防止定义和调用的混乱可以采用字符串定义比如定义一个列表我们可以定义为lst、lst1、lst10086、lst114514、lst_student等便于识别分辨。在第四项里提到的python的关键字和保留字是应用于一些算法或者语句的特殊字符例如在循环语句中使用到的“for”、“in”、“range“、“while”判断语句中的“if”以及“break”、“continue”、“True”、“False”等均不能作为变量名使用。2.输出对于一个程序可以没有输入的内容但既然要解决问题就一定要反馈给我们一个结果也就是会输出一个内容对于python的输出我们通常采用print来实现一般结构为print()括号里填入你想输出的内容可以是字符串也可以是变量亦或者是表达式#对于输出字符串通常要加引号 print(字符串) print(zifuchuan) print(字符串zifuchuan) print(字符串zifuchuan ,./.[;;) #如果输出变量则直接在括号里输入变量名输出结果是该变量目前的值 a0 print(a)#输出0 #如果括号里是一个不带引号的表达式那么该表达式会经过计算之后输出计算结果 a1 b2 print(ab)#输出3以上是一般直接采用的输出格式对于某些题目会要求一些特殊的格式比如输出后换行输出后不换行一行输出输出无空格等。如果要求一行输出那么我们会再上面的基础上采用“end“””即以“”结尾而不换行输出后不换行也同理。a0 b0 print(a,end) print(b)#输出结果为00扩展开来end“”引号里可以加很多类型包括字符串如若为endNone那么输出就要换行了end后面只能跟字符串类型或者“None”。对于输出的空格处理很多时候要用到一种格式化输出“format”format不仅可以用于输出也可用于程序中的一些格式化处理这里不做过度赘述。a0 print(a{}.format(a))format的作用就是将引号中大括号位置填充format后面括号里的内容按顺序一一对应必须是一个变量。在有些题目中要求了输出的位数精度如保留n位小数那么format可以很好的解决这个问题pi3.1415926 print(圆周率{:.2f}.format(pi)){:.2f}这里面的2f即为格式符以为保留两位小数依次类推保留八位小数即为{:.8f}3.输入在输入中我们一般会采用input的形式去输入自己想向代码提供的数据ainput()直接调用input输入的内容是以“字符串”类型存储在变量名里的是无法进行算术运算的。例如输入数字6变量名里存储的知识一个字符6而不是数字6如果想让他能够用于数学运算则需要进行“类型转换”一般情况下我们常用的类型转换有eval()、int()、str()等。类型转换通常是可以和input()进行嵌套的用eval举例即为beval(input())此时如果输入数字6变量名里存入的就是一个数字6可以用来进行数学运算。在这里要着重强调一个问题在书上以及日常的学习中“eval()”我们学习过一种用于“类型转换”的工具——这里需要注意eval()并不是一个严格的数据类型转换方法。而是一个函数可以将里的字符串作为 一种代码识别并执行并返回运行结果比如aeval(6)6是一个数字运行结果就是它本身故aeval(6)6。a eval(hello)将字符串hello 作为一个有效的 Python 表达式传入eval()函数中注意在eval处理字符串时一定是带引号的字符串而不能是eval“hello”以下是eval能处理的“有效的 Python 表达式”的举例1、数值表达式包括整数、浮点数、复数、十六进制数等# 整数 a 10 # 浮点数 b 3.14 # 复数 c 3 4j#j是Python中特定的复数单位 # 十六进制数 d 0x102、字符串表达式包括单引号、双引号、三引号括起来的字符串。# 单引号字符串 s1 hello # 双引号字符串 s2 world # 三引号字符串 s3 Python is a high-level programming language.3、变量表达式可以包含字母、数字、下划线等但不能以数字开头。# 合法的变量名 x 10 y hello z True # 不合法的变量名 # 1x 10 # 以数字开头 # x$y 20 # 包含非法字符 $4、列表、元组和字典表达式包括方括号、圆括号、花括号括起来的序列类型表达式。# 列表表达式 list1 [1, 2, 3] # 元组表达式 tuple1 (4, 5, 6) # 字典表达式 dict1 {a: 1, b: 2, c: 3}5、函数调用表达式包括函数名和参数列表。# 调用内置函数 len() len(hello) # 调用自定义函数 foo() def foo(x): return x 1 foo(10)6、算术、比较和逻辑运算表达式包括加减乘除、取余、幂次、等于、不等于、小于等于等运算符。# 加、减、乘、除、取余 3 4 - 5 * 6 / 7 % 8 # 幂次运算 2 ** 3 # 等于、不等于、小于等于等比较运算符 x y x ! y x y在一般情况下初学者在编写程序的时候常用aeval(input())读取输入的数据其他的eval的多层次使用不要求熟练使用。补充常见的类型转换及其用法int(x)int() 函数可以将一个字符串或数值转换为整型。float(x)float() 函数可以将一个字符串或数值转换为浮点型。str(x)str() 函数可以将一个对象转换为字符串。bool(x)bool() 函数可以将一个对象转换为布尔型如果x为False、None、0、则返回False否则返回True。list(x)list() 函数可以将一个序列例如字符串、元组、列表等转换为列表。tuple(x)tuple() 函数可以将一个序列转换为元组。set(x)set() 函数可以将一个序列转换为集合。dict(x)dict() 函数可以将一个包含键/值对的元组列表转换为字典。以上内容中常用1/2/3偶尔使用5/7/8对于4/6仅供参考不要求理解在后文中会更加具体的讲解每一种数据类型的特点。以下为具体的程序实例# 将字符串转换为整数 a int(123) print(a) # 输出结果为 123 # 将浮点数转换为整数 b int(3.14) print(b) # 输出结果为 3 # 将字符串转换为浮点数 a float(3.14) print(a) # 输出结果为 3.14 # 将整数转换为浮点数 b float(10) print(b) # 输出结果为 10.0 # 将整数转换为字符串 a str(123) print(a) # 输出结果为 123 # 将浮点数转换为字符串 b str(3.14) print(b) # 输出结果为 3.14 # 将非空字符串转换为 True a bool(hello) print(a) # 输出结果为 True # 将数值类型 0 转换为 False b bool(0) print(b) # 输出结果为 False # 将元组转换为列表 a list((1, 2, 3)) print(a) # 输出结果为 [1, 2, 3] # 将字符串转换为列表 b list(hello) print(b) # 输出结果为 [h, e, l, l, o] # 将列表转换为元组 a tuple([1, 2, 3]) print(a) # 输出结果为 (1, 2, 3) # 将字符串转换为元组 b tuple(hello) print(b) # 输出结果为 (h, e, l, l, o) # 将列表转换为集合 a set([1, 2, 3]) print(a) # 输出结果为 {1, 2, 3} # 将字符串转换为集合 b set(hello) print(b) # 输出结果为 {h, l, o, e} # 将元组列表转换为字典 a dict([(a, 1), (b, 2), (c, 3)]) print(a) # 输出结果为 {a: 1, b: 2, c: 3} # 将包含键/值对的字典转换为另一个字典 b dict({one: 1, two: 2}) print(b) # 输出结果为 {one: 1, two: 2}补充一些常见的输入要求1输入~~~以空格隔开这种情况下我们一般使用split()函数来处理表现形式为a,b input().split()此时ab的值是字符串类型如果需要用于计算还需要进行相应的类型转换如果想要在输入的同时完成类型转换可以参考以下方法a, b map(float, input().split())这里使用了input()函数接收用户输入在接收到输入后使用.split()方法将输入按照空格进行划分并返回一个包含两个元素的列表。然后使用map()函数将这两个字符串类型的元素分别转换成浮点数类型并使用float函数作为map()函数的第一个参数。最后将两个转换后的浮点数类型的值依次赋值给变量a和b。当然了float也可以换成int、eval等。2输入~~~以“”隔开这种情况下有两种处理方式一种是像上文所用到的split()函数也可以采用混合赋值例如:a,b1,2 a,b input().split(,)4、运算符\赋值语句在数学里我们可以经常使用运算符进行基础的数学运算比如加减乘除相对应的在python中也有一系列的运算符用于执行各种操作大致可以分为以下几种算术运算符赋值运算符逻辑运算符比较运算符位运算符1、算术运算符加法减法-乘法*除法/取余%整除//乘方**python里的加减乘法与一般的数学运算一样值得注意的是归属除法范畴的三个运算符。注在乘法运算中乘号“*”不可以省略9*a不能写成9aa*a不能写成aa4*a*b一定不能写成4ab或者4*ab没有累阶乘对于“”、“-”是一种累加/累减运算符相似的还有“*”累乘、“/累除”“//”累整除。将他们转换成表达式就是anaana-naa-na*n或a**naa*n或aa**na/n或a//naa/n或aa//n看完以上运算符我们可能又会发现一个新问题上面的表格里出现了“/”、“//”、“/”和“//”几种关于除法的运算符那么有什么区别呢在python里“/”表示除法返回的是浮点数也就是带小数的格式即使是整除也会有一位0占位。“//”表示整除即使运算结果有小数也只会返回整数部分例如print(6/3) # 输出2.0 print(6//3) # 输出2 print8/3 # 输出2.666666666665 print(8//3) # 输出2在这里还有一种特殊的除法称为“求余运算”求余符号是“%”也就是我们熟知的百分号他的运算逻辑是将被除数除以除数然后剩下不够整除的一部分返回为结果例如a10%3 print(a)在这里10对3求余首先10对3求整除的话为商3余1那么10%3的结果就是余数1。因此对于10和3来说10//33,10/33.333333333333333510%31。值得注意的是在python中算术运算符可以之间链接数字和变量也可以链接两个变量例如a2 b3 c3*a #c6 d6//b #d2 ea*b #e62、赋值运算符在编程语言中值得一提的是在c语言、c以及python中“”是一个赋值符号意思是将“”右边的内容赋给左边的内容。在这里我就可以再谈谈Python的一个好处在python里只要你写出了pi3.1415926形如这样“变量名数据”的格式那么你就定义了这个变量名并且可以在之后的程序中调用它而在c中你还需要:int pi pi3.1415926如果在同一段程序中对同一个变量名进行了多次赋值则该变量名的值为最后一次赋值后的值例如a6 aa6此时这个变量a的值就是12.在程序中我们可以采用链式赋值的方式给多个变量赋予一个相同的值例如abc6 #a、b、c的值均为6还有一种赋值方式将数个变量名用逗号隔开等号右侧是相对应的数个值也可以是存储在列表内的一组值python会自动一一对应赋值例如a,b,c1,2,3 a,b,c[1,2,3] #以上两种写法结果都是a1,b2,c3值得注意的是采用这种方法时左侧的变量数量必须与右侧的元素数量相等否则就会出错。这种方法还有一个常见的用法在后面的“字典”中比较常见。a,b1,2 a,bb,a在上面这个代码中分别给a,b赋予1,2的值然后又将b,a的值赋给a,b这就成功完成了一次数值的交换交换了a,b两个变量的值。还有一些其他的用法这里不做过多的赘述因为在初学阶段并不常用。3、逻辑运算符计算机不仅可以进行数学运算也可以进行逻辑运算什么是逻辑运算呢逻辑运算有三个运算符其名称及用法分别为与and当两个操作数都为True时返回True否则返回False。或or当两个操作数至少有一个为True时返回True否则返回False。示例非not对操作数取反如果原本为True则返回False否则返回True。用代码表示即为a True b False c a and b # 返回False a True b False c a or b # 返回True a True b not a # 返回False值得注意的是如同加减乘除具有优先级顺序逻辑运算也具有优先级顺序其优先顺序是not and or即not运算符的优先级最高其次是and运算符最后是or运算符。如果需要改变运算顺序可以使用圆括号来明确运算顺序与算术运算相同。4、比较运算符对于“”、“”、、!则为一种比较运算符相对应在数学运算中!5逻辑运算符仅供介绍5、数据类型在python中有以下几种数据类型数值型又可分为包括整型、浮点型和复数型字符串型布尔型列表元组集合字典在这一部分我们着重讨论前两种第三种属于逻辑运算不强调要求掌握后四种在介绍完基本控制结构后再详细讲述。数值型Numeric包括整数、浮点数和复数这三种类型之间可以进行基本的算术运算。例如整数123、-456浮点数3.1416、-1.23复数12j、2-3j字符串型String表示一串字符可以使用单引号、双引号或三引号来表示。字符串也支持多种常用操作例如索引、切片、连接、重复等。例如Hello, world!Im a Python developer.This is a multi-line string.在python中要进行一些计算时通常要求进行运算的对象是相同的数据类型比如字符串型和数值型不能同时计算。上文中我们讲到过“类型转换”指的就是将数据类型进行转换。以下笔者将着重讲解字符串这种数据类型的一些特点。在上面的表格中写到字符串表示一串字符可以使用单引号、双引号或三引号来表示。字符串这种数据类型相较于数值型有一些很独特的特性与后文中讲到的另外四种数据类型很相似。字符串可以进行索引、切片、函数处理等1索引字符串的索引指的是通过编号访问字符串中单个字符的位置。字符串中每个字符都有一个唯一编号从0开始依次递增。可以使用方括号[]符号加上对应索引号来访问字符串中的某个字符。就如同一群人在排队从队首到队尾可以依次排号一般的队列标号是从1开始而对字符串的标号则从0开始例如asevfsafV print(a[0]) #输出s可知在字符串中字符的编号和位置是相差一的也就是例如第1个字符编号为0第5个字符编号为4。除了可以从开头向结尾编号索引字符串还可以逆向索引即从结尾向前索引但是与正向索引不同的是逆向索引从“-1开始编号”也就是一个字符串的最后一个字符编号为“-1”倒数第二个字符编号为“-2”例如字符串“hello”正向01234字符串hello逆向-5-4-3-2-1值得一提的是字符串类型是包括字母符号数字以及空格例如“hello world”这个字符串的长度是51511编号就是从0到10逆向就是从-1到-11。再比如“afwa_..acewf wecf .”这个字符串既有字母、数字、符号也有空格长度为19.2、切片切片也是索引访问字符串中元素的一种方式具体来讲就是给一个起点一个终点返回中间的内容切片的语法形式为 [起始索引:结束索引:步长]具体的法则如下起始索引表示要切片的起始位置默认为 0。结束索引表示要切片的结束位置但不包括该位置的字符。如果不设置则默认到字符串的末尾。步长表示选取步长如果不设置默认为 1。做一个解释步长也就是返回字符时的间隔比如hello这个字符按照[0:5:2]的方式那么就是从h开始到o结束间隔为2那么就返回h、l、o跳过了e、l。举例如下my_string Hello, World! # 获取从索引 0 开始到索引 4 的子串 print(my_string[0:5]) # 输出 Hello # 获取从索引 7 开始到字符串结尾的子串 print(my_string[7:]) # 输出 World! # 获取整个字符串 print(my_string[:]) # 输出 Hello, World! # 每隔一个字符取一个字符 print(my_string[::2]) # 输出 Hlo ol! # 反转字符串 print(my_string[::-1]) # 输出 !dlroW ,olleH # 省略起始索引表示从开头开始 print(my_string[:3]) # 输出 Hel # 使用负数索引表示从后往前数 print(my_string[-3:-1]) # 输出 rl当你输入的起始位置或者结束位置超出该字符串的边界值时会有以下三种情况起始索引超出边界返回空字符串结束索引超出边界返回字符串结尾步长为 0 或者负数会抛出异常my_string Hello # 起始索引超出边界返回空字符串 print(my_string[10:]) # 输出 # 结束索引超出边界返回字符串结尾 print(my_string[2:10]) # 输出 llo # 步长为 0 或者负数会抛出异常 print(my_string[::0]) # 抛出 ValueError3、字符串的处理与操作在python中字符串之间有一些类似于数值型的处理方法。对于字符串也有一些运算符和函数可以用来进行对字符串的不同目的的处理。首先是我们讲一讲一些内置的字符串运算符python解释器提供了基本的字符串运算符这里我们介绍三个主要的运算符“”、“*”、“in”等字符串拼接“”用于将两个字符串连接成一个新的字符串。重复字符串“*”用于将一个字符串重复多次。“in”和“not in”用于判断一个字符串是否包含于另一个字符串中。具体应用如下str1 Hello str2 World str3 str1 , str2 ! print(str3) # 输出 Hello, World!str1 Python str2 str1 * 3 print(str2) # 输出 PythonPythonPythonstr1 Hello, World! print(World in str1) # 输出 True print(world not in str1) # 输出 True然后我们再来介绍一些常用的处理字符串的内置函数len()用于获取字符串的长度。str()将其他类型的数据转换为字符串类型。max()用于返回序列中最大的元素。min()用于返回序列中最小的元素。str1 hello print(len(str1)) # 输出 5 print(str(123)) # 输出 123 print(max(str1)) # 输出 o print(min(str1)) # 输出 e在python中还有更多的内置字符串处理方法可以分为七个种类在我们处理一些数据是提供了很大的便利不是重点。我另外开辟了一个小文章来展现这部分内容python的内置的字符串处理方法在前文中的“输入”部分中我们提到了函数format的使用。python中“format”的一些基础使用方法6、嵌套什么是嵌套呢在编程中嵌套是指在一个语句块中使用另外一个完整的语句块。具体来说就是在一个代码块中再写入一个代码块。在Python中我们可以在下文中所讲到的很多结构中使用嵌套解决更为复杂的问题。嵌套的语法结构比较简单在Python中通过缩进来表示。嵌套可以分为单一嵌套、多维嵌套等。1.单一嵌套单一嵌套是指将一个数据结构作为另一个数据结构的元素。例如可以将列表作为元组的一个元素或者将元组作为字典的一个值。# 列表作为元组的一个元素 tuple1 (1, 2, [3, 4]) print(tuple1) # 输出(1, 2, [3, 4]) # 元组作为字典的一个值 dict1 {name: (Tom, Jerry), age: 20} print(dict1) # 输出 {name: (Tom, Jerry), age: 20}2.多维嵌套多维嵌套是指在一个数据结构中使用多个同类型的数据结构进行嵌套。例如可以将多个列表嵌套到一个大列表中形成二维列表或者将多个字典嵌套到一个大字典中形成多层字典。# 列表嵌套 list1 [[1, 2], [3, 4]] print(list1) # 输出[[1, 2], [3, 4]] # 字典嵌套 dict2 {info: {name: Tom, age: 20}} print(dict2) # 输出 {info: {name: Tom, age: 20}}