Python程序设计基础教程课件 第02章 基本概念与标准输入输出_第1页
Python程序设计基础教程课件 第02章 基本概念与标准输入输出_第2页
Python程序设计基础教程课件 第02章 基本概念与标准输入输出_第3页
Python程序设计基础教程课件 第02章 基本概念与标准输入输出_第4页
Python程序设计基础教程课件 第02章 基本概念与标准输入输出_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python程序设计基础教程

第2章基本概念与标准输入输出提纲基本概念表达式数据类型转换序列解包字符串与格式化输入函数input(.)输出函数print(.)学习目标了解数据类型的分类和函数的基本概念掌握并使用表达式以及eval()函数掌握如何实现数据类型转换了解序列解包并使用其实现多变量赋值掌握字符串的基本表示方法与格式化方法掌握标准输入输出函数2.1基本概念2.1.1数据类型分类概述在编程过程中,最基本的两项任务就是如何组织数据和如何组织代码。数据类型Python可以通过不同的数据类型来组织数据,特别是组合数据类型,为多个数据对象的组织和访问提供了灵活便捷的形式。函数函数是模块化组织代码的一种常见形式,能够很好地提升代码复用性和可读性。数据类型分类按照包含对象个数,可以将数据类型分为简单数据类型和组合数据类型。简单数据类型仅包含一个数据对象组合数据类型是指那些能够容纳多个值或对象的数据类型类型分类数据类型类型描述示例是否可变简单数据类型int整数123,-4923不可变float浮点数0.456,-87.55不可变complex复数-85.6+0.3j,3-4j不可变bool逻辑类型True,False不可变NoneType空类型None不可变组合数据类型list列表[2,6,3.5],["上海","北京",12345]可变tuple元组(4,5.9,3,-1),(985,["复旦大学","北京大学"])不可变set集合{8,2.4,9,"复旦大学"},{"Fudan","清华大学",3.14159}可变dict字典{"name":"John","age":25,"city":"Shanghai"}可变str字符串"fudan123","上海"不可变常见的组合数据类型列表(list):列表是一种有序的、可变的数据类型,可以包含任意类型的元素。列表用方括号[]表示。元组(tuple):元组是一种有序的、不可变的数据类型,可以包含任意类型的元素。元组用圆括号()表示。集合(set):集合是一种无序的、可变的数据类型,用于存储值不重复的元素。集合用大括号{}表示。字典(dict):字典是一种键值对(key-valuepair)的映射数据类型,常用于存储关联信息。字典用花括号{}表示,键(key)和值(value)之间用英文冒号“:”隔开。“键”要求是不可变类型,“值”可以是任意类型。字符串(str):字符串是一种有序的、不可变的序列数据类型,用于存储包含零个或多个字符的文本。字符串一般用单引号或双引号表示,也可以用三引号表示。组合数据类型通过组合数据类型可以将多个数据对象打包(pack)组织在一起,以便程序访问。组合数据类型包含的数据对象可以是不同类型,既可以是简单数据类型,也可以嵌套包含组合类型的数据对象。在组合数据类型中,每个组成单元称之为“元素(item)”。元素实质上是对某个数据对象的引用,其类型取决于其引用的数据对象。组合数据类型–举例举例:my_list=[1,'hello',3.14,[4,5]]图2-1组合数据类型中元素与数据对象的关系示例Pythontutor是一个在线的Python代码执行工具,可以可视化地直观展示Python代码执行过程及变量的变化等。访问地址:/python-compiler.html#mode=edit组合数据类型:有序v.s.无序有序:如果数据结构中的元素是按照插入时的顺序和位置排列的,我们称该数据结构是有序的。有序数据结构中的元素具有明确的先后关系,可以通过索引或位置来访问。例如,列表(list)、元组(tuple)、字符串是有序的数据结构。无序:如果数据结构中的元素没有按照插入的顺序明确先后关系,我们称该数据结构是无序的。无序数据结构中的元素没有特定的排列顺序,因此不能通过索引或位置来访问。例如,集合(set)是无序的数据结构。需要注意的是,在早期的Python版本中,字典也是无序的。但从Python3.7开始,字典中的键值对是有序的。为了避免因版本带来的概念混淆,我们一般将字典仍然归类为无序的组合数据类型。组合数据类型:可变v.s.不可变可变(Mutable):对于组合数据类型对象来说,如果可以通过“添加”或“删除”操作来增加或减少元素个数,或者可以通过“修改”操作来更改元素与数据对象的引用关系,那么我们称这种数据类型是可变的。对于“可变”的组合数据类型,其都有对应的增、删、改操作,来支持对其元素的修改。例如,列表(list)、集合(set)、字典(dict)是可变的数据结构。不可变(Immutable):如果一个数据类型是不可变的,表示它的内部状态或元素无法被修改。一旦创建了不可变对象,就不能再改变它的值或结构。显然,简单数据类型对象都是不可变的。对于组合数据类型对象来说,如果元素个数不可变且元素与其引用数据对象的引用关系不可变,那么我们称这种组合数据类型是不可变的。例如,元组(tuple)、字符串(str)都是不可变的组合数据类型。组合数据类型的意义更灵活的数据组织和存储:允许我们以结构化的方式组织和存储大量的数据。列表、元组、集合和字典等数据结构提供了不同的方式来组织数据。更丰富的数据表达和表示:允许我们更自然地表示和表达现实世界中的复杂结构。例如,可以使用字典表示实体的属性,使用列表或元组表示有序集合,使用集合表示不重复元素的集合等。更高效的数据操作和处理:提供了丰富的方法和函数,可以对其中的元素进行操作和处理,例如搜索、遍历、排序、过滤等操作,提高了数据处理的效率。更方便的参数传递和返回:在函数的参数传递和返回值中,使用组合数据类型可以更容易地传递一组相关的值,而不必单独传递多个变量。这样可以提高代码的清晰度和可维护性。2.1基本概念2.1.2函数简介概述函数(Function)是一组可重复使用的代码块,用于执行特定任务或完成特定功能。函数通过给定一些输入(称为“参数”)并执行一系列的操作来产生输出(称为“返回值”)。函数提供了一种模块化和可维护的方式来组织代码。函数的定义函数的定义通常包括以下几个要素:函数名:用于唯一标识函数的名称,其命名规范和变量相同。参数:输入到函数中的值或对象,可以有零个或多个。函数体:包含一系列操作的代码块。返回值:通过return语句返回的结果。函数可以返回一个值,多个值(以元组、列表等形式)。如果函数仅有return但其后不跟任何内容,或者函数没有明确的return语句而直接结束函数执行,那么函数默认返回空对象None。函数的定义举例:#函数定义defadd_numbers(x,y):#计算两个数字的和result=x+y#返回结果returnresult

