Loading

python入门之与用户交互、运算符

一、程序与用户交互

1.1 什么是与用户交互

用户交互就是人往计算机中input/输入数据,计算机print/输出结果

1.2 为什么要与用户交互

为了让计算机像人一样和用户交流

例如,当你去ATM机上取钱,那ATM机需要提示你输入用户名和密码,如果密码正确,则告诉你登录成功,如果密码错误,则告诉你失败。

1.3 如何与用户交互

交互的本质就是输入和输出的过程

# 输入
name = input('请输入你的用户名:')  # 请输入你的登录名
age = input('请输入你的年龄:')  # 请输入你的年龄
 
# 输出
print(name)  # 输出用户名
print(age)  # 输出年龄

1.3.1 输入input

# 在python3中input功能会等待用户的输入,用户输入任何内容,都存成字符串类型,然后赋值给等号左边的变量名
>>> username=input('请输入您的用户名:')
请输入您的用户名:jack # username = "jack"
>>> password=input('请输入您的密码:')
请输入您的密码:123 # password = "123"
 
# 了解知识:
# 1、在python2中存在一个raw_input功能与python3中的input功能一模一样
# 2、在python2中还存在一个input功能,需要用户输入一个明确的数据类型,输入什么类型就存成什么类型
>>> l=input('输入什么类型就存成什么类型: ')
输入什么类型就存成什么类型: [1,2,3]
>>> type(l)
<type 'list'>

1.3.1 输出print

>>> print('hello world')  # 只输出一个值
hello world
>>> print('first','second','third')  # 一次性输出多个值,值用逗号隔开
first second third
 
# 默认print功能有一个end参数,该参数的默认值为"\n"(代表换行),可以将end参数的值改成任意其它字符
print("aaaa",end='')
print("bbbb",end='&')
print("cccc",end='@')
#整体输出结果为:aaaabbbb&cccc@

1.3.3 输出之格式化输出

把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出

1.3.3.1 占位符格式化输出

占位符类型的格式化输出有%s和%d

%s可以接收任意类型的变量

name = 'sean'
age = 50
 
print('my name is %s,my age is %s.' % (name, age))  # 利用占位符格式化输出
my name is sean,my age is 50.
 
# 尝试调换括号里面的数值
print('my name is %s,my age is %s.' % (age, name))
my name is 50,my age is sean.  # 发现结果也更改了

%d只能接收数字类型的变量

name = 'sean'
age = 50
 
print('my name is %s,my age is %s.' % (name, age))  # 利用占位符格式化输出
my name is sean,my age is 50.
 
# 尝试调换括号里面的数值
print('my name is %s,my age is %s.' % (age, name))
my name is 50,my age is sean.  # 发现结果也更改了

1.3.3.2 .format()方法

name = input('请输入你的名字:')
age = input('请输入你的年龄:')
 
print('my name is {},my age is {}.'.format(name, age))
my name is kody,my age is 21.
 
# 尝试更换后面的name和age位置,看前面传入的值是否会调换位置
print('my name is {},my age is {}.'.format(age, name))
my name is 21,my age is kody.  # 值得位置确实调换了
 
# 思考,如何让值得位置不受name和age接收的限制?
print('my name is {names},my age is {ages}.'.format(ages=age, names=name))
请输入你的名字:kody
请输入你的年龄:21
my name is kody,my age is 21.

1.3.3.3 f-string方法

此方法是在python3.6以后才有的新特性

name = input('请输入你的名字:')
age = input('请输入你的年龄:')
 
print(f'my name is {name}, my age is {age}.')
请输入你的名字:kody
请输入你的年龄:21
my name is kody, my age is 21.

1.3.3.4 扩展:保留几位小数

保留两位小数

a = 12345.2487
 
print('%.2f' % a)
12345.25

保留三位小数

a = 12345.2487
print('%.3f' % a)
 
12345.249

1.4 python2和python3中input的区别

1.4.1 python3中的input()

python3中input接收用户的输入,无论用户输入的是什么,最终返回的一定是字符串

name = input('请输入你的用户名:')
age = input('请输入你的年龄:')
 
print(name)
print(type(name))  # 打印name的类型
print(age)
print(type(age))  # 打印age的类型
 
请输入你的用户名:kody
请输入你的年龄:21
kody
<class 'str'>  # 姓名返回的是字符串
21
<class 'str'>  # 年龄返回的是字符串
 
Process finished with exit code 0

1.4.2 python2中的input()

python2中,我们使用input函数必须先声明要输入的类型

>>> name = input("请输入你的姓名:")
请输入你的姓名:sean  # 直接输入姓名,发现下面报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'sean' is not defined
>>> input("请输入你的姓名:")
请输入你的姓名:"sean"  # 在输入的时候加上双引号,声明输入内容为字符串
'sean'  # 没有报错,正常输出,返回的结果为字符串
 
