与用户交互、格式化输出、基本运算符
一、程序与用户交互
1.1什么是与用户交互
用户交互就是人往计算机中input/输入数据,计算机print/输出结果
1.2为什么要与用户交互
为了让计算机能够像人一样与用户沟通交流
比如,过去我们去银行取钱,用户需要把帐号密码告诉柜员,而现在,柜员被ATM机取代,ATM机就是一台计算机,所以用户同样需要将帐号密码告诉计算机,于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容,并且输出结果
1.3如何与用户交互
交互的本质就是输入、输出
1.3.1输入input:
password = input('请输入你的密码:>>>')
print(password, type(password)) # input接受的所有数据类型都是str类型
# print(password == '123') # 会报错,因为python中==比较的是数据值和数据类型
# 整型和字符串的相互改变
print(int(password) == 123)
print(password == str(123))
1.3.2输出print
print(value, ..., sep=' ', end=' ', file=sys.stdout, flush=False)
sep:seperator,分隔符,默认是空格
end:print会自动换行,end='',取消自动换行
print(123)
print(456)
#输出 123
#输出 456
print(123, end='')
print(456)
#输出 123456
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Tony -----------
Name : Tony
Age : 22
Sex : male
Job : Teacher
------------- end -----------------
name = input('Name : ')
age = input('Age : ')
sex = input('Sex : ')
job = input('Job : ')
print(
'-' * 12, 'info of %s' % (name), '-' * 11,
'\nName : %s'
'\nAge : %s'
'\nSex : %s'
'\nJob : %s'
% (name, age, sex, job),
'\n', '-' * 13, "end", '-' * 17
)
二、格式化输出
2.1什么是格式化输出?
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出。
2.2为什么要格式化输出?
我们经常会输出具有某种固定格式的内容,比如:'亲爱的xxx你好!你xxx月的话费是xxx,余额是xxx‘,我们需要做的就是将xxx替换为具体的内容。
2.3占位符
# %s称为占位符(掌握)可以为所有的数据类型占位
res = '亲爱的%s你好!你%s月的话费是%s,余额是%s,我们需要做的就是将xxx替换为具体的内容。'
print(res % ('kevin', 2, 46, 99999999))
print(res % ('kevin1', 2, 57, 100))
print(res % ('kevin2', 2, 33, 1199999))
res1 = 'my name is %s'
print(res1 % 'tony')
# %d占位符(了解)只能给数字类型占位
print("金额:%08d" % 111)
print("金额:%08d" % 666666)
print("金额:%08d" % 99999999999)
三、基本运算符
3.1算术运算符
以下假设变量: a=10,b=20:
3.2比较运算符
3.3赋值运算符
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简
3.3.1增量赋值
3.3.2链式赋值
x = 10
y = x
z = y
x, y, z
#输出(10, 10, 10)
3.3.3交叉赋值
m = 10
n = 20
n, m = m, n # m, n是转换成元组(10 ,20)的形式
print(n,m)
#输出(10, 20)
t = 1, 2 # 即是t=(1,2)
print(type(t))
#输出<class 'tuple'>
3.3.4解压赋值(重点)
原理:将后面的数据按照顺序分别赋值给前面,所以左右两边的个数必须一致,少了或者多了就会报错
names_list = ['kevin', 'tony', 'tank', 'tom']
l1 = names_list[0] # 分别取出列表中的数据
l2 = names_list[1]
l3 = names_list[2]
l4 = names_list[3]
print(l1, l2, l3, l4) # 这样的方式比较麻烦
# ll1, ll2, ll3, ll4 = ['kevin', 'tony', 'tank', 'tom']
ll1, ll2, ll3, ll4 = names_list
print(ll1, ll2, ll3, ll4)
列表中有大量元素,只取前面几位或者后面几位的方法,可以用*_匹配(了解)
原理:把列表中第一个'kevin'赋值给l1,最后一个'tom',赋值给l4,剩下中间的元素全部赋值给星号后面的变量
l1, *a, l4 = ['kevin', 'tony', 'tank','a','b', 'tom']
print(l1, a, l4)
#输出kevin ['tony', 'tank', 'a', 'b'] tom
ll1, *a, ll3, ll4 = ['kevin', 'tony', 'tank','a','b', 'tom']
print(ll1, a, ll4)
#输出kevin ['tony', 'tank', 'a'] tom
3.4逻辑运算符
3.4.1and 与
可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。
2 > 1 and 1 != 1 and True and 3 > 2 # 判断完第二个条件,就立即结束,得的最终结果为False
#输出False
3.4.2or 或
可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False
2 > 1 or 1 != 1 or True or 3 > 2 # 判断完第一个条件,就立即结束,得的最终结果为True
#输出True
3.4.3not 非(取反)
混用and、or、not
优先级not>and>or(最好使用括号来区分优先级)
3.5成员运算符
判断某个个体是否在某个群体中,可以是字符串,列表或元组
符号:in(在) not in(不在)
name_list = ['kevin', 'jack', 'tony', 'tom']
print('kevin' in name_list)
#输出True
print('kevin' not in name_list)
#输出False
print('aaa' not in name_list)
#输出True
print('bbb' in name_list)
#输出False
# 判断某个字符串是否在另一个字符串中:
print('k' in 'kevin')
#输出True
print('hello' in 'helloworld')
#输出True
3.6身份运算符
比较两个对象的存储单元,判断两个值是否相等
符号: is is not
is和==的区别:
值相等的内存地址不一定相等,内存地址相等的值一定相等
# is(比较的是内存地址) ==(比较的是值)
s1 = ['a', 'b', 'c']
s2 = ['a', 'b', 'c']
print(s1 == s2)
#输出True
print(id(s1))
print(id(s2)) #id是不相同的
print(s1 is s2)
#输出False