#函数调用sum_value=add_numbers(1,2)print(sum_value)#输出:3函数的分类内置函数(Built-inFunctions):这是Python语言内置的函数,可以直接在任何地方使用,而无需导入任何模块。例如print(.)、len(.)、sum(.)等都是内置函数。用户自定义函数(User-definedFunctions):这是由程序员自己定义的函数,用于执行特定的任务。通过使用def关键字,程序员可以定义自己的函数,或通过lambda表达式定义匿名函数。注:如何定义用户自定义函数留待后续章节再详细介绍,这里我们主要介绍内置函数的使用。2.2表达式2.2.1表达式的概念概述表达式是构成程序的基本构建块,它们通常用于计算、比较等操作。一个表达式由操作数(operands)和操作符(operators)组成,通过一定的运算或执行操作符可以得到该表达式的值。在Python中,大量的代码是用表达式来书写的,包括赋值语句和函数调用。举例#算术表达式:使用算术运算符进行数学运算。result=3+4*2#11

#关系表达式:使用关系运算符比较两个值。x=5y=8is_greater=x>y#False

#逻辑表达式:使用逻辑运算符对布尔值进行运算。a=Trueb=Falseresult=aandb#False

#成员关系表达式:使用成员运算符检查一个值是否属于一个序列。my_list=[1,2,3,4]is_in_list=3inmy_list#True

#身份关系表达式:使用身份运算符检查两个对象是否相同。x=[1,2,3]y=[1,2,3]are_identical=xisy#False举例#赋值表达式:将一个对象/值赋给一个变量。x=10

#增量赋值表达式:将变量的值与另一个值相加,并将结果赋给变量。x=5x+=3#相当于x=x+3

#调用表达式:调用函数。result=len("Hello,World!")#13

