08.用户交互、运算符
小蛙有话说环节
与诸君共勉,愿诸君明天依旧光芒万丈。好记性不如烂笔头,让我们一起努力。小蛙今天也是收获满满!!!
小声bb环节:我说的很小声你们应该听不见(你们要是不学习,本蛙可就要超过你们了)
1. 程序与用户交互
1.1. 什么是与用户交互
用户交互就是人往计算机中input/输入数据,计算机print/输出结果
1.2. 为什么要与用户交互
为了让计算机能够像人一样与用户沟通交流,比如,过去我们去银行取钱,用户需要把帐号密码告诉柜员,而现在,柜员被ATM机取代,ATM机就是一台计算机,所以用户同样需要将帐号密码告诉计算机,于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容,并且输出结果。
1.3. 如何与用户交互
交互的本质就是输入、输出
1.3.1. 输入input:
# 在python3中input功能会等待用户的输入,用户输入任何内容,都存成字符串类型,然后赋值给等号左边的变量名
username = input('请输入你的用户名:') #请输入你的用户名:wyz
password = input('请输入你的密码:') #请输入你的密码:123
print(username) #wyz
print(password) #123
1.3.2. 输出print
#每次只输出数一个值
print('你好')
#输出多个值用逗号隔开
print('ad','dfasdf','hello')
#默认print功能有一个end参数,该参数默认值为"\n"(换行符),可以将end参数的值改成其他任意字符
print('aaa',end='##')
print('bbb',end='&&&')
print('ccc',end='@@@')
#aaa##bbb&&&ccc@@@
1.3.3. 输出之格式化输出
-
什么是格式化输出
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出
-
为什么要格式化输出
我们经常会输出具有某种固定格式的内容,比如:'亲爱的xxx你好!你xxx月的话费是xxx,余额是xxx‘,我们需要做的就是将xxx替换为具体内容。
-
如何格式化输出?
这就用到了占位符,如:%s、%d,值按照位置与%s一一对应,少一个不行,多一个不行
#3.1 s%占位符:可以接收任意类型的值 # d%占位符:只能接收数字 print('亲爱的%s您好!您%s月的话费是%d,余额为%d'%('wyz',12,38,50)) #练习1:接受用户输入,打印成指定格式 name = input('请输入你的名字:') #请输入你的名字:wyz password = input('请输入你的年龄:') #请输入你的年龄:18 print('我的名字是%s,我的年龄为%s'%(name,password)) #我的名字是wyz,我的年龄为123 #因为用户输入18,会成字符串,无法传给%d res = "我的名字是%s,我的年龄是%s"%('wyz','15') #有位置限制 res = "我的名字是%(name)s,我的年龄是%(age)s"%{'name':'wyz','age':'15'} #%(key)s以字典形式传值,没有位置限制 print(res) #3.2 str.format:兼容性好 #按照位置传值 res = "我的名字是{},我的年龄是{}".format('wyz',18) print(res) # 我的名字是wyz,我的年龄是18 res1 = "我的名字是{0}{0},我的年龄是{1}{1}{1}".format('wyz',18) print(res1) # 我的名字是wyzwyz,我的年龄是181818 #打破未知的限制,按照key=value传值 推荐使用 res = "我的名字是{name},我的年龄是{age}".format(age=18,name='wyz') print(res) # 我的名字是wyz,我的年龄是18 #3.3 f:python3.5后才推出 name = input('请输入你的名字:') age = input('请输入你的年龄:') res = f'我的名字是{name},我的年龄为{age}' print(res) #我的名字是wyz,我的年龄为18 # 练习2:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式 ------------ info of Tony ----------- Name : Tony Age : 22 Sex : male Job : Teacher ------------- end ----------------- name = input('请输入姓名:') age = input('请输入年龄:') occupation = input('请输入工作:') hobbies = input('请输入爱好:') print('------------ info of %s -----------'%name) print('Name : %s'%name) print('Age : %s'%age) print('Sex : %s'%occupation) print('Hobbies : %s'%hobbies) print('------------- end -----------------')
2. 基本运算符
2.1. 算术运算符
- “+” 1 + 1 = 2
- “-” 2 - 1 = 1
- “*” 2 * 2 = 4
- “/” 3 / 2 = 1.5 相除后得到的返回值会保留整数与小数部分
- “//” 3 // 2 = 1 相除后得到得到整数部分
- “%” 3 // 2 = 1 取余,相除后只返回余数
- “**” 3 * * 2 = 9 幂,取一个数的n次方
2.2. 比较运算符
比较运算用来对两个值进行比较,返回的是布尔值True或False,我们以x=10,y=11为例来依次介绍它们
x = 10
y = 11
print(x==y) # False
print(x>=y) # False
print(x<=y) # True
print(x>y) # False
print(x<y) # True
print(x!=y) # True
2.3. 赋值运算符
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简。我们以x=10,y=11为例先来介绍一下增量赋值
2.3.1. 增量赋值
x += 1 # x += 1 相当于 x = x+1
x -= 1 # x -= 1 相当于 x = x-1
y *= 2 # y *= 1 相当于 y = y*1
y /= 13 # y /= 1 相当于 y = y/13
x //= 2 # x //= 2 相当于 x = x//2
x %= 2 # x %= 2 相当于 x = x%2
x **= 2 # x **= 2 相当于 x = x**2
2.3.2. 链式赋值
如果我们想把同一个值同时赋值给多个变量名,可以这么做
x = 10
y = x
z = y
m = z
print(x,y,z,m) # 10 10 10 10
链式赋值指的是可以用一行代码搞定这件事
x = y = z = m = 10
print(x,y,z,m) # 10 10 10 10
2.3.3. 交叉赋值
我们定义两个变量m与n
m=10
n=20
如果我们想将m与n的值交换过来,可以这么做
m = 10
n = 20
temp = m # 此时 temp = 10
m = n # 此时 m = 20
n = temp # 此时 n = 10
print(m,n) # 20 10
交叉赋值指的是一行代码可以搞定这件事
m,n = n,m #交叉赋值
print(m,n) # 20 10
2.3.4 解压赋值
如果我们想把列表中的多个值取出来依次赋值给多个变量名,可以这么做
salaries = [111,222,333,444,555]
a = salaries[0]
b = salaries[1]
c = salaries[2]
d = salaries[3]
e = salaries[4]
print(a)
print(b)
print(c)
print(d)
print(e)
解压赋值指的是一行代码可以搞定这件事
salaries = [111,222,333,444,555]
a,b,c,d,e = salaries
print(a) #111
print(b) #222
print(c) #333
print(d) #444
print(e) #555
注意,上述解压赋值,等号左边的变量名个数必须与右面包含值的个数相同,否则会报错
# 少一个会出错
a,b,c = salaries
print(a,b,c)
# ValueError: too many values to unpack (expected 3)
# 多一个也会出错
a,b,c,d,e,f = salaries
print(a,b,c,d,e,f)
# ValueError: not enough values to unpack (expected 6, got 5)
但是,可以取前三个
a,b,c,*_ = salaries
print(a,b,c) # 111 222 333
可以取后三个
*_,a,b,c = salaries
print(a,b,c) # 333 444 555
可以三个
a,*_,b,c = salaries
print(a,b,c)
但是不能只取中间的
ps:字符串、字典、元组、集合类型都支持解压赋值
dic = {'a':1,'b':2,'c':3}
A,B,C =dic
print(A,B,C)
#字典打印出来的是key值
2.4. 逻辑运算符
逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
- and 逻辑与,用于连接两个条件,两个条件同时成立时才返回True,但凡有一个条件为False则返回False
print(3 > 4 and 4 > 3)
False
- or 逻辑或,用于连接两个条件,两个条件但凡有一个成立就返回True,只有在两个同时为False时才返回False
print(3 > 4 or 4 > 3)
True
2.4.1. 连续多个and
可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果为False,只有在所有条件的结果都为True的情况下,最终结果才为True
print(2 > 1 and 1 != 1 and True and 3 > 2) # 判断完第二个条件,就立即结束,得的最终结果为False
False
2.4.2. 连续多个or
可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False
print(2 > 1 or 1 != 1 or True or 3 > 2) # 判断完第一个条件,就立即结束,得的最终结果为TrueTrue
2.4.3. 优先级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的左右两个条件给括起来,然后再进行运算'''>>> (3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3False #3、短路运算:逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回>>> 10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4我们用括号来明确一下优先级>>> (10 and 0) or ('' and 0) or 'abc' or ('egon' == 'dsb' and 333) or 10 > 4短路: 0 '' 'abc' 假 假 真返回: 'abc'#4、短路运算面试题:print(3 or 5) #3为真 短路运算不用继续向右运算,直接print输出3print(1 or 3) #1为真 短路运算不用继续向右运算,直接print输出1print(1 and 3) #1为真,3为真 短路运算(and)用继续向右运算,全为真才为真,print输出3print(0 and 1 and 3) #0为假 短路运算(连续and)不用继续向右运算,直接print输出0print(0 and 1 or 3) #3print(0 or False and 3) #False
2.5. 成员运算符
-
in:某一个对象包含另外一个对象则返回True字符串、列表、元组、字典、集合都支持成员运算
print('hello' in 'hello world' ) #Trueprint(123 in [123,'aaa',566]) #True# 字典判断的是 是否与key值相同print(123 in {'a':123 , 'b':456}) #False
-
not in:某一个对象没有包含于另外一个对象则返回True
print(123456 not in [123,'aaa',566])
注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为not in语义更加明确
print(not 123456 in [123,'aaa',566])print(123456 not in [123,'aaa',566])
结束收工环节
兄弟们,塞不塞,6不6,就是这么简单,就是这么快乐,今天小蛙细不细。愿诸君能在代码的世界里自由的翱翔。
兄弟萌是带着愤怒看完的吗,那就化悲愤为力量吧,点个赞再走呗。
喜欢的话,一定要去看本蛙其他作品哦,不喜欢的话,锤你。
本蛙要去舔啦,嗝。