一、输入输出
在Python中,等号=
是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量
-
print()
函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出:函数依次打印每个字符串,遇到逗号“,”会输出一个空格print('The quick brown fox', 'jumps over', 'the lazy dog')
输出:
The quick brown fox jumps over the lazy dog
print("111","222",sep="*")输出多内容时,默认以空格分割,sep可改变分割符号
输出可以做加法与乘法;
print("""
-----
0----
""") #一次输出多行 -
input 输入
注意!!!输入返回的类型是字符串
input()
一行输入多值
a,b = input().split(",")
直接输入多值,分隔符默认是空格,可以更改使用split。 -
注释
单行注释:使用#开头书写
多行注释:使用"""或者'''把注解包裹起来
二、数据类型
-
整数
有正负之分
-
浮点数
对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是
1.23e9
,或者12.3e8
,0.000012可以写成1.2e-5
,等等。 -
字符串
字符串是以单引号
'
或双引号"
括起来的任意文本。如果字符串内部有很多换行,用
\n
写在一行里不好阅读,为了简化,Python允许用'''...'''
的格式表示多行内容,命令行:>>> print('''line1
... line2
... line3''')
line1
line2
line3如果写成程序并存为
.py
文件,就是:print('''line1
line2
line3''')如果字符串里面有很多字符都需要转义,就需要加很多
\
,为了简化,Python还允许用r''
表示''
内部的字符串默认不转义。 -
布尔值
Ture False
布尔值可以用
and
、or
和not
运算。and
运算是与运算,只有所有都为True
,and
运算结果才是True
:or
运算是或运算,只要其中有一个为True
,or
运算结果就是True
:not
运算是非运算,它是一个单目运算符,把True
变成False
,False
变成True
: -
空值
空值是Python里一个特殊的值,用
None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。 -
变量
变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和
_
的组合,且不能用数字开头
三、字符串
要注意区分'ABC'
和b'ABC'
,前者是str
,后者虽然内容显示得和前者一样,但bytes
的每个字符都只占用一个字节。
以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
-
ord()
获得字符的整数表示
-
chr()
将编码转化为字符
如果bytes
中包含无法解码的字节,decode()
方法会报错:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8')
Traceback (most recent call last):
...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
如果bytes
中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
-
len()
计算字符数
在Python中,采用的格式化方式和C语言是一致的,用%
实现,举例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?
,括号可以省略。
常见的占位符有:
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
有些时候,字符串里面的%
是一个普通字符怎么办?这个时候就需要转义,用%%
来表示一个%
format()
另一种格式化字符串的方法是使用字符串的format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
……,不过这种方式写起来比%要麻烦得多:
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
f-string
最后一种格式化字符串的方法是使用以f
开头的字符串,称之为f-string
,它和普通字符串不同之处在于,字符串如果包含{xxx}
,就会以对应的变量替换:
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62
四、列表、元组、字典、集合
list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
list的索引从0开始 classmates[0]
如果要取最后一个元素,除了计算索引位置外,还可以用-1
做索引,直接获取最后一个元素
比如,列出班里所有同学的名字,就可以用一个list表示:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
也可以把元素插入到指定的位置,比如索引号为1
的位置:
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
要删除list末尾的元素,用pop()
方法:
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
要删除指定位置的元素,用pop(i)
方法,其中i
是索引位置:
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
初始化列表
In [7]:c = [[0] * 5 for _ in range(5)]
In [8]:c[0][0]='这个方法行'
In [9]:c
Out[9]:
[['这个方法行', 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
tuple
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
>>> classmates = ('Michael', 'Bob', 'Tracy')
现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]
,classmates[-1]
,但不能赋值成另外的元素。
定义的不是tuple,是1
这个数!这是因为括号()
既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1
。
所以,只有1个元素的tuple定义时必须加一个逗号,
,来消除歧义
tuple 可以套用list使得tuple里的值可以发生改变
dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
要避免key不存在的错误,有两种办法,一是通过in
判断key是否存在:
>>> 'Thomas' in d
False
二是通过dict提供的get()
方法,如果key不存在,可以返回None
,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
要删除一个key,用pop(key)
方法,对应的value也会从dict中删除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
set也不可以存储list
注意,传入的参数[1, 2, 3]
是一个list,而显示的{1, 2, 3}
只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。
重复元素在set中自动被过滤:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
通过add(key)
方法可以添加元素到set中,可以重复添加,但不会有效果:
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
通过remove(key)
方法可以删除元素:
>>> s.remove(4)
>>> s
{1, 2, 3}
五、判断
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
if
语句执行有个特点,它是从上往下判断,如果在某个判断上是True
,把该判断对应的语句执行后,就忽略掉剩下的elif
和else
,所以,请测试并解释为什么下面的程序打印的是teenager
:
if
判断条件还可以简写,比如写:
if x:
print('True')
只要x
是非零数值、非空字符串、非空list等,就判断为True
,否则为False
。
这是因为input()
返回的数据类型是str
,str
不能直接和整数比较,必须先把str
转换成整数。Python提供了int()
函数来完成这件事情:
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
age = 15
match age:
case x if x < 10:
print(f'< 10 years old: {x}')
case 10:
print('10 years old.')
case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
print('11~18 years old.')
case 19:
print('19 years old.')
case _:
print('not sure.')
使用match
语句时,我们依次用case xxx
匹配,并且可以在最后(且仅能在最后)加一个case _
表示“任意值”,代码较if ... elif ... else ...
更易读。
match
语句除了可以匹配简单的单个值外,还可以匹配多个值、匹配一定范围,并且把匹配后的值绑定到变量
匹配列表
match
语句还可以匹配列表,功能非常强大。
match args:
# 如果仅出现gcc,报错:
case ['gcc']:
print('gcc: missing source file(s).')
# 出现gcc,且至少指定了一个文件:
case ['gcc', file1, *files]:
print('gcc compile: ' + file1 + ', ' + ', '.join(files))
# 仅出现clean:
case ['clean']:
print('clean')
case _:
print('invalid command.')
第一个case ['gcc']
表示列表仅有'gcc'
一个字符串,没有指定文件名,报错;
第二个case ['gcc', file1, *files]
表示列表第一个字符串是'gcc'
,第二个字符串绑定到变量file1
,后面的任意个字符串绑定到*files
(符号*
的作用将在函数的参数中讲解),它实际上表示至少指定一个文件;
第三个case ['clean']
表示列表仅有'clean'
一个字符串;
最后一个case _
表示其他所有情况。
可见,match
语句的匹配规则非常灵活,可以写出非常简洁的代码。
六、循环
-
for in
所以
for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name) -
range()
生产一个整数序列。
-
while
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)要特别注意,不要滥用
break
和continue
语句。break
和continue
会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break
和continue
语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break
和continue
语句。有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用
Ctrl+C
退出程序,或者强制结束Python进程。
七、函数
首先函数由def进行定义;由两部分组成:header和body
函数可以提供多个参数,也可以没有参数
一些基本数字函数
abs() #绝对值标签:case,classmates,python,Michael,list,办法,字符串,聪明,print From: https://www.cnblogs.com/DAMD/p/17855933.html
max() #最大值
min() #最小值
pow() #次方运算
round() #取最近的一个整数