>>> input(">>:")
>>:1  # 直接输入数字1
1  # 返回结果为数字类型
 
>>> input(">>:")
>>:[1,2]  # 输入列表
[1, 2]  # 返回结果为列表

python2中的raw_inputpython3input()作用相同,返回结果是字符串

>>> raw_input(">>:")
>>:sean  # 输入sean
'sean'  # 返回结果为字符串
 
>>> raw_input(">>:")
>>:12  # 输入数字
'12'  # 返回结果为字符串

1.4.3 总结

python2中的raw_inputpython3input作用相同 **

二、基本运算符

2.1 算数运算符

基本的加减乘除和数学上的加减乘除使用符号是一致的

# // 取整
>>> 9 // 3
3
>>> 9 // 2
4
>>>
 
# % 取模(取余数)
>>> 9 % 3
0
>>> 9 % 2
1
>>>
 
# ** 求平方
>>> 2 ** 2
4
>>> 2 ** 3
8

2.2 比较运算符

用来对两个值进行比较,返回的是bool值

2.3、赋值运算符

2.3.1 增量赋值

# +=
a = 1
a += 3  # a = a + 3
print(a)
4
 
# -=
a = 1
a -= 1  # a = a -1
print(a)
0
 
# *=
a = 2
a *= 3  # a = a * 3
print(a)
6
 
# /=
a = 4
a /= 2  # a = a / 2
print(a)
2

2.3.2 链式赋值

x = y = z = 1
print(x, y, z)
1 1 1

2.3.3 交叉赋值

a = 1
b = 2
a, b = b, a
print(a, b)
2 1

2.3.4 解压赋值

l1 = [1, 2, 3, 4, 5, 6]
a, b, c, d, e, f = l1
print(a, b, c, d, e, f)
1 2 3 4 5 6
 
# 当我们的字母没有数字多呢?
l1 = [1, 2, 3, 4, 5, 6]
a, b, c, d = l1
print(a, b, c, d)  # 报错
 
Traceback (most recent call last):
  File "G:/python项目/test/test.py", line 2, in <module>
    a, b, c, d = l1
ValueError: too many values to unpack (expected 4)
 
# 如何解决?在后面添加*_
l1 = [1, 2, 3, 4, 5, 6]
a, b, c, d, *_ = l1
print(a, b, c, d)
1 2 3 4
 
# 在前面添加*_
l1 = [1, 2, 3, 4, 5, 6]
*_, a, b, c, d = l1
print(a, b, c, d)
3 4 5 6

2.4 逻辑运算符

逻辑运算符返回的也是bool值

"""
与 或 非
 
and or not
"""
 
a = 1
b = 2
c = 3
 
print(a < b and b > c)  # and:如果有一个式子不符合条件,整条式子都为False
print(a > b and b < c)
 
print(a < b or b < c)   # or:只要有一个式子符合条件,整条式子都为True
print(a > b or b < c)
 
print(not a < b)  # 取反
 
print(a < b and b < c or a > c)  # True
 
print(a > b or b < c and a > c)  # False

2.4.1 连续多个and

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

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

2.4.2 连续多个or

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

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

2.4.3 混用and、or、not

not > and > or

三者混用,需要按照优先级和短路操作符(惰性求值)来运算

逻辑操作符and 和or 也称作短路操作符(short-circuitlogic)或者惰性求值(lazy evaluation):它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果A 和C 为真而B 为假, A and B and C 不会解析C 。作用于一个普通的非逻辑值时,短路操作符的返回值通常是最后一个变量。因此,逻辑运算符的理解也与C语言中不同。举个例子:

>>> 3 and 4
4
>>> 4 and 3
3
>>> 4 or 3
4
>>> 3 or 4
3

在以上例子中,按照C语言对的思维,3 and 4即3与4为3,但是由于是短路操作符,结果为4,是因为and运算符必须所有的运算数都是true才会把所有的运算数都解析,并且返回最后一个变量,即为4;改变一下顺序4 and 3 ,结果也不一样,即为3.

简而言之:

多个and条件下都为True,就返回最后一个值

多个and条件下若是有一个False,就返回False

而或逻辑(or),即只要有一个是true,即停止解析运算数,返回最近为true的变量,即 3 or 4,值为3;改变顺序4 or 3 即为4.

简而言之:

多个or条件下都为True,就返回第一个值

多个or条件下若是有一个True,就返回True

2.5 成员运算符

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

2.6 身份运算符

需要强调的是:==双等号比较的是value是否相等,而is比较的是i是否相等

#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

2.7 所有运算符的优先级比较

posted @ 2019-11-02 19:06  开花的马铃薯  阅读(328)  评论(0编辑  收藏  举报