关注微信公众号“IT小组”,获取更多知识干货~
目录:
一:赋值
二:输入输出语句
三:格式化输出
四:循环语句
五:条件判断语句
一:赋值
在编程语言中,给一个变量赋值是最常见的事情,赋值语句在Python中是以“=”作为关键字的。
给变量a赋值为数值10,代码如下:
a = 10
上面我们通过赋值给了a指定的值,这里我们要强调一下,赋值是将右边的值赋值给左边,但是等号的左边不能是常量和表达式,如下:
2 = 'hello' # 错误
1 + 2 = 3 # 错误
在Python中支持如下写法:
a = b = 3 # 正确,可以给多个变量一次性赋值
a = b = 3 = c # 错误
这是在大多数高级编程语言中所不支持的:连续赋值给多个变量。
在Python中我们称为拆包(后面我们会谈拆包的具体含义)。
赋值语句意味着向内存申请了一块地址空间,用来存储变量的值。(Python支持自动内存垃圾回收,也就是当一个值不被任何变量指向和引用时,Python会自动将它清空。)
二:输入输出语句
每一门编程语言在最开始都会介绍输入输出语句,在Python中的输出语句通常都是使用print函数来完成。(在之前的Python2中,print是作为一个类来处理的,但是在Python3中将它变成了一个函数。)
print函数有很多小知识点,在print函数中的__doc__特殊属性里都有介绍,如下:
# 可以通过使用print(print.__doc__)代码来查看。
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
"""
pass
print函数中的参数的意义如下:
# 1. self:参数代表的是函数本身。
# 2. *args:表示的是可以接收多个连续的值存储在*args变量中。
# 3. sep=' ':表示在打印多个值的时候,默认以空格隔开。
# 4. end='\n':表示默认结束打印后自动添加的字符,默认添加的是'\n'也就是自动换行。
# 5. file=None:表示输出流的具体路径是,默认None表示输出到sys.stdout(系统的标准输出,就是控制台),也可以自定义,比如将输出打印到一个文件中等。
print函数例子如下,
如下:
print ( 'hello' , 'world' , 'HI' , sep = '*' , end = '' file = x )
表示将 ’ hello ’ 等字符串以 ’ * ’ 分隔,不换行输出到文件 x 中。(这里x是指文件,并且要指定具体的路径,默认指向的是Python安装路径)
说完了输出语句,下面来介绍一下Python中的输入语句。
输入语句——input函数:
def input(*args, **kwargs): # real signature unknown
"""
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
"""
pass
input函数中的doc文档注释中,解释了input函数的使用。它将输入的数据统一转为字符串格式来处理。input函数在使用的时候可以输入数据作为提示信息,如下:
name = input( '请输入您的姓名:' )# 输入的数据已字符串格式保存在name变量中
print ( '您的姓名是%s,它是以%s的类型来保存' %( name,type(name) ) ) # type函数用来测试数据的类型
#打印结果如下:
请输入您的姓名:李四 # 输入姓名李四
您的姓名是李四,它是以<class 'str'>的类型来保存 # str是字符串类型
age = input ( '请输入您的年龄:' )
print ( '您的年龄是%d,它是以%s的数据类型来保存' %( age , type(age) ) )
# 打印结果如下:
请输入您的年龄:18 # 这里输入年龄18
您的年龄是18,它是以<class 'str'>的数据类型来保存
上面“%s”表示的是格式化输出,在下面第三节“格式化输出”中有详细介绍。
从上面的测试中发现了,无论input接收到的数据类型是什么,它都以str(字符串)类型来保存。(为什么input函数要统一将输入的数据转为字符类型呢,因为在大多数情况下我们需要完整的保留用户输入的数据,而字符类型是最好的保留方式之一。)
三:格式化输出(占位符—“%”)
在上面“输出语句print函数”中,我们接触到了print函数的使用,但是上面打印的都是不可变数据,如果我们想打印可变的变量和字符串该如何呢,当然可以使用我们之前学到的知识,类似于如下这些:
name = '张三'
age = 18
print ('我的名字是', name , ',我的年龄是' , age , sep = '')
# 打印结果如下:
我的名字是张三,我的年龄是18
print ('我的名字是' + name , ',我的年龄是' + age , sep = '')
# 上面利用' + ' 将两个字符类型的数据相加,在Python中表示将两个字符串连接起来。
# 但是后面的age并不是字符类型,是int类型,将不同的数据类型用' + '相连会报错。
这样也是一种“好的方法”,不过如果数据量过于庞大,或想要更灵活的处理数据的时候,可能就有所力不从心了,还好Python提供了另外一种更有效更简洁的方法——“%占位符”。
所谓的“占位符”根据字面的意思可知,它放在字符串中,用来给后面的变量或常量占位,后面的值会根据顺序来填充前面字符串中的占位符。在Python中用“%”来表示占位。如下:
#占位符的使用
name = '李四'
print ( '我的名字是%s' %name )
#打印结果如下:
我的名字是李四
age = 18
print ( '我今年%d岁了' %age )
#打印结果如下:
我今年18岁了
利用占位符可以将不同的数据类型在一起打印处理,将之前利用’ + '字符不能处理不同数据类型的情况解决了,其实“占位符”还有很多功能,如下:
%占位符的用法:
%s:字符串的占位符。
%d:整数的占位符。(*默认取整四舍五入)
%f:浮点数的占位符。(*默认保留小数点后6位)
%.nf:表示取小数点后n位。(*默认小数位会四舍五入)
%-nd:表示如果整数不够n位,右边使用空格补齐。
%nd:表示如果整数不够n位,左边使用空格补齐。
%0nd:表示如果整数不够n位,左边使用0补齐。
%%:用来表示对%转义。它的用处主要是当我们想输出%号时,为了防止被当成填充字符而使用%%来转义。
%c:将数值转为对应的字符输出。(*对应的是ASCII码表)
具体代码例子如下:
# %s,%f,%d,%.nf,%c例子如下:
print ( '小美欠我%s元' %56.23 )
print ( '小美欠我%d元' %56.23 )
print ( '小美欠我%f元' %56.23 )
print ( '小美欠我%.1f元' %56.23 )
print ( '小美欠我%.2f元' %56.23 )
print ( '%c' %97 )
#打印结果如下:
小美欠我56.23元
小美欠我56元
小美欠我56.230000元
小美欠我56.2元
小美欠我56.23元
A
# %-nd,%nd,%0nd 例子如下:
print( '我今年%-3d岁了' %18 )
print( '我今年%3d岁了' %18 )
print( '我今年%03d岁了' %18 )
# 打印结果如下:
我今年18 岁了
我今年 18岁了
我今年018岁了
上面的占位符都是单个变量或常量,在Python中多个占位符使用“%(value1,value2…)”来表示,如下:
# 多个占位符
name = '李四'
age = 18
print ( '我的名字是%s,我的年龄是%d岁了' %( name, age ) )
# 打印结果如下:
我的名字是李四,我的年龄是18岁了
(*需要注意的是,多个占位符后面的值会根据顺序来填充前面字符串中的占位符。)
下面是更多的占位符的知识:
(*需要注意的是,在Python中已经不支持%u)
四:Python中的循环语句
程序中的代码最常见的是结构是顺序结构、循环结构、选择分支结构。
顺序结构表示代码是按照从上而下顺序执行的,循环结构是如下介绍的,选择分支结构将在下一个小结介绍。
循环语句:
循环语句的作用很强大,它适用于重复性的工作,让开发更简洁更有效率。
Python中的循环语句有两种,一种是while语句,另一种是for in 语句。
(*Python不支持do while语句。)
循环的作用很强大,我们举一个例子:要求打印十次“hello,world”,如果不使用循环我们的代码会是下面这个样子:
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
print ( 'hello,world' )
# 或者是下面这样的
print ( 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' , 'hello,world' )
这是非常糟糕的,是我们不愿意看到的。如果我们使用了循环语句,那么我们的代码会如此的简介明了,有益于阅读。如下:
a = 0
while a < 10 :
print ( 'hello,world' )
a += 1
上面使用了循环while语句,while语句后面是一个bool值(关于什么是bool值会在第四章Python的数据类型中介绍)作为是否继续循环的依据。这里我们给一个变量a赋值0,while循环语句判断a是否小于10,很明显0是小于10的,所以while后面的bool值为True,当为True时才会继续执行,后面的print语句会打印“hello,world”,并且a的值会不断的加1(a+=1其实就是等同于a = a+1),当a循环了第十次的时候,a的值变成了10,这是a已经等于10了,while后面的bool值是False,是为“假”。至此while语句执行结束。(打印了10次“hello,world”。)
(循环是非常有用的,如果想不完成全部循环而是直接跳出此循环执行之后的代码该如何进行呢,则如下所示)
如何跳出循环呢,在Python中使用break关键字来跳出循环。
i = 0
while i < = 10:
i + = 1
break
print ( i )
# 打印结果如下:
1
如上面代码所示,正常情况下没有break语句时,i的值是0到10的和,但是加了break语句后,在while循环运行第一遍的时候i的值变为了1后,遇到break语句,则while循环提前结束,继续运行下面print(i)的代码,即打印i的值。
(如果不想“全部跳出此循环”仅仅是针对这一次循环跳出该如何呢,则如下所示)
如果不想直接跳出循环,而是仅仅只想结束此次循环呢,在Python中利用continue关键字是作为结束此次循环,进入下次循环。如下面代码所示:
i = 0
while i <= 10:
i += 1
print ( i , end = ' ' )
continue
print ( i + 1 )
# 打印结果如下:
1 2 3 4 5 6 7 8 9 10 11
可以发现,while循环中的代码在continue前都执行了,但是print(i + 1)并没有执行。由此可见continue关键字是结束此次循环,进入下一次循环。
上面我们说了,Python中有两种实现循环的语句:
- while语句
- for…in语句
Python中for…in语句的格式是:for 变量 in 可迭代对象
(在Python中的数据类型中介绍了可迭代对象的概念,可迭代对象一般有字符串,列表,元组,字典和集合)
for…in语句的例子如下:
for i in [0,1,2]:
print ( i )
# 打印结果如下:
0
1
2
for…in 语句会将可迭代对象的单个元素依次取出,放入前面变量中。如果我们想打印0-100的数据,用列表 [ 0,1,2,3,4,5…,100 ] 显然是非常麻烦的,好在Python提供了一个range内置类来自动生成一个有序的数字序列。
range内置类代码例子如下:
for i in range(10):
print ( i )
# 打印结果如下:
0
1
2
3
...
8
9
上面利用了range内置类生成了0-9的一个数字序列,这要注意的是,range(n)生成的是 [ 0,n ) 的一个数字序列,包含第一个,去除最后一个。
内置类range还可以接收两个参数,如下:
for i in range(10,20):
print ( i )
两个参数给定了序列的边界,从10-20数字序列,包含了10但是不包含20。如果还想控制步长(步长是用来控制数值之间的间隔),可以给出第三个参数,作为步长,默认步长为1,打印从10-20(不包含)之间的偶数如下:
for i in range(10,20,2):
print ( i , end = ' ' )
上面代码会打印从10-20中,每两个步长的数值,如:[ 10,12,14,16,18 ]。下面我们利用for…in语句来实现1-100的和,代码如下:
count = 0 # 用来存储1-100和的变量
for i in range(1,101):
count += i
print ( count )
# 打印结果如下:
5050
五:Python中的条件判断语句
拥有了循环语句我们可以做很多事情,但是,循环语句显得过于僵硬,例如我们想打印0-10的偶数,如果只用循环语句来实现需求是可以的,只是会有些僵硬(可以使用rang内置类并控制步长来实现此需求,但是这一小节我们来介绍一个重要的语句:条件判断语句)。如果使用了条件判断语句则就非常容易了。在Python中使用if系列关键字作为条件判断语句。
如下:使用if语句打印从0-10中所有偶数的代码:
for i in range ( 11 ):
if not i % 2:
print ( i )
(%做为运算符时,表示“取余”,例如: 5 % 2 等于 1)
在其他语言中选择语句很多,例如if、if else 、if elif else、switch case等,但是在Python中只支持if系列类型的语句,if语句后面的值作为布尔值(如果你不知道什么是布尔值,不用担心,我们后面会介绍)来处理如果为True则执行条件判断语句里面的代码,如果为False则不执行里面的代码。
倘若我们改变上面的需求,打印0-10中的偶数,不是偶数的时候则输出“x不是偶数”提示信息。这样的需求仅仅使用if语句是不够了,需要用到if else语句。
代码如下:
for i in range ( 11 ):
if not i % 2 :
print ( '%s,是偶数' %i )
else:
print ('%s,不是偶数' %i )
# 打印结果如下:
0,是偶数
1,不是偶数
2,是偶数
3,不是偶数
4,是偶数
5,不是偶数
6,是偶数
7,不是偶数
8,是偶数
9,不是偶数
10,是偶数
当我们需要多个判断的时候,需要使用if…elif…else 语句。
假设我们又将需求改为:0-10中是偶数或者是3的倍数打印出来。可以利用if…elif…else 语句来实现。
代码如下:
for i in range( 11 ):
if not i % 2:
print( '%s是偶数' %i )
elif not i % 3:
print( '%s是3的倍数' %i )
else:
print( '%s不是偶数也不是3的倍数' %i )
# 打印结果如下:
0是偶数
1不是偶数也不是3的倍数
2是偶数
3是3的倍数
4是偶数
5不是偶数也不是3的倍数
6是偶数
7不是偶数也不是3的倍数
8是偶数
9是3的倍数
10是偶数