Python基础
一、基础语法规范
1.用#作为代码注释
2.当语句以冒号:结尾时,缩进的语句视为到麻花,缩进**使用4个空格**
3.Python程序大小写敏感
二、数据类型
- 整数
- 浮点数
- 字符串:用单引号’'或双引号"“括起的任意文本,多行字符串用”“” “”"
- 转义字符:\ ,可以用来转义很多特殊字符,在行尾时表示续行符。比如\n表示换行,\t表示制表符,\表示的字符就是反斜杠符号\。
- 如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许在字符串前加r,表示内部的字符串默认不转义。
>>> s = "换行符是\\n。" >>> print(s) 换行符是\n。 >>>print(r'''hello,\n world''') hello,\n world
-
布尔值:一个布尔值只有True、False两种值,布尔值可以用and、or、not运算
>>> False and False False >>> 5 > 3 and 3 > 1 True >>> True or False True >>> not 1 > 2 True >>>if age >= 18: print('adult') else: print('teenager')
-
空值:用None表示
-
列表(list):list是一种有序的集合,可以随时添加和删除其中的元素,list中元素的数据类型可以不同
#设置列表 animals = ['dog','cat','pig'] #获取列表的元素个数 len(animals) #访问列表中的元素——用索引,从0开始,到len(animals)-1结束 annimals[0] #往列表中追加元素 animals.append('rabbit') #将元素插入到指定位置,如索引号为1的位置 animals.insert(1,'sheep') #删除指定位置的元素 animals.pop(1) #替换指定位置元素的值 animals[1] = 'monkey'
-
元组(tuple): tuple一旦初始化后,每个元素指向永远不变,因此没有列表的append()、insert()、pop()方法,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
#元组的定义 t = (1,2) t = () #空元组 t = (1,) #只有一个元素的元组,必须加上逗号
-
字典(dict): 使用键-值(key-value)存储,具有极快的查找速度,在放进去的时候,必须根据key算出value的存放位置,一个key只能对应一个value,这样,取的时候才能根据key直接拿到value。
#字典的定义 d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} #插入数据 d['Adam'] = 67 #修改数据 d['Bob'] = 78 #key不存在的话将数放进字典就会报错,通过get()方法判断 d.get('Thomas',-1) # 如果key:Thomas不在字典内,返回-1 #删除字典的数据,删除key即可 d.pop('Bob')
dict的key必须是不可变对象。因为dict根据key来计算value的存储位置(哈希算法),要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key.
-
set:一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等。
#定义set,需要提供一个list作为输入集合 >>> s = set([1, 1, 2, 2, 3, 3]) >>> s {1, 2, 3} #添加元素 >>> s.add(4) #删除元素 >>> s.remove(4)
三、字符串与编码
- 字符编码
- ASCII
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
在这里,每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位,每8个bit组成一个字节,这是计算机中最小的存储单位。 - GBK 和 GB2312
中文编码 - Unicode
Unicode把所有语言都统一到一套编码里,解决乱码问题。最常用的是UCS-16编码,用两个字节表示一个字符
但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
所以,出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
- Python字符串
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文
#对bytes类型的数据用带b前缀的单引号或双引号表示 >>> x = b'ABC' #以Unicode表示的str通过encode()方法可以编码为指定的bytes >>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' #要把bytes变为str,就需要用decode()方法 >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中' #计算str包含多少个字符 >>> len('ABC') 3 >>> len('中文') 2 #计算bytes的字节数 >>> len('中文'.encode('utf-8')) 6
- 格式化字符串
%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,%d表示用浮点数替换。
有几个占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个占位符,变量或值的括号可以省略。
# -*- coding: utf-8 -*-
#格式化整数和浮点数还可以指定是否补0和整数与小数的位数
>>> print('%2d-%02d' % (3, 1))
3-01
>>> print('%.2f' % 3.1415926)
3.14
>>> s1 = 72
>>> s2 = 85
>>> r = (s2 - s1)*100/s1
#字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%
>>> print('小明成绩提升了 %.2f %%' % r)
小明成绩提升了 18.06 %
#format()方法,可以接受不限个数的参数,位置也可以不按顺序
#普通用法,对应的{}依次替换
>>>print("还有{}天放假,我还在坚持学习{}".format(2, "Python"))
例句:还有2天放假,我还在坚持学习Python
#设置位置(索引)格式化,format函数中,按索引的参数替换字符串
>>> print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125))
Hello, 小明, 成绩提升了 17.1%
#指定替换参数的值
>>>str = "{who}坚持学习{language}, 取得了{what}的成绩".format(who="张三", language="Python", what="优异")
>>>print(str)
张三坚持学习Python, 取得了优异样的成绩
#f-string方法
>>> 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
四、条件判断
bmi1=input("请输入你的bmi指数")
bmi=float(bmi1)
if bmi<18.5:
print("过轻")
elif 18.5<=bmi<=25:
print('正常')
elif 25<=bmi<=32:
print("肥胖")
elif bmi>=32:
print("严重肥胖")
五、循环
-
for…in循环,依次把list或tuple中的每个元素迭代出来。
#计算0-100的整数之和 sum = 0 for x in range(101): sum = sum + x print(sum)
-
while循环,只要条件满足,就不断循环,条件不满足时退出循环
# 计算0到100以内的奇数循环 sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
-
关键词break和continue
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
注意:大多数循环并不需要用到break和continue语句#提前结束循环,打印出1~10后,紧接着打印END n = 1 while n <= 100: if n > 10: # 当n = 11时,条件满足,执行break语句 break # break语句会结束当前循环 print(n) n = n + 1 print('END') #只打印奇数 n = 0 while n < 10: n = n + 1 if n % 2 == 0: # 如果n是偶数,执行continue语句 continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行 print(n)