Python入门

mac2024-04-20  32

Python的语法结构

Python完全靠缩进表达代码逻辑,缩进4个空格

注释采用#,续行采用,与shell一致

同一行如果书写多条语句,可以用;分隔,与shell一致.但是,可读性差.

输入输出

print输出语句

>>> print('hello world!!') hello world!! #输出信息如果是字符串需要加引号,如果是变量则不需要加引号,单双引号没有区别 # 打印多项,用逗号分隔,输出各项间默认是空格 >>> print('hao ',123) hao 123 #输出信息见间隔的定义使用sep来定义 >>> print('hao', 123, sep='~~~~') hao~~~~123 #字符串相加 >>> print('hao'+'123') hao123 #数字相加 >>> print(123 + 456) 579 #字符串相加 >>> print('123' + '456') 123456 #字符串和数字相加是会报错 >>> print('qwe'+123) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not int

input输入语句

>>> input() 10 '10' #有交互式的输入 >>> input('name:') name:lisi 'lisi' #把输入存储到变量中,该变量一定是字符串类型 >>> name=input('name:') name:lisi >>> print(name) lisi >>> name 'lisi' >>> n = input('number:') number:12 >>> n '12' #变量不能直接与数字做运算 >>> n + 3 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not int #使用int转换变量类型 >>> int(n) + 3 15 #将数字3转换成字符串 >>> n + str(3) '123' name=input('name:') print('欢迎 '+name) print('欢迎', name) print('欢迎 %s' % name) #%s是占位符,后面的name内容将会替代它 print('欢迎 %s' %name) print('欢迎 % s' %name) name:李思思 欢迎 李思思 欢迎 李思思 欢迎 李思思 欢迎 李思思 欢迎 李思思

变量

可以变化的量是变量,如a=10,以后还可以改变它,a=100

与变量相反的是字面量,如字符串"hello",数字100,都是字面量

写程序时,如果总是用字面量,就是硬编码

合法变量名的要求

首字符必须是字母或下划线其他字符可以是数字,字母,下划线区分大小写

推荐的名称的写法

变量名全部用小写,尽量有意义,pythonstring简短, pystr多个单词间用下划线分隔,py_str变量用名词,如phone;函数名用谓词(动词+名词),update_phone类名采用驼峰的形式,MyClass

变量赋值自右向左进行,将=右边表达式的计算结果赋值给左边的变量

>>> a = 12 >>> a = a + 5 >>> a 17 >>> a += 5 >>> a 22 >>> a -= 5 >>> a 17 >>> a *= 10 >>> a 170 >>> a /= 10 >>> a 17.0

变量在使用之前必须赋值

>>> b + 5 #变量b没有赋初值,将会出现名称错误 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'b' is not defined >>> b += 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'b' is not defined

运算符

算数运算符

+ - * / // % ** >>> 5 / 3 1.6666666666666667 >>> 5 // 3 # 保留整数 1 >>> 5 % 3 # 取余,求模运算 2 >>> divmod(5, 3) # 5除以3,返回商和余数 (1, 2) >>> a, b = divmod(5, 3) # 将商和余数分别赋值给a和b >>> a 1 >>> b 2 >>> 2 ** 3 # 2的3次方,幂运算 8 >>> 3 ** 4 81

比较运算符,得到结果是真或假

< <= > >= == !=

>>> 3 = 3 # 这是赋值,不是比较,但数字不能作为变量首字符 File "<stdin>", line 1 SyntaxError: can't assign to literal >>> 3 == 3 # 比较必须使用==表示判断是否相等 True >>> 10 > 5 > 1 #Python支持连续比较 True >>> 20 > 10 < 30 # 相当于 20 > 10 and 10 < 30 True

逻辑运算符,最终结果为True或False

and not or

>>> 10 > 50 and 10 < 15 # and两边全为True则为True False >>> 10 > 50 or 10 < 15 # or两边有一个True则为True True >>> not 10 > 50 or 10 < 15 # 涉及到可读性差的代码,应该加() True >>> not 10 > 50 # not是取反,真变假,假变真 True

