1.Python的输入函数input()
如果需要整数型和浮点型,就需要将str类型通过int()
函数或者float()
函数进行类型转换
1
2
3
4
5
name = input("请输入姓名:")
age = int(input("请输入年龄:"))
weight = float(input("请输入体重:"))
print(type(name), name, type(age), age, type(weight), weight)
再比如录入2个数,输出求和的结果:
1
2
3
4
5
6
def sum_int(m, n):
return m + n
a = int(input("请录入第一个整数:"))
b = int(input("请录入第二个整数:"))
print("两数求和的结果是:", sum_int(a, b))
2.Python中的运算符
(1)算术运算符
(2)赋值运算符
注意:链式赋值,是不同的引用, 指向相同的内容。
1
2
3
4
a = b = c = 2;
print(a, id(a))
print(b, id(b))
print(c, id(c))
id() 函数验证了变量引用的是同一个对象。之前已经说过,变量是对象的引用(或标签),而不是存储数据的容器。而上面的2 是一个单一的、共享的整数对象。链式赋值让多个变量指向同一对象。a、b、c 是不同的变量名(引用),但它们指向内存中相同的整数对象 2。Python的整数缓存和不可变对象特性确保小整数对象在内存中是共享的。
系列解包的功能,非常强大。可以轻松完成交换2个数的操作m, n = n, m
:
1
2
3
4
m, n = 10, 20
print("交换之前", m, " ", n) # 交换之前 10 20
m, n = n, m
print("交换之后", m, " ", n) # 交换之后 20 10
这在其他语言中,是很难做到这么方便的。
(3)比较运算符
对变量或表达式的结果进行大小、真假等比较
特别注意:==
比较的是值,而不是内存地址;而is
/is not
比较的是对象的id(内存地址),
1
2
3
4
5
6
7
8
9
10
11
a = 2
b = 2
print(a == b) # 比较值, True
print(a is b) # 整数缓存,所以也是True
c = [1, 2, 3]
d = [1, 2, 3]
print(c == d) # 比较值,True
print(c is d) # 比较内存地址,False
print(id(c)) # 140430038281408
print(id(d)) # 140430038327168
Python 对小整数(-5 到 256)和某些短字符串(如纯 ASCII 字符串)进行缓存,因此 a = 256; b = 256; a is b 返回 True,但对于大整数(如 1000),可能返回 False(取决于 Python 实现)。在某些情况下,Python 解释器(特别是 CPython)会在同一作用域或同一代码块中优化整数对象的创建。如果两个大整数(如 1000 或 1000000000)在同一代码块中以字面量形式定义,Python 可能重用相同的整数对象,而不是为每个变量创建新对象。
(4)布尔运算符
注意:and是短路与,即在确定结果的最早可能点停止计算后续部分,以提高效率。or也是短路或,如果第一个操作数为 真(True),Python 不会计算第二个操作数,因为整个表达式的结果已经确定为 True。
(5)位运算符
将数据转成二进制进行计算
注意:&
和 |
是位运算符,不是逻辑运算符。
这些是位运算符,而不是逻辑运算符,因此它们不具备短路求值的特性。and 和 or 是逻辑运算符,它们支持短路求值。
注意:Python 的左移(«)和右移(»)运算符不区分有符号或无符号,因为 Python 的整数(int)类型是无大小限制的动态整数,不像 C 或 Java 那样有固定位数的有符号/无符号整数类型。右移负数时,Python 保持符号位(补 1),这与算术右移一致,但不意味着 Python 的整数是有符号类型,而是为了符合数学逻辑。
3.运算符的优先级
先算算术运算符,再算位运算,再算比较运算符,然后进行布尔运算,最后赋值运算。