#三元条件表达式:使用条件运算符进行简单的条件选择。x=5y=10result=xifx>yelsey#102.2表达式2.2.2表达式执行顺序表达式的执行顺序表达式的执行顺序遵循特定的规则,即运算符优先级和结合性。这些规则决定了表达式中各个部分的计算顺序。运算符优先级:不同的运算符有不同的优先级,高优先级的运算符会在低优先级的运算符之前执行。例如,乘法*的优先级高于加法+。可以使用圆括号来改变运算符的执行顺序,括号内的表达式会首先计算。注:具体运算符的优先级留待后续章节再做详细介绍。结合性:当表达式中有相同优先级的运算符时,结合性决定了它们的计算顺序。例如,加法和减法具有相同的优先级,它们的结合性是从左到右。举例#运算符优先级:按优先级顺序从高到低执行result=2+3*4#先乘法后加法,结果是14

#使用括号来改变运算符的执行顺序result=(2+3)*4#先加法后乘法,结果是20

#结合性:按从左至右的顺序对表达式求值。result=2+3-1#先加法后减法,结果是4需要注意的是,赋值表达式的执行顺序是从右到左。例如,对于赋值表达式x=y=10+10,首先会计算赋值表达式最右边的10+10,然后会将结果20首先赋给y,然后将y的值再赋给x。2.2表达式2.2.3

eval(.)函数eval(.)函数定义Python内置的eval(.)函数可以用来执行一个用字符串表示的表达式,并返回表达式的值。其函数定义如下:函数定义:eval(expression)参数:expression:用字符串表示的表达式。返回值:表达式对应的值。举例#执行简单的数学表达式result=eval("2+3*4")print(result)

#输出:14

#执行涉及变量引用的数学表达式x=10result=eval("x+5")print(result)

#输出:15

#将字符串表达的数据对象转换为对应类型的对象result=eval("1.23")print(result)

#输出浮点数:1.23result=eval("1,2,3")print(result)

#输出元组:(1,2,3)注:元组(Tuple)在定义时可以省略前后的圆括号()。eval(.)函数的使用注意点如果字符串表达的是一个函数调用,eval(.)函数也可以当作函数调用来执行。代码2-5展示了eval(.)函数执行应用程序或系统命令的例子。由上面的例子可以看出eval(.)函数功能很强大,可以通过os模块调用执行系统中的可执行文件notepad.exe来打开一个文本编辑器或执行新建目录(md)操作。虽然该函数功能很强大,但也存在一定的安全隐患。假想一下,如果上面的例子中输入的命令是删除系统内所有文件,那么后果不堪设想。因此,应谨慎使用eval(.)函数,并确保仅执行可信任的字符串表达式。#运行notepad.exe程序,打开一个记事本窗口eval("__import__('os').startfile(r'C:\Windows\notepad.exe')")

#运行md命令,创建目录testeval("__import__('os').system('mdtest')")2.3数据类型转换2.3.1隐式类型转换概述隐式类型转换:自动完成类型转换,也称为自动类型转换或隐式强制类型转换。隐式类型转换通常发生在表达式中不同数据类型之间进行算术、逻辑或其他操作时,不需要我们明确其转换方式和过程,Python会自动将一种数据类型转换为另一种数据类型,以便执行特定的操作。举例隐式类型转换经常发生在数值型数据的计算过程中。num_int=123num_flo=1.23

num_new=num_int+num_flo

print("num_int数据类型为:",type(num_int))print("num_flo数据类型为:",type(num_flo))

print("num_new值为:",num_new)print("num_new数据类型为:",type(num_new))num_int数据类型为:<class'int'>num_flo数据类型为:<class'float'>num_new值为:124.23num_new数据类型为:<class'float'>举例单纯依靠隐式类型转换,有时可能会导致一些错误。num_int=123num_str="456"

print("num_int数据类型为:",type(num_int))print("num_str数据类型为:",type(num_str))

print(num_int+num_str)num_int数据类型为:<class'int'>num_str数据类型为:<class'str'>Traceback(mostrecentcalllast):File"/runoob-test/test.py",line7,in<module>print(num_int+num_str)TypeError:unsupportedoperandtype(s)for+:'int'and'str'2.3数据类型转换2.3.2显式类型转换概述在显式类型转换中,我们可以通过Python内置的类型转换函数来将对象的数据类型转换为所需的数据类型。一般情况下,类型转换函数都是以数据类型名称命名的,例如int(.)、float(.)、str(.)等。举例仍以上面的例子为例,我们可以通过显式的类型转换来完成计算。num_int=123num_str="456"