数据类型

数字

int: 整数 bool:布尔值 float:浮点数 complex:复数

Python默认使用10进制数表示数字 以0o或0O开头表示8进制数 以0x开头表示16进制数 以0b开头表示2进制数 # 有小数点的为浮点数 >>> type(1.65) <class 'float'> #没有小数点的为整数 >>> type(10) <class 'int'> # True和False值分别为1和0 >>> True + 1 2 >>> False *5 0 # 将十进制转化为8进制 >>> oct(10) '0o12' 将10进制转化为16进制 >>> hex(20) '0x14' #将十进制转化成2进制 >>> bin(7) '0b111'

字符串:引号引起来的部分.

单双引号没有什么区别 三引号就是三个连续的单引号或双引号,可以保存用户的输入格式

>>> words = "hello # File "<stdin>", line 1 words = "hello ^ SyntaxError: EOL while scanning string literal >>> words = 'hello File "<stdin>", line 1 words = 'hello ^ SyntaxError: EOL while scanning string literal >>> words = "hello\nnew\nlisi" >>> print(words) # print 将\n转义成回车 hello new lisi #三引号可以保存用户的输入格式 >>> wds = """hello ... new ... lisi""" >>> print(wds) hello new lisi >>> wds ' hello\nnew \nlisi\n' >>> py_str = 'python' >>> len(py_str) # 计算长度 6 >>> py_str[1] # 取下标为1的字符 'y' >>> py_str[5] 'n' >>> py_str[6] # 下标超出范围将会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> py_str[-1] # 下标为负数则由右至左 'n' >>> py_str[2:3] # 切片提取,起始下标包含,结束下标不包含 't' >>> py_str[2:4] 'th' >>> py_str[2:7] # 切片不会出现下标越界的错误 'thon' >>> py_str[2:] # 结束不写,表示取到结尾 'thon' >>> py_str[:2] # 起始不写,表示从开头取 'py' >>> py_str[:] # 都不写,表示从开头去取到结尾 'python' >>> py_str[::2] # 切片默认步长为1,该为2 'pto' >>> py_str[1::2] 'yhn' >>> py_str[::-1] # 步长值为负数表示从右往左取 'nohtyp' >>> py_str + ' 123' # 字符串拼接 'python 123' >>> '~' * 10 # ~号重复10次 '~~~~~~~~~~' >>> 't' in py_str # t在字符串中吗? True >>> 'th' in py_str # th在字符串中吗? True >>> 'to' in py_str # to在字符串中吗? False >>> 'to' not in py_str # to不在字符串中吗? True

列表,与字符串类似,都是序列对象,列表可变,可以把元素重新赋值

>>> alist = [1, 2, 3, 'tom', 'jerry'] >>> len(alist) 5 >>> alist[0] 1 >>> alist[0:4] [1, 2, 3, 'tom'] >>> alist + [10] [1, 2, 3, 'tom', 'jerry', 10] >>> alist * 2 [1, 2, 3, 'tom', 'jerry', 1, 2, 3, 'tom', 'jerry'] # 向列表尾部追加一个字符串 >>> alist.append('asd') >>> alist [1, 2, 3, 'tom', 'jerry', 'asd'] # 可以给元素重新赋值 >>> alist[0] = 100 >>> alist [100, 2, 3, 'tom', 'jerry', 'asd']

元组可以认为它是不可改变的数组

>>> atup = (1, 2, 3, 'bob') >>> len(atup) 4 >>> atup[0] 1 >>> atup[2:] (3, 'bob') >>> atup[0] = 10 # 元组不可变,所以不能把他的元素重新赋值 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment

字典: 采用key:val的形式,没有顺序,所以没有下标.

