第九章 python语法入门之与用户交互、运算符

一、程序和用户交互

# 1.什么是与用户交互
用户交互就是人往计算机中input/输入数据,计算机print/输出结果

# 2.为什么要与用户交互?
为了让计算机能够像人一样与用户沟通交流

比如,过去我们去银行取钱,用户需要把帐号密码告诉柜员,而现在,柜员被ATM机取代,ATM机就是一台计算机,所以用户同样需要将帐号密码告诉计算机,于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容,并且输出结果

# 3.如何与用户交互
交互的本质就是输入、输出

# 4.输入input:
# 在python3中input功能会等待用户的输入,用户输入任何内容,都存成字符串类型,然后赋值给等号左边的变量名
>>> username=input('请输入您的用户名:') 
请输入您的用户名:jack # username = "jack"
>>> password=input('请输入您的密码:') 
请输入您的密码:123 # password = "123"

# 5.了解知识:
# 1、在python2中存在一个raw_input功能与python3中的input功能一模一样
# 2、在python2中还存在一个input功能,需要用户输入一个明确的数据类型,输入什么类型就存成什么类型
>>> l=input('输入什么类型就存成什么类型: ')
输入什么类型就存成什么类型: [1,2,3]
>>> type(l)
<type 'list'>
1.3.2 输出print:

>>> print('hello world')  # 只输出一个值
hello world
>>> print('first','second','third')  # 一次性输出多个值,值用逗号隔开
first second third

# 默认print功能有一个end参数,该参数的默认值为"
"(代表换行),可以将end参数的值改成任意其它字符
print("aaaa",end='')
print("bbbb",end='&')
print("cccc",end='@')
#整体输出结果为:aaaabbbb&cccc@

二、输出之格式化输出

1.格式化输出概念

# 1.什么是格式化输出?
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出。

# 2.为什么要格式化输出?
我们经常会输出具有某种固定格式的内容,比如:'亲爱的xxx你好!你xxx月的话费是xxx,余额是xxx‘,我们需要做的就是将xxx替换为具体的内容。

# 3.如何格式化输出?
这就用到了占位符,如:%s、%d:
# %s占位符:可以接收任意类型的值
# %d占位符:只能接收数字
>>> print('亲爱的%s你好!你%s月的话费是%d,余额是%d' %('tony',12,103,11))
亲爱的tony你好!你12月的话费是103,余额是11

2.占位符运用

# 1.值按照位置与%s一一对应,少一个不行,多一个也不行
res="my name is %s my age is %s" %('jh',"18")
res="my name is %s my age is %s" %("18",'jh')
res="my name is %s" %"jh"
print(res)

# 2.以字典的形式传值,打破位置的限制
res="我的名字是 %(name)s 我的年龄是 %(age)s" %{"age":"18","name":'jh'}
print(res)

# 3.%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")

# 4.练习一:接收用户输入,打印成指定格式
name = input('your name: ')
age = input('your age: ') #用户输入18,会存成字符串18,无法传给%d
print('My name is %s,my age is %d' %(name,age))

name = input('your name: ')
age = input('your age: ') #用户输入18,会存成字符串18,无法传给%d
age=int(age)
print('My name is %s,my age is %d' %(name,age))
    
# 5.练习二:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Tony -----------
Name  : Tony
Age   : 22
Sex   : male
Job   : Teacher 
------------- end -----------------

name=input("请输入你的姓名:")
age=input("请输入你的年龄:")
sex=input("请输入你的性别:")
job=input("请输入你的工作:")
print('------------ info of %s -----------' %(name))
print('Name  : %s' %(name))
print('Age  : %s' %(age))
print('Sex  : %s' %(sex))
print('Job  : %s' %(job))
print('------------- end -----------------')

3.str.format

# str.format:兼容性好
# 按照位置传值
res='我的名字是 {} 我的年龄是 {}'.format('jh',18)
print(res)

res='我的名字是 {0}{0}{0} 我的年龄是 {1}{1}'.format('jh',18)
print(res)

# 打破位置的限制,按照key=value传值
res="我的名字是 {name} 我的年龄是 {age}".format(age=18,name='jh')
print(res)

4.填充与格式化

# 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
# *<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

# f:python3.5以后才推出
x = input('your name: ')
y = input('your age: ')
res = f'我的名字是{x} 我的年龄是{y}'
print(res)

三、基本运算符

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 == 'jh')

3.赋值运算符

# 赋值运算符
# =:变量的赋值
# 1.增量赋值:
age = 18
# age += 1  # age=age + 1
# print(age)
#
# age*=3
# print(age)
# age/=3
# age%=3
age**=3 # age=age**3
print(age)

# 2.链式赋值
x=10
y=x
z=y
z = y = x = 10 # 链式赋值
print(x, y, z)
print(id(x), id(y), id(z))

# 3.交叉赋值
m=10
n=20
# print(m,n)
# 交换值
# temp=m
# m=n
# n=temp
# print(m,n)

# m,n=n,m # 交叉赋值
# print(m,n)

# 4.解压赋值
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)

四、逻辑运算符

# 逻辑运算符
逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False

# 1.连续多个and
可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。

>>> 2 > 1 and 1 != 1 and True and 3 > 2 # 判断完第二个条件,就立即结束,得的最终结果为False
False

# 2.连续多个or
可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False

>>> 2 > 1 or 1 != 1 or True or 3 > 2 # 判断完第一个条件,就立即结束,得的最终结果为True
True

# 3.混用and、or、not
# and、or、not三者如果混用时,是存在优先级之分的,但在日常开发中我们无需记忆优先级,应该使用()来区分优先级、提升程序的可读性
>>> (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
False 

五、成员运算符

# 成员运算符
注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为not in语义更加明确

>>> not 'lili' in ['jack','tom','robin']
True
>>> 'lili' not in ['jack','tom','robin']
True

六、身份运算符

# 身份运算符
需要强调的是:==双等号比较的是value是否相等,而is比较的是id是否相等

#1. id相同,内存地址必定相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Tony:18'
>>> y='Info Tony:18'
>>> id(x),id(y) # x与y的id不同,但是二者的值相同
(4327422640, 4327422256)


>>> x == y # 等号比较的是value
True
>>> type(x),type(y) # 值相同type肯定相同
(<class 'str'>, <class 'str'>)
>>> x is y # is比较的是id,x与y的值相等但id可以不同
False
原文地址:https://www.cnblogs.com/jhno1/p/15095687.html