print(num_int+int(num_str))#使用int函数转换,输出579print(str(num_int)+num_str)#使用str函数转换,输出"123456"常见的内置数据类型转换函数函数功能描述举例int(x[,base])将x转换为一个以base为基数的整数,默认转换为一个十进制整数float_number=3.14int_number=int(float_number)#3float(x)将x转换到一个浮点数int_number=42float_number=float(int_number)#42.0bool(x)将x转换为一个布尔值num=0is_true=bool(num)#Falsestr(x)将对象x转换为字符串number=123str_number=str(number)#'123'hex(x)将一个整数转换为一个十六进制表示的字符串str_number=hex(123)#'0x7b'oct(x)将一个整数转换为一个八进制表示的字符串str_number=oct(123)#'0o173'chr(x)将一个整数表示的Unicode编码值转换为其对应的字符(返回包含该字符的字符串)char=chr(65)#'A'ord(x)将一个字符转换为其对应的Unicode编码值(整数值)unicode_value=ord('B')#66list(s)将序列s转换为一个列表my_tuple=(1,2,3)my_list=list(my_tuple)#[1,2,3]tuple(s)将序列s转换为一个元组my_list=[4,5,6]my_tuple=tuple(my_list)#(4,5,6)set(s)将序列s转换为一个集合my_list=[1,2,2,3]my_set=set(my_list)#{1,2,3}dict(d)将d转换为一个字典,d必须是一个包含若干(key,value)元组的序列my_list=[('a',1),('b',2)]my_dict=dict(my_list)#{'a':1,'b':2}类型转换时的精度损失在进行数据类型转换时,特别是在从浮点数到整数或从整数到浮点数的转换时,可能会发生精度损失。这是因为整数和浮点数在表示数字时的内部存储方式不同。#浮点数到整数的转换:将浮点数转换为整数时,小数部分将被丢弃。float_number=3.75int_number=int(float_number)print(int_number)#输出3,小数部分被截断

#整数到浮点数的转换:整数会被转换为相应的浮点数,但没有小数部分。int_number=42float_number=float(int_number)print(float_number)#输出42.0,没有小数部分布尔转换函数的规则在众多转换函数中,布尔转换函数bool(x)可以将一个对象或表达式的值转换为一个布尔值(True或False)来判真假。其返回值的取值取决于x的值,分为以下两种情况:返回值等于False的情况:如果x的值为0(数值类型)、None对象、空序列对象,则返回值为False。其中,所谓空序列对象x指的是其长度为0,即len(x)==0,例如:""、[]、()、set()、{}、range(0)等。返回值等于True的情况:即当x为非0或非空对象时,返回值为True。例如当x的值等于:1、-5、"abc"、[1,2]、(1,)、{one:'one'}时,bool()函数的返回值为True。2.4序列解包概述组合数据类型是将多个对象/元素打包(pack)在一起,而序列解包是将一个组合类型对象解包(unpack)的过程。序列解包可以从元组、列表等序列类型对象中解包提取其元素。序列解包常用于对多个变量进行赋值。通过序列解包,你可以将序列中的多个元素同时赋值给多个变量,从而方便地获取和使用这些值。举例#对元组进行序列解包tuple_example=(1,2,3)a,b,c=tuple_exampleprint(a)#输出1print(b)#输出2print(c)#输出3

#对列表进行序列解包list_example=[4,5,6]x,y,z=list_exampleprint(x)#输出4print(y)#输出5print(z)#输出6