>>> zidian = {'name': 'lisi', 'age': 18} >>> len(zidian) 2 >>> zidian[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 0 >>> 'tom' in zidian False >>> 'name' in zidian True >>> zidian['name'] 'lisi'

数据类型特点

按存储模型分类 标量:数据中不能包含其他类型数据. 数字,字符串容器: 可以包含其他类型数据. 列表,元组,字典 按照更新模型分类 不可变: 数字,字符串,元组可变: 列表,字典 按访问模型分类 直接: 数字顺序: 字符串,列表,元组映射: 字典

判断语句

标准if条件语句的语法

if 判断条件: 如果条件为真才执行的语句块 else: 判断条件为假才执行的语句,不是必须的

判断条件

py_str = 'qweasd' if 'qw' in py_str: print('qw在Python中') if -0.0: print('值为0的数字为假') if ' ': print('空格也是一个字符,为真') if []: print('空列表为假') if (1, 2): print('非空元组为真') if {'name': 'lisi'}: print('非空字典为真') if not {}: print('空字典为假,取反为真') if not None: print('None表示空对象,类似与MySQL中的null,为假,取反为真') if 'c' > 'b': print('a') 结果: qw在Python中 空格也是一个字符,为真 非空元组为真 非空字典为真 空字典为假,取反为真 None为空,为假,取反为真 a

条件表达式,三元运算

b = 20 if a<b : s1=a else: s1=b print('s1=%s' %s1) s2 = a if a < b else b print('s2=%s'%s21 结果: s1=10 s2=10

案例1

创建login.py文件提示用户输入用户名和密码获得到相关信息后,将其保存在变量中如果用户输的用户名为bob,密码为123456,则输 出Login successful,否则输出Login inorrect #!/home/student/Pytest/bin/python import getpass # 密码不显示进行输入 user=input('姓名:') password = getpass.getpass('密码:') if user == 'bob' and password == '123456': #32是绿色 前景色,40以上是背景色 # \033[0m是关闭颜色 print('\033[32;1mLogin successful\033[0m') else: print('\033[31;1mLogin inorrect\033[0m') 结果: 姓名:asds 密码:ggw Login inorrect 姓名:bob 密码:123456 Login successful

案例2

创建grade.py脚本,根据用户输入的成绩分档,要求如下:

如果成绩大于60分,输出“及格”如果成绩大于70分,输出“良”如果成绩大于80分,输出“好”如果成绩大于90分,输出“优秀”否则输出“你要努力了” cj = float(input('请输入成绩:')) if cj < 60: print('你要努力了') elif cj < 70: print('及格') elif cj < 80: print('良') elif cj < 90: print('好') else: print('优秀') cj = float(input('请输入成绩:')) if 60 <= cj < 70: print('及格') elif 70 <= cj < 80: print('良') elif 80 <= cj < 90: print('好') elif 90 <= cj: print('优秀') else: print('你要努力了70')

案例3

编写game.py,要求如下:

计算机随机出拳玩家自己决定如何出拳代码尽量简化 #一般思路版 import random choose = ['剪刀', '石头', '布'] cp_choose = random.choice(choose) player = input('请出拳(石头,剪刀,布):') print('compute`s choose:%s your choose:%s' %(cp_choose,player)) if cp_choose == '石头': if player == '石头': print('平局') elif player == '剪刀': print('you lost') else: print('you win') elif cp_choose == '剪刀': if player == '石头': print('you win') elif player == '剪刀': print('平局') else: print('you lost') else: if player == '石头': print('you lost') elif player == '剪刀': print('you win') else: print('平局') #简化思路版 import random choose = ['剪刀', '石头', '布'] #这里先把可能输的情况都列举出来,玩家选择在前 lose_list = [['剪刀', '石头'], ['石头', '布'], ['布', '剪刀']] cp_choose = random.choice(choose) player = input('请出拳(石头,剪刀,布):') print('compute`s choose:%s your choose:%s' %(cp_choose,player)) if cp_choose == player: print('平局') elif [player, cp_choose] in lose_list: print('you lose!!') else: print('you wim')
最新回复(0)