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.5
b = 1.3e10($1.3 \times 10^{10}$)
复数(少用,仅介绍) complex a = 10 + 8j
即$a = 10 + 8i$.注意到使用的是j而不是i
字符串 str(全称string) a = "hello, world"
布尔值(逻辑值,即True or Falsebool a = True
等价于
a = 1

a = 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 == 3
10.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 < 45 >= 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. 1 + 89089

  2. "hello" + ", " + "world"

  3. "hello," " world"

  4. 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. * 编写一个程序,使得你能够告诉它你的名字,然后它向你问好。

项目5示例代码:

# 入门2-5方言版
name = input("泥脚什么名字呀?")
print(name, ', '+name, ', ' "泥豪泥豪")

运行结果示例:

泥脚什么名字呀?ZhX589
ZhX589 , ZhX589 , 泥豪泥豪

标签: none

添加新评论