用户交互&运算符
一 、程序与用户交互
什么是与用户交互
用户交互就是人往计算机中input/输入数据,计算机print/输出结果
交互的本质就是输入、输出
在Python3中,input会将用户输入的所有内容都存成str类型
在python2中,raw_input():用法与python3的input一模一样,input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类
int只能将纯数字的字符串转成整型
什么是格式化输出?
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出
为什么要格式化输出?
我们经常会输出具有某种固定格式的内容,比如:'亲爱的xxx你好!你xxx月的话费是xxx,余额是xxx‘,我们需要做的就是将xxx替换为具体的内容
如何格式化输出?
这就用到了占位符,如:%s(所有类型值通用)、%d:
1、方法一: %
值按照位置与%s一一对应,少一个不行,多一个也不行
res="my name is %s my age is %s" %('lucky',"18")
res="my name is %s my age is %s" %("18",'lucky')
res="my name is %s" %"lucky"
print(res)
以字典的形式传值,打破位置的限制
res="我的名字是 %(name)s 我的年龄是 %(age)s" %{"age":"18","name":'lucky'}
print(res)
%s可以接收任意类型
print('my age is %s' %18)
print('my age is %s' %[1,23])
print('my age is %s' %{'a':333})
print('my age is %d' %18) # %d只能接收int
print('my age is %d' %"18")
2、方法二:str.format (兼容性好,在python2.6版本时候推出,所以兼容python2和python3,推荐使用)
按照位置传值
res='我的名字是 {} 我的年龄是 {}'.format('egon',18)
print(res)
res='我的名字是 {0}{0}{0} 我的年龄是 {1}{1}'.format('egon',18)
print(res)
打破位置的限制,按照key=value传值
res="我的名字是 {name} 我的年龄是 {age}".format(age=18,name='egon')
print(res)
四舍五入
print('{salary:.3f}'.format(salary=3.1415926)) #3.142 精确到小数点后三位
3、方法三:f (在python3.5以后推出,最简单)
x = input('your name: ')
y = input('your age: ')
res = f'我的名字是{x} 我的年龄是{y}'
print(res)
# f 新用法:{}内的字符串可以被当做表达式运行
res = f'{10+3}'
print(res)
f'{print("aaa")}' #执行print命令,打印出aaa
填充与格式化
# 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
# *<10:左对齐,总共10个字符,不够的用*号填充
print('{0:*<10}'.format('开始执行')) # 开始执行******
# *>10:右对齐,总共10个字符,不够的用*号填充
print('{0:*>10}'.format('开始执行')) # ******开始执行
# *^10:居中显示,总共10个字符,不够的用*号填充
print('{0:*^10}'.format('开始执行')) # ***开始执行***
精度与进制
print('{salary:.3f}'.format(salary=1232132.12351)) #精确到小数点后3位,四舍五入,结果为:1232132.124
print('{0:b}'.format(123)) # 转成二进制,结果为:1111011
print('{0:o}'.format(9)) # 转成八进制,结果为:11
print('{0:x}'.format(15)) # 转成十六进制,结果为:f
print('{0:,}'.format(99812939393931)) # 千分位格式化,结果为:99,812,939,393,931
运算符
1、算数运算符
print(10 + 3.1)
print(10 + 3)
print(10 / 3) # 结果带小数
print(10 // 3) # 只保留整数部分
print(10 % 3) # 取模、取余数
print(10 ** 3) # 取模、取余数
2、比较运算符: >、>=、<、<=、==、!=
print(10 > 3)
print(10 == 10)
print(10 >= 10)
print(10 >= 3)
name=input('your name: ')
print(name == 'egon')
3、赋值运算符
3.1 =:变量的赋值
取模运算:求两个数相除的余数
x =10%3
3.2 增量赋值:
age = 18
age += 1 # age=age + 1
print(age)
age*=3
age/=3
age%=3
age**=3 # age=age**3
3.3 链式赋值
x=10
y=x
z=y
z = y = x = 10 # 链式赋值
print(x, y, z)
print(id(x), id(y), id(z))
3.4 交叉赋值
m=10
n=20
print(m,n)
交换值
temp=m
m=n
n=temp
print(m,n)
m,n=n,m # 交叉赋值
print(m,n)
3.5 解压赋值
salaries=[111,222,333,444,555]
把五个月的工资取出来分别赋值给不同的变量名
mon0=salaries[0]
mon1=salaries[1]
mon2=salaries[2]
mon3=salaries[3]
mon4=salaries[4]
# 解压赋值
mon0,mon1,mon2,mon3,mon4=salaries
print(mon0)
print(mon1)
print(mon2)
print(mon3)
print(mon4)
mon0,mon1,mon2,mon3=salaries # 对应的变量名少一个不行
mon0,mon1,mon2,mon3,mon4,mon5=salaries # 对应的变量名多一个也不行
引入*,可以帮助我们取两头的值,无法取中间的值
# 取前三个值
x,y,z,*_=salaries=[111,222,333,444,555] # *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_
print(x,y,z)
print(_)
# 取后三个值
*_,x,y,z=salaries=[111,222,333,444,555]
print(x,y,z)
x,*_,y,z=salaries=[111,222,333,444,555]
print(x,y,z)
salaries=[111,222,333,444,555]
_,*middle,_=salaries
print(middle)
# 解压字典默认解压出来的是字典的key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z)