目录
3)一个 print() 输出多项内容,则需要在输入时每项内容使用逗号分开
前言:
本篇文章讲解以下三个内容:
1.输入
2.输出
3.运算符文章中会涉及后面的内容,可以先记住用法,再慢慢理解~
一、输入——input()函数
1.输入
Python 提供了 input(“提示”) 函数用于读取键盘输入,返回值为字符串。
eg:
>>> user = input("请输入1,进入登录界面:")
请输入1,进入登录界面:1
>>> user
'1'
>>> type(user)
<class 'str '>
注意:
input() 函数会一直阻塞,等待用户输入,并回车
不论输入什么,类型都是字符串
二、输出
1.平平无奇的print
Python 提供了 print() 函数用于打印输出。
1)种瓜得瓜,种豆得豆
print(type(25))
选:B
2)print() 默认以换行结束
eg:打印输出 2 次 "hello world"(换行输出)
print("hello world")
print("hello world")
3)一个 print() 输出多项内容,则需要在输入时每项内容使用逗号分开
eg:在 Pycharm 中打印输出 2 次 "hello world" (同行输出)
print("hello world","hello world")
2.深藏不露的print
详细语法:print(sep=' ', end='\n')
-
end:为 print() 函数的结束符,默认为 \n 换行符。
-
sep:为 print() 函数的分隔符,默认为空格字符串。
eg:现有数据如下:
s="我的名字叫"
name="中国"
使用一个 print() 打印输出 "我的名字叫:中国!" (必须使用 s 与 name)
s="我的名字叫"
name="中国"
print(s, name, sep=":", end="!")
三、运算符
1.算术运算符
1)语法
假设 x = 2,y = 4
运算符 | 描述 | 实例 | 注意 |
---|---|---|---|
+ | 加 | x+y 输出结果为 6 | 无 |
- | 减 | x-y 输出结果为 -2 | 无 |
* | 乘 | x*y 输出结果为 8 | 无 |
/ | 除 | x/y 输出结果为 0.5 | 结果为浮点数 |
// | 整除 | x//y 输出结果为 0 | 只取整数部分,且向下取整 |
% | 取余 | x%y 输出结果为 2 | 无 |
** | 幂 | x**y 输出结果为 16 | 无 |
注意1:/ 计算不精准
其实不光是/计算不准确,所有浮点数之间的计算都会出现计算结果不准确的问题
>>> 10/3
# 输出:3.3333333333333335
现象:运算的结果不准确
原因:因为 计算机内存 与 CPU 的有穷性 导致使用运算符计算并不精准。解决:使用 Decimal 函数精确计算。
# 了解:解决浮点数精度问题,借助Decimal()函数
# 模块:需要导入才能使用
# 从 decimal 模块中 导入 Decimal 方法
from decimal import Decimal
print(Decimal(10)/Decimal(3))
# 输出:3.333333333333333333333333333
# 注意:Decimal函数传入的浮点数必须加引号,表示以字符串形式传入
from decimal import Decimal
print(0.1+0.2)
print(Decimal(0.1)+Decimal(0.2))
print(Decimal('0.1')+Decimal('0.2'))
输出:
注意2:// 向下取整
运算符//的运算结果遵循向下取整的规则
print(3//2) #1
注意3:/ 运算结果为浮点数
print(8/2) #4.0
判断奇偶性:除以2,结果为0 -- 偶数,结果为1 -- 奇数
# print(x/2)
取余和整除---负数
先看代码:
print(10 % 3)
print(-10 % 3)
print(10 % -3)
print(-10 % -3)
运行结果:
10%3=1 这个结果是最好理解的,而其他的结果需要通过整除理解,x%y的结果为x除以y的余数,就是x整除y后的余数。
在数学里,"负数取余"遵循的是:
如果 a 与 d 是整数,d 非零,那么余数 r 满足 a = q * d + r, q 为整数,且 0 <= |r| < |d|。
在计算机语言中,
1,同号的整数运算,所有语言都遵循尽量让商小的原则,所以 12 mod 5 和 -12 mod -5 是一样的方式,结果差一个符号,分别是 2 和 -2 。
2,异号的整数运算,C 和 Java 都是尽可能让商 d 更大[1] (例如 -12 mod 5 的结果对应的是商 d = -2,余 r = -2),而 Python 则是会让商尽可能的小(例如 -12 mod 5 的结果对应的是商 d = -3,余 r = 3)。
取余的实现是建立在整除的基础上的
x % y = x − ( ( x // y ) ∗ y )
2.比较(关系)运算符
1)语法
假设 x = 2,y = 4
运算符 | 描述 | 实例 | 注意 |
---|---|---|---|
== | 等等于 | x==y 输出结果为 Fales | 比较数值大小 |
!= | 不等于 | x!=y 输出结果为 True | 无 |
> | 大于 | x>y 输出结果为 False | 无 |
< | 小于 | x<y 输出结果为 True | 无 |
>= | 大于等于 | x>=y 输出结果为False | 无 |
<= | 小于等于 | x<=y 输出结果为True | 无 |
注意:
<> 运算符已弃用
数值只比较大小
print(1 == 1.0) True
字符串与字符串比较的口诀:逐一比较,且比较的是 ASCII 值
#字符串比较大小,先比较字符串的第一个元素,谁第一个元素大它就大,如果一样,再比较第二个,以此类推 print("123"<"124") #True print("123"<"1") #False print('AB'<'Aa') #True print('C'<'') #False
注意:这里是' '是空字符
4.>= <=符号中间不能有空格
24 < =25 报错
5.连续比较
# 24<=28<25等价于24<=28 and 28<25,最终返回结果为Fasle
3.赋值运算符
1)语法
假设 x = 2,y = 4
运算符 | 描述 | 实例 | 注意 |
---|---|---|---|
= | 赋值 | y=x 是将x的值赋给y,则y为2 | 无 |
+= | 加法赋值运算符 | y+=x 等效于y=y+x,则y为6 | 无 |
-= | 减法赋值运算符 | y-=x 等效于y=y-x,则y为2 | 无 |
*= | 减法赋值运算符 | y*=x 等效于y=y*x,则y为8 | 无 |
/= | 除法赋值运算符 | y/=x 等效于y=y/x,则y为2.0 | 无 |
%= | 取模(余)赋值运算符 | y%=x 等效于y=y%x,则y为0 | 无 |
**= | 幂赋值运算符 | y**=x 等效于y=y**x,则y为16 | 无 |
//= | 取整除赋值运算符 | y//=x 等效于y=y//x,则y为2 | 无 |
注意:
Python 不支持 y++ 语法,即自增和自减
+= 符号中间不能有空格
注意1:赋值运算符的执行顺序是从右到左
# 复合赋值运算符 +=,一定是先算复合赋值运算符右侧的表达式 如a = 2 a *= 1 + 1 最终a的值为4 # h+=1 # 报错 h = h + 1 h+1错误,h还没被定义
4.逻辑运算符
1)语法
假设 x = 2,y = 4
运算符 | 描述 | 实例 | 注意 |
---|---|---|---|
and | 布尔“与” | x and y -> x的布尔值 与 y的布尔值 都为True时,结果为True | 无 |
or | 布尔“或” | x or y -> x的布尔值 与 y的布尔值 有一个为True时,结果为True | 无 |
not | 布尔“非” | not x -> x 的布尔值为True,则not x 结果为False,反之同理 | 无 |
#数值只要不是0,布尔值就是True
print(bool(5)) #True
print(bool(0)) #False
# 字符串只要不是空字符串,布尔值就是True
print(bool("")) #False
print(bool(" ")) #True
注意:短路(懒惰)原则
False and True #懒惰,当and运算符时,遇到第一个为False则不会往后了
True or False #懒惰,当or运算符时,遇到第一个为True则不会往后了
print(10 or 15) #10
注意1:and or 非布尔值的运算问题
print("temp" == 'Yes' or 'yes') # 返回yes
存在两个运算符,分别是,比较运算符“==”和逻辑运算符“or”,在运算符优先级中比较运算符的优先级要比逻辑运算符的高,会先进行"temp" == 'Yes'的运算,而'=='是比较两个变量内存中的值是否一致的,一个是temp一个是Yes,很显然他们不一致,返回的值为False;剩下的就是False or 'yes',根据or的运算规律,当两边的条件都为False的时候才返回False,只要有一边为True就会返回一个True,由于逻辑运算符的惰性机制,当or判断第一个条件为True的时候,本就可以得出最后的结果,程序就不会再去判断后面的运算正确与否但是,当第一个条件为False不知道最终的结果是什么,就会判断后面的一个条件是否正确,最后得出结果,但如果参与运算的有非布尔值,就会优先输最后判断位置所在的非布尔值,通过字符串的相关知识我们知道,除了空字符串的布尔值为False,其他字符的布尔值都为True,所以最终的结果为'yes'
print(1 and 2) # 2
print(0 and 2) # 0
print(True and 2 ) # 2
print(False and 3) # False
print('a' == 'a' or 'b') # True
print('a' or 'b') # a
5.成员运算符
1)语法
假设 x = 2,y = [1,2,3,4]
运算符 | 描述 | 实例 | 注意 |
---|---|---|---|
in | 在 | x in y -> 表示2在[1,2,3,4]中,返回 True | 无 |
not in | 不在 | x not in y -> 表示2不在[1,2,3,4]中,返回False | 无 |
all_name = ["张三","李四","王五",]
name = input("请输入学生的姓名:")
print(name in all_name)
注意1:# not in in 不能用在数值身上
# print(1 int 112) # 报错
注意2:
6.身份运算符
1)语法
假设 x = 10000,y = 10000
运算符 | 描述 | 实例 |
---|---|---|
is | 判断标识符是否引自同一个对象 | x is y -> 判断的是 id(x)==id(y) 是否为 True |
is not | 判断标识符是否引自不同对象 | x is not y -> 判断的是 id(x) is not id(y) 是否为True |
print(1 is 1.0) #False
print(1 == 1.0) #True
print(id(1) == id(1.0)) #False
注意:is 与 == 的区别
== 比较的是值
is 比较的是否引用同一个对象
7.三目运算符
1)语法
三目运算符的表示语法: 表达式为 True 执行的代码 if 表达式 else 表达式为 False 执行的代码
eg:
x = 1
y = 2
print(x) if x else print(y) #True
8.位运算符
假设 x = 3 , y = 2
运算符 | 描述 | 实例 |
---|---|---|
& | AND 按位与运算 x & y,将 x 和 y 的对应二进制位进行与运算并返回 | 3 =>> 11 2 =>> 10 (11)&(10) = 10 = 2 |
| | OR 按位或运算 x | y,将 x 和 y 的对应二进制位进行或运算并返回 | 3 =>> 11 2 =>> 10 (11)|(10) = 11 = 3 |
^ | XOR 按位异或运算x ^ y,将 x 和 y 的对应二进制位进行异或运算并返回 | 3 =>> 11 2 =>> 10 (11)^(10) = 01 = 1 |
~ | NOT 按位取反运算 ~x,将 x的对应二进制位进行取反运算并返回 | 3 =>> 11 ~3 = 00 = 0 |
<< | Zero fill left shift 左移运算 x << y,将 x 的对应二进制位左移 y 位并返回 | 3的二进制11,向左移动2位后1100 = 12 |
>> | Signed right shift 右移运算 x >> y,将 x 的对应二进制位右移 y 位并返回 | 3的二进制11,向右移动2位后00 = 0 |
9.运算符优先级
1)定义
Python 支持几十种运算符,有的运算符优先级不同,有的运算符优先级相同
2)语法
运算符 | 描述 | 优先级 |
---|---|---|
** | 幂运算符 | 最高 |
* / % // | 乘 除 取余 整除 | ↑ |
+ - | 加 减 | ↑ |
<= > < >= | 比较运算符 | ↑ |
== != | 比较运算符 | ↑ |
= %= /= //= -= += *= **= | 赋值运算符 | ↑ |
is is not | 身份运算符 | ↑ |
in not in | 成员运算符 | ↑ |
not or and | 逻辑运算符 | 最低 |
注意1:相同运算符的优先级
从左到右
注意2:not or and的优先级
从高到低:not 、 and 、 or