Python入门#2:变量、数据类型、基本运算
Python入门#2:变量、数据类型、基本运算
变量是什么?
我们需要让计算机完成一些事情对吧?那么计算机是不是需要记住一些什么呢?例如,我想让他向你问好,首先得知道并记住(哪怕只是暂时的)你的名字,对吧?这部分内容学会后,你将收获:
| 类型 | 内容 |
|---|---|
| 语法 | 变量的概念与使用 |
| 函数 | input |
| 语法 | 语句 |
| 语法 | 赋值操作与基本运算符 |
| 语法 | 数据类型 |
变量
变量(Variables),顾名思义,就是一个可以变化的量。你可以把变量理解成一个盒子,你需要的话就创建它,不需要的时候就销毁它(当然,销毁的操作是Python自动完成的。)
变量的创建:赋值时自动创建
赋值
在Python中,**赋值(assignment)**是一个重要的操作。赋值的意思就是,把箱子里的东西倒掉,在放进新的去。在Python中,赋值使用=来完成。这里的等于号你可以这样理解:我要让左边的变量存储的东西和右边的一样。例如:
>>> a = 1
>>> print(a)
1
>>> 某变量 = "hello, world"
>>> print(某变量)
hello, world
在交互式解释器中,直接输入变量名等,会返回其值。例如接着操作:
>>> a
1
>>> 某变量
'hello, world'
变量的类型
就像你认识现实生活中的各种事物,有吃的有看的,有概念上的(如数字)有具象的(如课本)等,变量也具有他们的类型。这里我将介绍Python内置的数据类型。
| 名称 | 示例 |
|---|---|
整型 int |
a = 1 |
浮点型(小数) float |
a = 1.5b = 1.3e10($1.3 \times 10^{10}$) |
复数(少用,仅介绍) complex |
a = 10 + 8j即$a = 10 + 8i$.注意到使用的是 j而不是i |
字符串 str(全称string) |
a = "hello, world" |
布尔值(逻辑值,即True or False) bool |
a = True等价于 a = 1a = False等价于 a = 0 |
None(或说空) NoneType |
a = None |
| 数据结构等(后期会专门学习) | a = [1,2,3,"hello, world", [12, 2], (12, 23)] |
| 其他内置数据类型 | 略 |
基本运算
算数运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
+ |
加法(数值)或串联(序列) | 3 + 5 == 8、'a' + 'b' == 'ab' |
- |
减法 | 10 - 3 == 7 |
* |
乘法或序列复制 | 2 * 4 == 8、'ha' * 3 == 'hahaha' |
/ |
除法(始终返回 float) |
7 / 2 == 3.5 |
// |
地板除(返回结果的向下取整,但是数据类型仍为int) |
7 // 2 == 310.3 // 2 == 5.0-10.3 // 2 = -6.0 |
% |
取模(余数) | 7 % 3 == 1 |
** |
幂运算 | 2 ** 5 == 32 |
地板除需注意:结果向下取整,例如10.3 // 1的结果为10, -10.3 // 1的结果为-11。
取余得到的余数即小学学的带余除法得到的余数部分。例如:
$$ 13 \div 5 = 2 \text{ 余 } 3 $$ 在Python中:>>> print(13 % 5)
3
在数论中,这个叫做模除: $$ 3 \equiv 13 \pmod 5 $$ 这个式子的意思为,在除以5的情况下3与12同余。$\equiv$是同余符号。
同余即余数相同。
或者可以这样写: $$ 13 \mod 5 = 3 $$ 这种写法的意思为,13 除以 5 的余数为 3
逻辑运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
and |
与(短路求值) | True and False == False |
or |
或(短路求值) | True or False == True |
not |
非 | not True == False |
逻辑运算符(Boolean operators),顾名思义(顾英文名),就是针对布尔值的运算。一般用于逻辑判断。
例如,我用我出门骑自行车表示我是否会出门骑自行车,用今天下雨表示今天是否会下雨,用今天刮风表示今天是否刮风,那么如果我只在不刮风也不下雨的时候骑自行车(要求好高啊)可以这样表示:
我出门骑自行车 = (not 今天下雨) and (not 今天刮风)
这里是各个逻辑运算的所有结果(用1|0表示法):
| 运算 | 结果 |
|---|---|
1 and 1 |
1 |
1 and 0 |
0 |
0 and 0 |
0 |
1 or 1 |
1 |
1 or 0 |
1 |
0 or 0 |
0 |
not 1 |
0 |
not 0 |
1 |
位运算符
注意到计算机以2进制(bin)存储数据。因此学习一些关于(二进制)位的运算是有必要的。在一定程度上,恰当地使用位运算可以简化算法。
进制是什么呢?寻常我们数数,是不是数到10就进一位啦?
比如: $$ 9 + 1 = 10 $$ 从一位数变成了两位数。
而其他进制就不一样了。例如
二进制中,是逢2进1: $$ 1_2 + 1_2 = 10_2 \ 10_2 = 2_{10} \ 10_2 + 1_2 = 11_2 \ 11_2 = 3_{10} \ 111_2 + 11_2 = 1010_2 \ 1010_2 = 10 $$ 从1位变成了2位.
八进制同理: $$ 3_8 + 7_8 = 12_8 \ 12_8 = 10_{10} $$ 十进制以上进制则大于十的用字母补齐(因为只有九个数字)。
例如十六进制中: $$ 9_{16} + 5_{16} = \text{e}{16} \ \text{f}{16} + 1 = 10_{16} \ 15_{16} + 14_{16} = \text{1d}{16} \ \text{e}{16} = 14_{10} \ \text{10}{16} = 16{10} \ \text{1d}{16} = 29{10} $$
二进制、八进制数是
int的子集,其中:二进制(
bin)用0b开头:>>> bin(12) '0b1100'八进制(
oct)用0o开头:>>> oct(12) '0o14'十六进制(
hex)使用0x开头:>>> hex(12) '0xc'
| 运算符 | 示例 |
|---|---|
&(按位与) |
0b1100 & 0b1010 == 0b1000 |
| ` | `(按位或) |
~(按位非) |
~0b1100 == -0b1101(注意变成了负数)而 ~0b-1 == 0 |
^(按位异或) |
0b1100 ^ 0b1010 == 0b0110 |
异或(XOR)的规律:同则为0, 异则为1:
| 操作 | 结果 |
|---|---|
| $1 XOR 1$ | $0$ |
| $1 XOR 0$ | $1$ |
| $0 XOR 1$ | $1$ |
| $0 XOR 0$ | $0$ |
位运算可以理解成按位进行的逻辑运算。
比较运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
== |
等于 | 5 == 5 |
!= |
不等于 | 5 != 3 |
<, <=, >, >= |
大小比较 | 3 < 4、5 >= 5 |
is |
对象身份比较(同一对象) | a is b |
is not |
对象身份不等 | a is not b |
为什么等于号是两个等号呢?因为一个等号已经被那个叫做赋值的坏家伙占用了(
身份运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
is |
检查两个对象是否是同一实例 | a is b |
is not |
检查两个对象是否不是同一实例 | a is not b |
例如:
>>> "hello" in "hello, world"
True
测验:
请在计算一下运算的结果并在交互式解释器中验证:(带*的为选做,进度快的同学可以自行上网查找资料进行完成)
-
1 + 89089 -
"hello" + ", " + "world" -
"hello," " world" -
a = 6 b = -7 print(a + b) print(a - b) print(a * b) print(a / b) print(a // b) print(a % b % 2) print(a ** b) print(b ** a) print(a and b) print((not a) or b) print(not b) print(a ^ b) print(a | b) print(~a) print(~b) print(~a ^ b) print(bin(a)) print(hex(a)) print(oct(b-a)) print(type(bin(a))) print(type(hex(a))) print(type(oct(b-a))) print(type(type(12 + 29 ** 23))) -
* 编写一个程序,使得你能够告诉它你的名字,然后它向你问好。
项目5示例代码:
# 入门2-5方言版 name = input("泥脚什么名字呀?") print(name, ', '+name, ', ' "泥豪泥豪")运行结果示例:
泥脚什么名字呀?ZhX589 ZhX589 , ZhX589 , 泥豪泥豪