Python 入门
变量
-
- 什么是变量?变量就是变化的量,核心是“变”和“量”两个字,变就是变化,量就是衡量状态。
- 为什么需要变量?程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说保存下来程序执行时状态以及状态的变化。
- 如何定义变量变量名(相当于门牌号,指向所在的空间),等号,变量值name=’Egon’sex=’male’age=18level=10
- 变量的定义规范
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 关键字不能声明为变量名 [‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
- 定义方式
- 驼峰体AgeOfOldboy = 56NumberOfStudents = 80
- 下划线age_of_Oldboy = 56number_of_students = 80
- 定义变量名不好的方式
- 变量名为中文、拼音
- 变量名过长
- 变量名词不达意
- 定义变量会有:id, type, value
- 常量常量即指不变的量,如 π 3.141592653… 或在程序运行过程中不会改变的量举例,假如老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在 Python 中没有一个专门的语法代表常量,程序员约定俗称用变量名全部大写代表常量AGE_OF_OLDBOY = 56PS:在c语言中有专门的常量定义语法, const int count = 60;一旦定义为常量,更改就会报错。
用户与程序交互
古时候,我们去银行取钱,需要一个银行业务元等着我们把自己的账号密码输入给他,然后他去进行验证,成功之后,我们再将取款金额输入/告诉她
骄傲的现代人,会为客户提供一台ATM(就是一台计算机),让ATM机跟用户交互,从而取代人力。然而机器是死的,我们必须为其编写程序来运行,就是要求我们的编程语言中能够有一种能与用户交互,接收用户输入数据的机制注释
随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码,有些代码你花费很久写出来,过了些天再回来看,发现竟然看不懂了,这太正常了。另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。
代码注释分单行和多行注释,单行注释用#,多行注释可以用三对双引号 “”””””
代码注释的原则:
- 不用全部加注释,主需要在自己觉得重要或不好理解的部分加注释就行
- 注释可以用中文或英文,但不要用拼音
文件头
#!/usr/bin/env python # -*- coding: utf-8 -*-
基本数据类型
- 什么是数据?为啥要有多种类型的数据?数据即变量的值,如 age=18,18 就是我们保存的数据。变量的是用来反应/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识
数字
int 整形
定义:age=10 #age=int(10)用于标识:年龄,等级,身份证号,qq号,个数float 浮点型
定义:salary=3.1 #salary=float(3.1)用于标识:工资,身高,体重int(整形)
在 32 位计算机上,整数的位数为32位,取值范围为 -231~231-1,即-2147483648~2147483647在 64 位计算机上,整数的位数为64位,取值范围为 -263~263-1,即-9223372036854775808~9223372036854775807long(长整形)
跟C语言不同,Python的长整数没有指定位宽,即:Python 没有限制长整数数值的大小,但是实际由于机器的内存有限,我们使用的长整数数值不可能无限大注意,自从 Python 2.2 起,如果整数发生溢出,Python 会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。注意:在 Python3 里不再有 long 类型了,全都是int 1 2 3 4 5 6 7 8 9 | In [7]: a = 2**64 In [8]: type(a) # type() 是查看数据类型的方法 Out[8]: int In [9]: b = 2**60 In [10]: type(a) Out[10]: int |
complex复数型
1 2 3 4 5 6 7 | In [11]: x=1-2j In [12]: x.imag Out[12]: -2.0 In [13]: x.real Out[13]: 1.0 |
字符串
在python中,加了引号的字符就是字符串类型,python并没有字符类型
定义:name=’egon’ #name=str(‘egon’)用于识别:描述性的内容,如姓名,性别,国际,种族那单引号、双引号有什么区别呢?让我大声告诉你,单双引号没有任何区别,只有下面这种情况,你需要考虑单双的配合
msg = "My name is Egon, I'm 18 years old!"
多引号什么作用呢?作用就是多行字符串必须用多引号
1 2 3 4 5 6 7 | msg = ''' 今天我想写首小诗, 歌颂我的同桌, 你看他那乌黑的短发, 好像一只炸毛鸡。 ''' print(msg) |
数字可以进行加减乘除运算,字符串呢?字符串也是可以的,但是只能进行“相加”和“相乘”的运算。
1 2 3 4 5 6 7 8 9 | In [14]: name='egon' In [15]: age='18' In [16]: name+age #相加就是简单的拼接 Out[16]: 'egon18' In [17]: name*5 Out[17]: 'egonegonegonegonegon' |
注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次。注意2:只能字符串加字符串,不能字符串加其他类型
列表
在[]内用逗号分隔,可以存放n个任意类型的值
定义:students=[‘egon’, ‘alex’, ‘wupeiqi’,] #students=list([‘egon’, ‘alex’, ‘wupeiqi’,])用于标识:存储多个值的情况,比如一个人有多种爱好存放多个学生的信息:姓名,年龄,爱好
1 2 3 4 | In [18]: students=[['egon', 18, ['play',]], ['alex', 18, ['play', 'sleep']]] In [19]: students[0][2][0] #取出第一个学生的爱好 Out[19]: 'play' |
字典
为啥还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下 1 2 3 4 | In [20]: info=['egon', 'male', 18,] # 定义列表的目的不单单是为了存,还要考虑取值,如果我想取出个人的年龄,可以用 In [21]: info[2] Out[21]: 18 |
但是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
1 2 | # name sex age info=['egon', 'male', 18] |
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们就要寻求一种,既可以存放多个任意类型的值,有可以硬性规定值的映射关系的类型,比如 key=value,这就用到了字典。
在{}内用逗号分隔,可以存放多个 key:value 的值,value 可以是任意类型
定义:info={‘name’:’egon’,’age’:18,’sex’:male} #info=dict({‘name’:’egon’,’age’:18,’sex’:’male’})用于标记:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效的取值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | info={ 'name':'egon', 'hobbies':['play', 'sleep'], 'company_info':{ 'name':'Oldboy', 'type':'education', 'employee_number':40, } } print(info['company_info']['name']) #取公司名 students=[ { 'name':'alex','age':38,'hobbies':['play','sleep']}, { 'name':'egon','age':18,'hobbies':['read','sleep']}, { 'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']}, ] print(student[1]['hobbies'][1]) #取第二个学生的第二个爱好 |
布尔
布尔值,一个True一个False
计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识 1 2 3 4 5 6 7 8 9 | In [1]: a=3 In [2]: b=5 In [3]: a > b Out[3]: False In [4]: a < b Out[4]: True |
接下来就可以根据条件结果来干不同的事情了:
1 2 3 4 5 | if a > b print(a is bigger than b ) else print(a is smaller than b ) |
上面是伪代码,但意味着,计算机已经可以想人脑一样根据判断结果不同,来执行不同的动作。
重点:
- 可变类型:在 id 不变的情况下,value 可以变,则称为可变类型,如列表,字典
- 不可变类型:value一旦改变,id也改变。则称为不可变类型(id变,意味着创建了新的内存空间)
格式化输出
程序中经常胡有这样的场景:要求用户输入信息,然后打印成固定的格式
比如要求用户输入用户名和年龄,然后打印如下格式:My name is xxx, my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的 xxx 位置,而且数字也必须经过 str(数字) 的转换才能与字符串进行拼接。就用到了占位符,如:%s、%d 1 2 3 4 5 6 7 8 | >>> print('My name is %s, my age is %s' %('egon','18')) #%s字符串占位符:可以接收字符串,也可以接收数字 My name is egon, my age is 18 >>> print('My name is %s, my age is %d' %('egon','18')) #%d是数字占位符:只能接收数字 Traceback (most recent call last): File " |
1 2 3 4 5 6 7 8 9 10 | >>> name=input('your name: ') your name: renkeju >>> age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d your age: 18 >>> print('My name is %s, my age is %s' %(name, age)) My name is renkeju, my age is 18 >>> print('My name is %s, my age is %d' %(name, age)) #age为字符串类型,无法传给%d,所以会报错 Traceback (most recent call last): File " |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | name = 'renkeju' age = 22 sex = 'male' job = 'student' print(""" ----------- info of %s ------------ Name : %s age : %d sex : %s job : %s -------------- end ---------------- """ \ %(name, name, age, sex, job)) ----------- info of renkeju ------------ Name : renkeju age : 22 sex : male job : student -------------- end ---------------- |
基本运算符
计算机可以进行的运算有很多种,可不仅仅只有加减乘除这么简单,运算按种类可以分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂时只学习算数运算、比较运算、逻辑运算、赋值运算。
算数运算
以下假设变量: a=10, b=20
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 30 |
- | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ | 除 - x除以y | b/a 输出结果2 |
% | 取模 - 返回除法的余数 | b % a 输出结果0 |
** | 幂 - 返回x的y次幂 | a**b 为10的20次方,输出结果 1000000000000000000000 |
// | 取整除 - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
比较运算
以下假设变量:a=10, b=20
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 - 比较对象是否相等 | (a == b) 返回 false |
!= | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 true |
<> | 不等于 - 比较两个对象是否不相等 | (a <> b) 返回 true。这个运算符类似 != |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写 | (a < b) 返回 True |
>= | 大于等于 - 返回x是否大于等于y | (a >= b) 返回 False |
<= | 小于等于 - 返回x是否小于等于y | (a <= b) 返回 True |
赋值运算
以下假设变量: a = 10, b = 20
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c / a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c = a 等效于 c = c a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
逻辑运算
运算符 | 描述 | 实例 |
---|---|---|
and | 布尔“与” - 如果x为False, x and y 返回 False, 否则它返回 y 的计算值 | (a and b) 返回 true |
or | 布尔“或” - 如果x是True,它返回True,否则它返回y的计算值 | (a or b) 返回 true |
not | 布尔“非” - 如果x为True,返回False。如果x为False,它返回True。 | not(a and b)返回 False |
身份运算
is 比较的是 id
而 == 比较的是值流程控制之 if…else
既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反应,比如:
比如:
如果: 女性的年龄大于30岁,那么:叫阿姨age_of_boy = 31 if age_of_boy > 30: print('阿姨好')
age_of_girl = 18 if age_of_girl > 30: print('阿姨好') else: print('小姐好')
age_of_girl=18 height=171 weight=99 is_pretty=True if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True: print('表白...') else: print('阿姨好')
age_of_girl=18 height=171 weight=99 is_pretty=True success=False if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True: if success: print('表白成功,在一起') else: print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...') else: print('阿姨好') 如果:成绩>=90,那么:优秀 如果成绩>=80且<90,那么:良好 如果成绩="">=70且<80,那么:普通 其他情况:很差
流程控制之 while 循环
i = 0 guess=input('guess a number:') num=int(10) guess=int(guess) while i < 2: if num == guess: print("恭喜你,猜对了!") break elif guess > num: print('大了') guess = input('guess a number:') guess = int(guess) else: print('小了') guess = input('guess a number:') guess = int(guess) i+=1