#对字符串进行序列解包string_example="abc"a,b,c=string_exampleprint(a)#输出a,注意输出的是字符串"a"print(b)#输出b,注意输出的是字符串"b"print(c)#输出c,注意输出的是字符串"c"举例在序列解包中,左侧的变量数目必须与右侧序列的元素数目一致,否则会引发ValueError。string_example="abcd"a,b,c=string_exampleTraceback(mostrecentcalllast):File"seq_unpacking_demo2.py",line2,in<module>a,b,c=string_exampleValueError:toomanyvaluestounpack(expected3)举例需要注意的是,集合是一种无序的序列类型,由于其无序性,所以不能像列表和元组那样按照元素顺序或位置进行解包,解包得到的结果可能和集合定义或元素插入顺序不一样。#对集合进行序列解包set_example={7,8,9}a,b,c=set_exampleprint(a)#输出8print(b)#输出9print(c)#输出7举例对于字典来说,虽然它也是一种可迭代的数据类型,但字典的元素是键值对,所以字典的解包涉及到键值对的处理。#定义字典my_dict={'a':1,'b':2,'c':3}

#对字典中的键(key)序列进行序列解包a,b,c=my_dictprint(a)#输出'a'print(b)#输出'b'print(c)#输出'c'

#对字典中的键值对序列进行序列解包a,b,c=my_dict.items()print(a)#输出('a',1)print(b)#输出('b',2)print(c)#输出('c',3)

#利用循环对字典中的每个元素(键值对)依次进行序列解包forkey,valueinmy_dict.items():print(key,value)举例序列解包的用途不仅仅是从元组或列表中提取值。当一个组合类型对象所包含的元素本身也是一个序列对象,那么可以和字典的处理方式一样,在循环迭代过程中使用序列解包。此外,还可以通过序列解包进行变量交换。#在循环中使用序列解包coordinates=[(1,2),(3,4),(5,6)]forx,yincoordinates:print(x,y)#变量交换a=10b=20

a,b=b,a#通过序列解包进行变量交换

print(a)#输出20print(b)#输出102.5字符串与格式化2.5.1字符串的表示概述字符串是Python中最常用的数据类型之一。我们通常使用单引号(')或双引号(")来表示字符串。一般建议采用单引号表示。字符串是不可变的,这意味着一旦创建,就不能直接修改字符串的内容。此外,Python不支持单字符类型,单字符在Python中也是作为一个字符串表示的。空串或空字符串表示为''或"",其长度为0(可以使用len()函数获得)。举例str1='Hello,World!'str2="Pythonisawesome!"str3='你好,世界!'str4="Python太棒了!"字符编码由于计算机底层只能存储和处理数字(二进制数据),所以需要将字符转换为数字进行存储。“字符编码”是将字符编码映射到数字的方法,使得计算机能够存储和处理文本数据。主要的两种字符编码标准是ASCII和Unicode。ASCII编码:ASCII(AmericanStandardCodeforInformationInterchange)是较早的字符编码标准,它使用一个字节(8位)来表示一个字符,包括英文字母、数字和一些特殊字符。例如,字符'A'的ASCII编码值是65。由于受限于编码长度,ASCII编码只能表示128个字符,因此无法涵盖所有的语言和符号。Unicode编码:Unicode是一种更为广泛的字符编码标准,它致力于涵盖全球所有语言的字符。Unicode使用一个或多个字节来表示一个字符,这使得它可以表示更多的字符。由于Unicode可以表示世界上所有的字符,它解决了ASCII编码无法涵盖所有语言的问题,所以成为目前国际通用的一种字符编码方式。Python从3.0版本以后,所有字符都采用Unicode编码,默认的编码格式是UTF-8。这使得我们使用Python语言处理中文变得非常方便,不需要像Python2那样还需要进行编码转换。字符与编码之间的转换采用内置的类型转换函数ord()和chr()在字符和数字之间做相互转化。需要注意的是,ord()函数只能对单个字符进行转换。如果传入的参数是多个字符构成的字符串,则函数会报错。>>>ord('A')65>>>ord('中')20013>>>chr(66)'B'>>>chr(25991)'文'>>>ord('AB')Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>ord('AB')TypeError:ord()expectedacharacter,butstringoflength2found2.5字符串与格式化2.5.2转义字符概述转义字符是在字符串中以反斜杠'\'开头的特殊字符序列,用于表示一些无法直接输入或打印的字符,或者具有特殊含义的字符。转义字符含义解释\在行尾单独出现时,代表续行符\\反斜杠符号\'单引号\"双引号\b退格符(Backspace)\000空(NULL)\n换行符\t横向制表符或水平制表符\v纵向制表符\r回车符。将\r后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将\r后面的内容完全替换完成。\ooo3位八进制数对应的字符,o代表0~7的八进制数字,例如:\012代表换行符。\xhh以\x开头的2位十六进制数对应的字符,h代表十六进制数字,例如:\x0a代表换行符。常见的转义字符及举例(1)'\':续行符。在行尾单独出现时,代表续行符。需要注意的是,续行符仅能实现换行输入,并不能实现换行输出。如下面的例子,虽然在输入时通过在行尾添加\可以实现换行输入,但输出仍然为一行,中间并不包含换行。(2)'\\':反斜杠符号。用于表示普通的反斜杠字符。由于'\'表示转义字符的开始,所以如果要表示'\'本身,需要使用两个反斜杠'\\'来表示。>>>print("line1\line2\line3")line1line2line3>>>

