Python入门——与用户交互、运算符
程序与用户交互
什么是与用户交互?
- 用户交互就是人往计算机中input/输入数据,计算机print/输出结果
为什么要与用户交互?
- 为了让计算机能够与用户沟通交流
如何与用户交互?
交互的本质就是输入输出
-
输入(input)和输出(print)
# 在python3:input会将用户输入的所有内容都存成字符串类型 ''' >>> age = input('age:') age:18 >>> print(age,type(age)) 18 <class 'str'> >>> >>> print(int(age),type(int(age))) 18 <class 'int'> >>> ''' # 在python2:raw_input(),用法与python3的input一摸一样 ``` # input():要求用户必须输入明确的数据类型,输入的什么类型就存成什么类型 ``` ''' > > > age = input('age:') > > > age:18 > > > print(age,type(age)) > > > (18, <type 'int'>) '''
-
输出之字符串的格式化输出
-
什么是格式化输出
- 把一段字符串中的某些内容用自己定义的内容替换掉之后再输出
-
为什么要格式化输出
- 由于经常用到要输出固定格式的内容,普通的输出已经无法满足需求所以需要格式化输出
-
如何格式化输出
-
运用占位符来实现格式化输出,如:%、str.format、f''
# %s 可以接收任意类型的值 # %d 只能接收int print("Life is short, I play %s,%d", %('python', 114514)) # 以字典的形式传值,打破位置的限制 res = "我的名字是 %(name)s 我的年龄是 %(age)s" % {"age": 18, "name": 'Umi'} print(res) # str.format python2.6后引入的(兼容性好,推荐使用) # 按照位置取值 res = "我的名字是 {0} 我的年龄是 {1}".format('Umi', 18) print(res) # 按照key=value传值 name = input('your name:') age = input('your age:') res = "我的名字是 {name} 我的年龄是 {age}".format(age=age, name=name) print(res) # f'' python3.5后推出 name = input('your name:') age = input('your age:') res = f"我的名字是 {name} 我的年龄是 {age}" print(res)
-
字符串的格式化输出补充知识
# f的新用法(了解):{}内的字符串可以被当作表达式运行 res=f'{10+3}' print(res) f'{print("aaa")}' # format新增(了解) # 我的名字是 {Umi} 我的年龄是 18 print("我的名字是 {{{name}}} 我的年龄是 {age}".format(age=18, name='Umi')) print('{x}======'.format(x='开始执行'))# 开始执行====== print('{x}:=<10'.format(x='开始执行')) # 开始执行====== print('{x}:=>10'.format(x='开始执行')) # ======开始执行 print('{x:=^10}'.format(x='开始执行')) # ===开始执行=== # 保留小数后几位 print('{salary:.3f}'.format(salary=12321.123456)) # 12321.123
-
-
基本运算符
算数运算符
'''
+、-、*、/(结果带小数)、//(地板除,只保留整数部分)、%(取余、取模)、**(次方)
'''
print(10 + 3.1)
print(10 ** 3) # 十的三次方
比较运算符
'''
>、>=、<、<=、==、!=
'''
# 用于条件判断、返回值是True或者False
赋值运算符
-
变量的赋值(=)
-
增量赋值
''' *=、/=、-=、%=、**=、//= ''' age = 18 # age = age + 1 age += 1 print(age)
-
链式赋值
''' x = 10 y = x z = y ''' z = y = x = 10 # 链式赋值 print(x,y,z) print(id(x),id(y),id(z))
-
交叉赋值
m = 10 n = 20 print(m, n) ''' temp = m m = n n = temp print(m, n) ''' m, n = n, m # 交叉赋值 print(m, n)
-
解压赋值
salaries=[11,22,33,44,55] # 把五个月的工资取出来分别赋值给不同的变量 ''' mon0=salaries[0] mon1=salaries[1] mon2=salaries[2] mon3=salaries[3] mon4=salaries[4] ''' mon0, mon1, mon2, mon3, mon4 = salaries print(mon0, mon1, mon2, mon3, mon4) # *_ 指后续的值会被*存称一个列表赋值给_, # _ 通常指被废弃掉的变量,做一个占位符而已,约定熟成 # *_ 只能取两端的值,不能够取中间值,且*在解压赋值中只能出现一次 mon0, mon1, *_ = salaries # 只取前两个值 *_, mon0, mon1= salaries # 只取后两个值 mon0, *_, mon1= salaries # 只取开头第一个值跟最后一个值 print(mon0, mon1) # 解压字典默认解压出来的是字典的key x,y,z=dic={'name':'Umi','age':18,'sex':'male'} print(x,y,z)
逻辑运算符
-
连续多个and:判断条件全为
True
最终为True
,有一个为False
,结果就为False
print(2 > 1 and 1 != 1 and True and 3 > 2) # 判断完第二个条件,就立即结束,得的最终结果为False
-
连续多个or:判断条件只要有一个为
True
最终为True
,当条件全为False
,结果才为False
print(2 > 1 or 1 != 1 or True or 3 > 2) # 判断完第一个条件,就立即结束,得的最终结果为True
-
优先级not>and>or
#1、三者的优先级关系:not>and>or,同一优先级默认从左往右计算。 print(3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3) # False #2、推荐使用括号来区别优先级(方便看) ''' 原理为: (1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割 (2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可 (3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运算 ''' print((3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3) # False
-
短路运算(了解):只要能够确定逻辑运算的结果,后面的判断条件就不会执行,直接返回最终结果
# 即假设全为and,只要有一个条件为False,那么最终结果就为False,False之后的判断条件均不执行 # 假设全为or,只要有一个条件为True,那么最终结果就为True,True之后的判断条件均不执行
成员运算符(in、not in)
print('Umi' in 'hello Umi') # 判断一个字符串是否存在于一个大字符串中
print(11 in [11,22,33]) # 判断元素是否存在于一个列表中
# 判断key是否存在于字典
print('k1' in {"k1":111,"k2":222})
# not in
print(not 'lili' in ['jack','tom','robin']) # 不推荐
print('lili' not in ['jack','tom','robin']) # 推荐,更符合逻辑
身份运算符(is、not is)
-
比较两个值的id是否相同
#1. id相同,内存地址必定相同,意味着type和value必定相同 #2. value相同type肯定相同,但id可能不同,如下 x='Info Tony:18' y='Info Tony:18' print(id(x),id(y)) # x与y的id不同,但是二者的值相同 # (4327422640, 4327422256) print(x == y) # 等号比较的是value print(type(x),type(y)) # 值相同type肯定相同 # (<class 'str'>, <class 'str'>) print(x is y) # is比较的是id,x与y的值相等但id可以不同 # False