版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符串、列表、元组和文件第四章课程目标课程目标1了解字符串数据类型以及如何在计算机中表示字符串35246熟悉通过内置函数和字符串方法对字符串执行的各种操作理解序列和索引的基本概念能够用字符串格式化来产生有吸引力的、富含信息的程序输出了解在Python中读取和写入文本文件的基本文件处理概念和技术掌握列表和元组的创建及常用操作方法。PART1字符串数据类型1字符串数据类型文本在程序中由字符串数据类型表示字符串是括在双引号或单引号内的一系列字符最常见用途:文字处理1字符串数据类型>>>str1="hello">>>str2='world'>>>print(str1,str2)helloworld>>>type(str1)<class'str'>>>>type(str2)<class'str'>>>str=input("请输入你的名字:")请输入你的名字:张三>>>print("你好"+str)你好张三1字符串数据类型获取字符串作为输入input函数返回用户键入的任何字符串对象1字符串数据类型如何用变量来保存用户名称,然后用该变量将名称打印出来?以0开始,从左到右图4.1字符串的索引索引一般形式是<string>[<expr>]-12-11-10-9-8-7-6-5-4-3-2-11字符串数据类型>>>str="helloworld!">>>str[0]'h'>>>str[5]''>>>str[10]'d'>>>str[11]'!'在n个字符的字符串中,最后一个字符位于n-1位置,因为索引从0开始图4.2字符串的索引>>>str[-1]'!'>>>str[-2]'d'>>>str[-12]'h'1字符串数据类型允许使用负索引,从字符串的右端索引1字符串数据类型从字符串中访问连续的字符序列或“子字符串”“切片”在字符串中索引一系列位置的方法1字符串数据类型<string>[<start>:<end>:<step>]“切片”的形式int值表达式int值表达式切片产生int值表达式>>>str[2:4]'ll'>>>str[2:7]'llow'>>>str[:7]'hellow'>>>str[2:]'lloworld!'>>>str[:]'helloworld!'1字符串数据类型给出整个字符串如果任何一个表达式缺失,字符串的开始和结束都是假定的默认值只选择索引为2和3的字符>>>str[2:10:2]'lowr'[2:10:2]表示从下标2开始,到下标10结束,但是是左臂右开。最后的2是步长,表示2个一步,步长默认是1.1字符串数据类型将两个字符串“粘合”在一起连接(+)通过字符串与多个自身连接重复(*)索引和切片是将字符串切成更小片段的有用操作。字符串数据类型还支持将字符串放在一起的操作。1字符串数据类型>>>s1="hello">>>s2="world">>>s3="!">>>print(s1+s2+s3)helloworld!>>>print(3*s2)worldworldworld>>>print(2*s1+3*s2+3*s3)hellohelloworldworldworld!!!>>>m=len(s1)>>>print(m)51字符串数据类型>>>forchinrange(m):...print(s1[ch])...hellO1字符串数据类型操作符含义+连接*重复<string>[n]索引<string>[::]切片len(<string>)长度for<var>in<string>迭代遍历字符串表4-1Python字符串操作PART2简单字符串处理2简单字符串处理认证系统用户密码用户名为每个用户分配唯一的用户名用户的第一个首字母姓氏的最多七个字母2简单字符串处理def
main():
print("这个程序生成用户名.\n")
#
获取用户姓和名
first
=
input("请输入你的姓(请以字母表示):
")
last
=
input("请输入你的名(请以字母表示):
")
#
选择姓的第一个字母和名的七位字母
uname
=
first[0]
+
last[:7]
#
输出用户名
print("你的用户名为:",
uname)
main()换行符2简单字符串处理假设要打印给定月份数对应的月份缩写。程序的输入是一个int,代表一个月份(1~12),输出是相应月份的缩写。months="JanFebMarAprMayJunJulAugSepOctNovDec"monthAbbrev=months[pos:pos+3]
将所有月份名称存储在一个大字符串中使用月份号作为分割此字符串的索引2简单字符串处理MonthNumberPositionJan10Feb23Mar36Apr49表4-2月份缩写字符串中的位置(1−1)*3=0*3=0字符串索引是从0开始的。2简单字符串处理defmain():#将月份组成一个大字符串months="JanFebMarAprMayJunJulAugSepOctNovDec"n=int(input("输入一个月份(1-12):"))#计算第n个月的起始位置pos=(n-1)*3#提取第n个月的名称monthAbbrev=months[pos:pos+3]#输出结果print("月份的英文缩写为",monthAbbrev+".")main()
字符串作为查找表”方法缺点:仅当字符串都有相同的长度时才有效。PART3列表3列表可以对列表进行切片、连接和索引。>>>list=[1,"hello",2.0,"world"]>>>list[1,'hello',2.0,'world']3列表defmain():#将月份组成一个大字符串months="JanFebMarAprMayJunJulAugSepOctNovDec"n=int(input("输入一个月份(1-12):"))#计算第n个月的起始位置pos=(n-1)*3#提取第n个月的名称monthAbbrev=months[pos:pos+3]#输出结果print("月份的英文缩写为",monthAbbrev+".")main()
字符串作为查找表”方法缺点:仅当字符串都有相同的长度时才有效。3列表defmain():#将所有的月份存储为一个列表months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]n=int(input("输入月份(1-12):"))print("月份的英文缩写是",months[n-1]+".")main()
字符串和列表的区别:3列表作为序列列表是可变的。字符串不能再“适当位置”改变。3列表>>>list=[2,3,"a","b"]>>>list[2]=4>>>list[0]=5>>>list[5,3,4,'b']>>>str="helloworld">>>str[2]="r"Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:'str'objectdoesnotsupportitemassignment建立了一个数字与字符混合的列表将索引位置2赋值为4,索引位置0赋值为5列表被成功替换PART4字符串表示4字符串表示A字符串存储为二进制数字1和0的序列,每个字符一个数字。B只要计算机的编码或者解码过程一致,用什么数字表示任何给定字符并不重要。4字符串表示ASCII系统(美国信息交换标准码)只要操作系统有适当的字体来显示字符,就可以处理来自任何语言的字符。问题含义用数字0~127来表示通常计算机键盘上有的字符以及被称为控制代码的某些特殊值,用于协调信息的发送和接收。以美国为中心的没有许多其他语言需要的符号Python支持Unicode标准4字符串表示ord函数返回单个字符的数字编码。chr函数将数字编码转换为相应的字符。>>>ord("a")97>>>ord("A")65>>>chr(97)'a'>>>chr(90)'Z'PART5编写编码器5编写编码器数字字符串ord和chr函数:对消息进行编码forchinmessage:打印字符的unicode码5编写编码器forchinmessage:用户获取消息很简单,只需要一个input即可。5编写编码器defmain():print("将文本消息转换为序列")print("消息的unicode码\n")#获取编码消息message=input("输入待编码的文本:")print("\nunicode编码:")#循环消息并打印出unicode码forchinmessage:print(ord(ch),end="")print()main()5编写编码器将文本消息转换为序列消息的unicode码输入待编码的文本:轻轻的我走了,正如我轻轻的来unicode编码为:3673136731303402510536208201026529227491229142510536731367313034026469PART6编写解码器解码器程序将提示用户输入一系列Unicode数字,然后打印出带有相应字符的文本消息。其总体轮廓看起来与编码器程序非常类似。6编写解码器得到要解码的数字序列message=""foreachnumberintheinput:将数字转换为相应的unicode码将字符添加到消息的末尾打印message6编写解码器在循环之前,累加器变量消息被初始化为空字符串,即不包含字符的字符串("")每次通过循环,输入的一个数字都被转换为适当的字符,并附加到之前构造的消息末尾6编写解码器利用输入将整个数字序列读入为单个字符串将大字符串拆分为一系列较小的字符串,每个字符串代表一个数字将每个字符串转换为一个数字,并使用该数字来产生相应的Unicode字符解码数字序列1236编写解码器以string,inString的形式获取数字序列将inString分解成一系列小字符串message=""foreachnumberintheinput:将数字转换为相应的unicode码将字符添加到消息的末尾打印message解码数字序列6编写解码器将字符串拆分为子串列表默认情况下,在遇到空格时拆分字符串可以指定分隔符split方法6编写解码器>>>myString="helloworld!">>>myString.split()['hello','world!']>>>String="a,b,c,d">>>String.split(",")['a','b','c','d']split方法6编写解码器split方法获取单个输入字符串中的一个点的x和y值,使用split方法将其转换为列表1索引得到的列表,获取单个字符串部分26编写解码器split方法>>>coords=input("输入点的坐标(x,y):").split(",")输入点的坐标(x,y):3,5>>>coords['3','5']>>>coords[0]'3'6编写解码器解码器程序应该接受编码器程序产生的相同格式,即一系列具有空格的Unicode数字结果不是数字列表,而是字符串列表,只是碰巧这些字符串只包含数字,“可以”解释为数字6编写解码器defmain():print("将unicode数字序列转换为文本字符串")print("文本字符串\n")#获取数字序列inString=input("输入unicode码:")#遍历每个子字符串并构建Unicode消息message=""fornumStrininString.split():codeNum=int(numStr)message=message+chr(codeNum)print("\n解码的结果为:",message)main()编写解码器解码器6编写解码器将unicode数字序列转换为文本字符串文本字符串输入unicode码:3673136731303402510536208201026529227491229142510536731367313034026469解码的结果为:轻轻的我走了,正如我轻轻的来解码器PART7更多字符串方法7更多字符串方法函数含义s.capitalize()只有第一个字符大写的s的副本s.center(width)在给定宽度的字段中居中的s的副本s.count(sub)计算s中sub的出现次数s.find(sub)找到sub出现在s中的第一个位置s.join(list)将列表连接到字符串中,使用s作为分隔符s.ljust(width)类似center,但s是左对齐s.lower()所有字符小写的s的副本s.lstrip()删除前导空格的副本s.replace(oldsub,newsub)使用newsub替换s中的所有出现的oldsubs.rfind(sub)类似find,但返回最右边的位置s.rjust(width)类似center,但s是右对齐s.rstrip()删除尾部空格的s的副本s.split()将s分割成子字符串列表s.title()s的每个单词的第一个字符大写的副本s.upper()所有字符都转换为大写的s的副本表4-3
一些字符串方法PART8列表的方法8列表的方法append方法可以在列表末尾添加一项。这通常用于每次一项地构建列表。squares=[]forxinrange(1,101):
squares.append(x*x)累积器模式在发挥作用8列表的方法defmain():print("将unicode数字序列转换为文本字符串")print("文本字符串\n")#获取数字序列inString=input("输入unicode码:")#遍历每个子字符串并构建Unicode消息message=""fornumStrininString.split():codeNum=int(numStr)message=message+chr(codeNum)print("\n解码的结果为:",message)main()本质上创建了到目前为止的完整的message副本,并在一端再加一个字符8列表的方法消息可以作为字符列表来累积,其中每个新字符附加到已有列表的末尾。在列表的末尾添加将“当场”改变列表,而不必将已有内容复制到一个新的对象中。一旦我们累积了列表中的所有字符,就可以用join操作将这些字符一下子连接成一个字符串。列表可变的8列表的方法defmain():print("将unicode数字序列转换为文本字符串")print("文本字符串\n")#获取待解码的文本inString=input("输入unicode码:")#遍历每个子字符串并构建Unicode消息chars=[]fornumStrininString.split():codeNum=int(numStr)chars.append(chr(codeNum))message="".join(chars)print("\n解码结果为:",message)main()PART9元组9元组元组和列表都属于有序序列数据,但元组属于不可变序列,也就是说不可以修改元组中任何一个元素的值,也无法对元组增加或删除元素。使用赋值运算符“=”与符号“()”可以创建一个元组,元组中所有元素放在一对小括号“()”中,各元素之间用“,”分隔,系统允许出现空的元组。>>>yz=()>>>yz()>>>11,22,33(11,22,33)>>>(5,6,7)(5,6,7)9元组元组的简单操作>>>hu=(1,"a"
,True,2.5)>>>print(
hu)(1,"a"
,True,2.5)>>>(aa,bb,cc,dd)=hu>>>bb"a">>>ccTrue9元组可以通过tuple(列表)和list(元组)函数实现相互转换。>>>hu=(1,"a"
,True,2.5)>>>print(
hu)(1,"a"
,True,2.5)>>>su=list(hu)>>>print(su)[1,"a"
,True,2.5]>>>aa=[1,2,False]>>>print(
aa)[1,2,False]>>>dh=tuple(aa)>>>print(dh)(1,2,False)PART10从编码到加密10从编码到加密事实上,我们只是简单地使用字符到数字的标准映射,任何有一点计算机科学知识的人都能轻易破解我们的代码。这个代码根本没有什么真正的秘密。为了保密或秘密传输而对信息进行编码的过程称为“加密”。加密方法的研究是一个日益重要的数学和计算机科学子领域,称为“密码学”。10从编码到加密个人信息采用安全的编码来传输10从编码到加密我们的简单编码/解码程序使用非常弱的加密形式,称为“替换密码”。原始信息的每个字符被来自“密码字母表”的相应符号替换,生成的代码称为“密文”。10从编码到加密VS
通过对字母的频率进行统计分析和简单的试错法测试来发现原始信息。先将消息转换为数字,然后采用复杂的数学算法将这些数字转换成新的数字。简单的加密方法加密的现代方法变换基本上是将消息与一些特殊值组合,这称为“密钥”。10从编码到加密为了解密消息,接收方需要具有适当的密钥,以便反转编码,恢复原始消息。加密方法相同的密钥用于加密和解密消息。希望通信的各方需要知道密钥,但它必须保密私钥(也称为“共享密钥”)存在用于加密和解密的不同但相关的密钥加密密钥是公开的,而解密密钥保持私有任何人都可以用公钥安全地发送消息进行加密,但只有持有解密密钥的一方才能够解密公钥10从编码到加密安全网站Web浏览器对信用卡信息进行编码在因特网上发送请求信息的公司用正确的私钥来解密和读取发送公共密钥PART11输入/输出作为字符串操作11输入/输出作为字符串操作将月份缩写程序扩展成日期转换。以月/日/年的形式输入日期数据将输入的数据分解为月、日、年将月的字符串转换为第几月份利用得到的月份来寻找月的名称再利用日和年生成新的字符串输出生成的新的字符串输入“05/24/2015”显示“May24,2015”11输入/输出作为字符串操作dateStr=input("Enteradate(mm/dd/yyyy):")monthStr,dayStr,yearStr=dateStr.split("/")months=["January","February","March","April","May","June","July","August","September","October","November","December"]monthStr=months[int(monthStr)-1]print("Theconverteddateis:",monthStr,dayStr+",",yearStr)获取日期数据索引,从0开始以新的字符串输出11输入/输出作为字符串操作defmain():#获取日期dateStr=input("输入日期(月/日/年):")#以斜杠分解日期monthStr,dayStr,yearStr=dateStr.split("/")#得到月的名称months=["January","February","March","April","May","June","July","August","September","October","November","December"]monthStr=months[int(monthStr)-1]#输出print("转换的日期为:",monthStr,dayStr+",",yearStr)main()11输入/输出作为字符串操作输入的日期(月/日/年):04/05/2019转换的日期为:April05,201911输入/输出作为字符串操作>>>str(500)'500'>>>value=3.14>>>str(value)'3.14'>>>print("Thevalueis",str(value)+".")Thevalueis3.14.句点11输入/输出作为字符串操作函数含义float(<expr>)将expr转换为浮点值int(<expr>)将expr转换为整数值str(<expr>)返回expr的字符串表示形式eval(<string>)将字符串作为表达式求值表4-4类型转换函数PART12字符串格式化基本的字符串操作可以用来构建格式正确的输出12字符串格式化通过较小字符串的切片和连接来构建复杂的输出容易困难Python强大的字符串格式化操作12字符串格式化请输入你的各种硬币个数.有多少1元的硬币:5有多少5角的硬币:3有多少2角的硬币:4有多少1角的硬币:6你拥有的硬币总额是7.9小数形式12字符串格式化print("你拥有的硬币总额是¥{0:0.2f}".format(total))你拥有的硬币总额是¥7.9012字符串格式化<template-string>.format(<values>)format方法是内置的Python字符串方法。12字符串格式化{<index>:<format-specifier>}插槽格式说明12字符串格式化>>>"Ilove{0}{1}{2}".format("python","c++","java")'Ilovepythonc++java'12字符串格式化>>>"{0:3}".format(5)'5'>>>"{0:5}".format(5)'5'>>>"{0:5.3}".format(3.14159)'3.14'>>>"{0:5.3f}".format(3.14159)'3.142'>>>"{0:0.3}".format(3.14159)'3.14'>>>"{0:0.3f}".format(3.14159)'3.142'0:表示插槽,后面的3表示对于正常(非定点)浮点数,精度表示要打印的有效数字的个数对于定点(由指定符末尾的f表示),精度表示小数位数"{0:3}{1:2}".format(5,6)‘56’12字符串格式化>>>'输出左对齐定长为10位[{:<10}]'.format('12')'输出左对齐定长为10位[12]'>>>'输出右对齐定长为10位[{:>10}]'.format('12')'输出右对齐定长为10位[12]'>>>'输出居中对齐定长为10位,填充x[{:x^10}]'.format('12')'输出居中对齐定长为10位,填充x[xxxx12xxxx]'默认情况下,数值是右对齐的,字符串在其字段中是左对齐的。通过在格式说明符的开头包含显式调整字符,可以更改默认行为。PART13更好的零钱计数器13更好的零钱计数器total//100=美元数total%100=美分数代表以分为单位的值用美分来记录货币,并用int来存储在输出步骤中将其转换为美元和美分零钱计数器13更好的零钱计数器#Aprogramtocalculatethevalueofsomechangeindollarsdefmain():print("ChangeCounter")print()print("请输入您的各种硬币个数.")yuan=int(input("有多少1元的硬币:"))fifty_cents=int(input("有多少5角的硬币:"))twenty_cents=int(input("有多少2角的硬币:"))ten_cents=int(input("有多少1角的硬币:"))total=yuan*100+fifty_cents*50+twenty_cents*20+ten_cents*10print("您拥有的硬币总额是¥{0}.{1:0>2}".format(total//100,total%100))main()print语句中的字符串格式化包含两个插槽,一个是int(),另一个是longint()。PART14文件处理14文件处理1我们需要一些方法将磁盘上的文件与程序中的对象相关联。这个过程称为“打开”文件。2我们需要一组可以操作文件对象的操作。这至少包括允许我们从文件中读取信息并将新信息写入文件的操作。3关闭文件确保所有必需的记录工作都已完成,从而保持磁盘上的文件和文件对象之间的一致。14文件处理<variable>=open(<name>,<mode>)
这是一个字符串,提供了磁盘上文件的名称字符串“r”或“w”14文件处理infile=open("read.txt","r")
14文件处理<file>.readlines()3返回文件中剩余行的列表。每个列表项都是一行,包括结尾处的换行符。<file>.readline()2返回文件的下一行。即所有文本,直到并包括下一个换行符。1<file>.read()
将文件的全部剩余内容作为单个(可能是大的、多行的)字符串返回。14文件处理ifyouhaveadreampleasetrytodoitbecausedreamislovely
有一个txt文件,命名为”a.txt”,文件内容为:14文件处理f=open("a.txt",'r')lines=f.read()print(lines)print(type(lines))f.close()
使用read将文件内容打印到屏幕上:14文件处理ifyouhaveadreampleasetrytodoitbecausedreamislovely<class'str'>运行结果:14文件处理f=open('a.txt','r')forlineinopen('a.txt'):line=f.readline()print(line)f.close()readline操作可用于从文件读取下一行。对readline的连续调用从文件中获取连续的行。记住:readline返回的字符串总是以换行符结束,而input会丢弃换行符。14文件处理ifyouhaveadreampleasetrytodoitbecausedreamislovelyine()print(line)f.close()运行情况:14文件处理infile=open(someFile,"r")forlineininfile.readlines():#processthelinehereinfile.close()循环遍历文件全部内容的一种方法,是使用readlines读取所有文件,然后循环遍历结果列表。缺点:是文件可能非常大,并且一次将其读入列表可能占用太多的RAM。14文件处理infile=open(someFile,"r")forlinein
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大学第四学年(计算机应用)计算机技能专项试题及答案
- 四川省内江市资中学县达标名校2026届初三第一次段考英语试题含解析
- 山西省运城市盐湖区达标名校2026届中考语文试题模拟试卷命题比赛试卷含解析
- 山东省淄博市桓台县重点名校2025-2026学年初三寒假测试二语文试题含解析
- 四川省巴中学中学2026届初三第六次月考试卷英语试题含解析
- 山西省大同矿区六校联考2026届初三第三次诊断考试英语试题(文、理)试卷含解析
- 山东省烟台市招远市市级名校2026届初三下学期5月联考试题含解析
- 山西省怀仁市2026届初三下学期4月联考英语试题试卷含解析
- 车辆知识科普
- 大学篮球队训练
- GB/T 6553-2024严酷环境条件下使用的电气绝缘材料评定耐电痕化和蚀损的试验方法
- 全国行业职业技能竞赛(电力交易员)考试题库及答案
- 《家用电冰箱与空调器维修》课件
- (完整版)初中化学新课程标准(人教版)
- 房建工程监理大纲范本(内容全面)
- 铁路旅客运输服务高职全套教学课件
- 高考语文复习:古代文化常识
- 高警示药品管理制度考核试题及答案
- (完整版)合规管理办法
- 回族做礼拜的念词集合6篇
- 场地清表施工方案设计
评论
0/150
提交评论