>>>print("Thisisabackslash:\\")Thisisabackslash:\>>>

常见的转义字符及举例(3)'\''和'\"':单引号和双引号。用于在字符串中表示单引号或双引号,以防止与字符串的边界符冲突。需要注意的是,中文的单引号("‘")和双引号("“"或"”")不需要通过转义来输出。(4)'\b':退格符。用于删除前一个字符。>>>print("Hesaid,\"Hello!\"")Hesaid,"Hello!">>>print('Hesaid,\'Hello!\'')Hesaid,'Hello!'>>>>>>print("Hello\bWorld")HellWorld>>>常见的转义字符及举例(5)'\000':空。对应八进制数值0,表示空(NULL),即代表一行的结束。在打印输出时,仅输出'\000'之前的字符,其后的字符将不输出。(6)'\n':换行符。用于在字符串中表示换行,使其后的字符串移到下一行输出。>>>print("Thisisastringwithanullcharacter:before\000after")Thisisastringwithanullcharacter:before>>>

>>>print("Line1\nLine2")Line1Line2>>>

常见的转义字符及举例(7)'\t':横向制表符或水平制表符。该转义字符类似在键盘上按下Tab键,通常用于制作表格或在文本中插入水平空白,一般为四个空格字符的长度。(8)'\v':纵向制表符。>>>print("Column1\tColumn2")Column1 Column2>>>

>>>print("Column1\vColumn2")Column1

Column2>>>

常见的转义字符及举例(9)'\r':回车符。回车符'\r'表示将光标移动到当前行的开头,但不换行,将'\r'后面的内容(包括空格)移到字符串开头,并逐一替换开头部分的字符,直至将'\r'后面的内容完全替换完成。这种效果常常被用于实现动态的文本输出,比如在终端上显示不断变化的进度条。>>>print("Hello\rWorld")#从行开头用"World"逐个替换World>>>print("HelloWorld!\r12345")#从行开头用"12345"逐个替换12345World!

常见的转义字符及举例(10)'\ooo':3位八进制数对应的字符,o代表0~7的八进制数字。下面的例子展示了如何利用一串3位八进制数来表示"HelloWorld!"。此外,还展示了如何利用ord()函数获得字符'A'的编码值,然后利用oct()函数获得该值对应的八进制表示,最后利用print()函数用两种方式输出字符'A'。>>>print("\110\145\154\154\157\40\127\157\162\154\144\41")HelloWorld!>>>ord('A')65>>>oct(65)'0o101'>>>print("Ais\101")AisA>>>

常见的转义字符及举例(11)'\xhh':以\x开头的2位十六进制数对应的字符,h代表十六进制数字。>>>print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21")HelloWorld!>>>ord('A')65>>>hex(65)'0x41'>>>print("Ais\x41")AisA>>>

常见的转义字符及举例如果不希望转义字符发挥作用,可以在字符串前面加上r或R表示原始字符串,即不对转义字符进行转义。例如在下面的例子中,在字符串前加上r后,转义字符'\n'将不转义为换行符,而是保持原来的含义(即反斜杠n),输出结果也没有了换行的效果,而是输出原始字符。>>>print(r"Thisisarawstring\nNonewline.")Thisisarawstring\nNonewline.>>>

2.5字符串与格式化2.5.3字符串格式化1.printf风格的字符串格式化字符串具有一种特殊的内置操作:%运算符,也称为字符串的格式化或插值运算符。对于使用%运算符的表达式format%values,其作用是使用values替换字符串format中一个或多个位置的占位符,并格式化输出一个新字符串。其中,format是一个字符串,通常也称为“格式串”。字符串format中包含一个或多个以'%'字符开头的“标记转换符”(也称为“占位符”)。使用%运算符会将format中的%转换标记符(占位符)替换为对应的values条目。由于其效果类似于C语言中的sprintf()函数,所以这种格式化方式也被称为printf风格的字符串格式化。1.printf风格的字符串格式化常见的标记转换符(占位符)标记转换符(占位符)含义示例运算结果%s字符串,使用str()转换任何Python对象。'Hello%s'%'Mike''Hello%s'%22'HelloMike''Hello22'%d有符号十进制整数。'Length:%d'%45'Length:45'%c单个字符,接受整数或单个字符。如果是整数,则使用chr()函数转换后输出对应字符。'%c'%'A''%c'%65'A''A'%[width][.precision]f浮点数,如果有width和precision,则width表示显示的最小字段宽度,不足用空格填充;precision是小数点后的位数,默认为6,即保留小数点后6位。'%f'%3.14159326'%.2f'%3.14159326'%7.4f'%3.14159326'3.141593''3.14''3.1416'%o有符号八进制数。'octalvalue:%o'%45'octalvalue:55'%x有符号十六进制数(小写)。'hexvalue:%x'%45'hexvalue:2d'%X有符号十六进制数(大写)。'hexvalue:%X'%45'hexvalue:2D'%%不转换参数,在结果中输出一个'%'字符。'Percent:%d%%'%45'Percent:45%'1.printf风格的字符串格式化如果format只有一个标记转换符(占位符),那么values是个单独的对象或变量。但当format中有多个标记转换符(占位符)时,values必须是一个包含项数与格式字符串中指定的转换符项数相同的元组,或者是一个字典来表达替换映射关系。当%运算符右边的操作数为一个字典时,格式串中必须包含加圆括号的映射键(即下例中的"(name)"和"(score)"),对应%运算符之后字典中的每一项。映射键将从字典映射中选取要格式化的值。>>>"你好,%s同学,你的成绩是%d。"%('Mike',90)'你好,Mike同学,你的成绩是90。'>>>"你好,%(name)s同学,你的成绩是%(score)d。"%{'name':'Mike','score':90}'你好,Mike同学,你的成绩是90。'>>>

1.printf风格的字符串格式化需要注意的是,在使用对象或变量对标记转换符(占位符)进行转换替换时,需要保持对象的数据类型与转换符定义的类型一致,否则可能会出现转换错误。>>>"你好,%s同学,你的成绩是%d。"%('Mike','A')Traceback(mostrecentcalllast):File"<pyshell#19>",line1,in<module>"你好,%s同学,你的成绩是%d。"%('Mike','A')TypeError:%dformat:anumberisrequired,notstr>>>

2.f-string字面量字符串格式化f-string是Python3.6版本之后新增的一种格式化字符串的语法,称之为字面量格式化字符串。f-string格式化字符串以f开头,后面跟着字符串(格式串)。格式字符串中使用花括号{}来表达占位符,它会将变量或表达式计算后的值来替换{}中的内容。{}中可以是变量名或一个表达式。2.f-string字面量字符串格式化f-string举例>>>name=‘Mike'>>>f'Hello{name}'#替换变量'HelloMike'>>>f'1+2={1+2}'#使用表达式'1+2=3'>>>x,y=1,2>>>f'x+y={x+y}'#使用变量和表达式'x+y=3'>>>f'x+y={x+y:.2f}'#指定格式'x+y=3.00'

f-string这种字符串格式化方式具有非常强的灵活性,可以将格式串的内容替换为变量或表达式,同时还能指定格式。例如上例中的{x+y:.2f}表示将表达式的值格式化输出为浮点数,且保留2位小数。常见的格式说明符包括::s表示字符串。:d表示整数。:f表示浮点数。:x表示十六进制整数。3.内置format(.)函数实现字符串格式化字符串自带一个内置函数format()也能达到上述类似效果。它允许在字符串中插入变量、表达式和其他字符串,以创建更灵活和动态的字符串格式。format()函数的基本语法如下:formatted_string=“Sometextwith{}and{}.”.format(value1,value2),其中:花括号{}表示占位符,它们会被format()函数中输入的参数value1、value2等替换。其基本用法和f-string格式化方法类似。3.内置format(.)函数实现字符串格式化>>>#例1:不指定位置,按默认顺序替换>>>"你好,{}同学,你的成绩是{}。".format('Mike',90)'你好,Mike同学,你的成绩是90。'

>>>#例2:指定位置参数,按指定位置替换>>>"你好,{0}同学,你的成绩是{1}。".format('Mike',90)'你好,Mike同学,你的成绩是90。'>>>"你好,{0}同学,你的成绩是{1}。继续加油{0}!".format('Mike',90)'你好,Mike同学,你的成绩是90。继续加油Mike!'

>>>#例3:指定位置参数,通过列表索引取值替换>>>my_list=["Mike",90]>>>"你好,{0[0]}同学,你的成绩是{0[1]}。".format(my_list)'你好,Mike同学,你的成绩是90。'3.内置format(.)函数实现字符串格式化>>>#例4:指定关键字,按关键字参数替换>>>"你好,{name}同学,你的成绩是{score}。".format(name='Mike',score=90)'你好,Mike同学,你的成绩是90。'

>>>#例5:指定关键字,通过字典替换>>>my_dict={"name":"Mike","score":90}>>>"你好,{name}同学,你的成绩是{score}。".format(**my_dict)'你好,Mike同学,你的成绩是90。'

此外,和f-string类似,也可以在花括号定义的占位符后面加上“:”来约定转换和输出格式。例如,下面的例子是将变量pi填充到格式串中,并将其格式化为保留2位小数的浮点数输出。再如,我们可以利用datetime模块的now()函数获得当前时间,并将其格式化输出为年月日的格式。3.内置format(.)函数实现字符串格式化>>>pi=3.14159>>>formatted_number="Thevalueofpiis{:.2f}".format(pi)>>>print(formatted_number)Thevalueofpiis3.14>>>

>>>fromdatetimeimportdatetime>>>today=datetime.now()>>>formatted_date="Todayis{:%Y-%m-%d}".format(today)>>>print(formatted_date)Todayis2023-12-11>>>

2.6输入函数input(.)2.6.1函数定义与用法函数定义内置函数input(.)可以接受用户从标准输入设备(键盘)输入内容。函数定义:input([prompt=None])参数:prompt:输入提示语。可选,默认为空。返回值:用户输入的字符串(不包括用户最后输入的回车)当调用input()函数时,首先在屏幕上打印输出提示语prompt,提示并等待用户输入,直到用户按回车结束,返回用户输入的字符串(不包括最后的回车)。举例以下是一个简单的示例:下面这个例子展示了当input(.)函数没有任何输入参数时,即表明没有任何输入提示语,但仍可以接受用户的输入。>>>user_input=input("请输入您的名字:")请输入您的名字:张三>>>print("您输入的名字是:",user_input)您输入的名字是:张三>>>user_input=input()张三>>>print("您输入的内容是:",user_input)您输入的内容是:张三2.6输入函数input(.)2.6.2输入函数的返回值与类型转换输入函数的返回值与类型转换需要注意的是,input(.)函数返回的始终是一个字符串,即返回值的类型始终是字符串类型。即便看上去输入的是数字,返回的也是数字字符构成的字符串。因此,在通过input(.)函数获得输入内容后,经常需要对其进行必要的类型转换才能继续参与后续的计算或操作。如果需要将输入转换为其他类型(如整数或浮点数),可以使用前文介绍的类型转换函数,如int()或float()等。>>>age=input("请输入您的年龄:")请输入您的年龄:22>>>age=int(age)#将输入的字符串转换为整数>>>birth_year=2023-age>>>print("您的出生年份是:",birth_year)您的出生年份是:2001输入函数的返回值与类型转换有时,我们也可以使用eval(.)函数来将input函数返回的字符串作为表达式执行以获得正确类型的数据对象。例如在上面的例子中,我们可以使用eval(age)来代替int(age)以达到类似效果。eval(.)函数还能支持在一次input中接受多个输入,通过转换为元组来进一步处理。>>>x,y=eval(input("请输入两个数x和y,用英文逗号隔开:"))请输入两个数x和y,用英文逗号隔开:100,200>>>print("x的值和类型分别是:",x,type(x))x的值和类型分别是:100<class'int'>>>>print("y的值和类型分别是:",y,typ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论