Published in:2024-10-24 |

变量和数据类型

一、变量

1
2
3
4
5
6
7
8
9
10
变量:值是可以改变的
组成: 变量名 + 值 a = 5
eg: 定义一个长方形的两条边,计算它的面积 公式:s=ab
a = 5
b = 3
s = a*b
print(s) # => 15
a = 8
s = a*b # 需要重新计算
print(s) # => 24

注意:在Python中,所有的变量必须先赋值再使用(先定义,在定义必须要赋值)

1
2
3
4
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
print(d)
NameError: name 'd' is not defined
  • 一行代码同时为多个变量赋同样的值
1
2
a = b = c = 1
print(a,b,c) # => 1 1 1
  • 交换两个变量的值
1
2
3
4
5
6
7
a = 3
b = 5
temp = a
a = b
b = temp
# 在Python中,有更加简洁的方式
a,b = b,a # => a,b = 5,3

变量的本质

在代码中,定义a = 5,对于计算机而言会做什么事情呢?

1
# 变量的本质:内存中一块存储空间,当我们声明一个变量时,计算机就需要在内存给变量分配一块内存空间
1
2
// C语言
int a = 5 # 4个字节
1
2
# Python语言  一切皆对象
a = 5 # a实际存储的并不是5这个值,而是地址

二、标示符

标示符一般是指变量名、函数名、类名、包名等,在Python定义标示符时需要注意几下规则:

  • 标示符不能以数字开头,可以由字母、数字、下划线来组成(甚至可以是中文,但是不建议)

    • 中文命名可能出现乱码

    • 在Python2中默认并不支持中文(标示符、代码中都不能出现中文),因为Python2的默认编码是ASCII,ASCII并不支持中文

      A-65 a-97

      要让Python2支持中文,需要在文件头加 # coding:utf-8

    • 在Python3中默认使用的是unicode字符集(万国码-支持世界所有的语言-规范标准 - utf-8编码方式 )

  • 区分大小写 name 和Name是两个变量

  • 不能以Python中的关键字和保留字作为标示符

1
2
3
4
>>> import keyword
>>> print(keyword.kwlist)

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
  • 命名的细节(开发规范/开发习惯)

    name = “Mr_lee”

    age = 18

    • 望文生义,便于理解和记忆 (不要使用拼音 )
    • 变量名和函数名,建议使用小写。如果由多个单词组成时,中间用下划线连接(this_is_a_var)或不用下划线连接,连接处的单词首字母大写(helloWord) - 小驼峰
    • 类名:每个单词的首字母大写,其余全部小写(HelloWorld) - 大驼峰
    • 包名:全部小写,不加下划线

三、数据类型

1
2
3
在Python中定义的每一个变量都是有类型的
a = 5 此时变量a的类型是整型 int
s = 'helloworld' s的类型的是字符串str

在Python定义变量时,不需要声明类型,与C语言不一样

1
2
// C语言定义变量时,必须先指定数据的类型
int a = 5;
  • 动态数据类型: 变量在声明时,不需要指定数据类型 如:Python
1
2
a = 5   #  => int
a = 'helloworld' # => str字符串 修改了a的类型

代码在执行会根据值来推导出它的数据类型

  • 静态数据类型:在声明变量时,需要先指定数据类型,如:C、C++、Java
1
2
3
//C语言
int a = 5; //a是整型
a = 'helloworld' //错误 不可以改变它的类型

Python中常见的数据类型(内置的数据类型)

  • 数字类型(广义)

    • 整型(整数 int) a = 5
    • 浮点型(小数 float 不区分单精度和双精度) pi =- 3.14
    • 复数 a + bj 用的很少
  • 布尔类型

    • 表示为真和假
    • 值可以为True和False
    • 在内存中是以1和0进行存储的 本质上是整型
    1
    2
    3
    4
    5
    6
    >>> True + True  # => 1
    >>> 3 > 2 # => True

    # 表示性别
    gender = True # 男
    gender = False # 女
  • 字符串类型

    • 使用’x’或”x”或’’’x’’’或”””x”””都表示是字符串
    1
    2
    3
    4
    5
    6
    7
    a = Tom  # 错误
    a = "Tom"
    a = 'Tom'
    a = """
    可以换行
    表示多行字符串
    """
    1
    2
    a = "Tom\n哈哈"
    print(a)
    • 转义字符

      • \n 表示换行
      • \t 表示制表符 4个空格(有小问题)
      • \' 输出单引号 在单引号中嵌套单引号
      • \" 输出双引号 在双引号嵌套双引号
      • \\ 输出一个反斜杠

      可以直接在单引号中嵌套双引号或在双引号中嵌套单引号

  • 空类型 : None a = None

  • 容器类型(广义)

    • 列表 – C中的数组 存储多个数据 [2,4,6,8,22]
    • 元组 – 可以理解为是一个不可变化的“列表” (2,4,6,8,22)
    • 字典 – {key:value,…}
    • 集合 - {2,3,4,5}

四、输入和输出

1、输出

  • 使用print()函数,输出某个变量或某个值到屏幕中 内存->屏幕
1
2
3
a = 5
print(a) # => 5 默认会有一个\n 换行

1
2
3
4
5
6
# 一次输出多个值
a = 5
b = 10
print(a,b)

print("a=",a,"b=",b)

为什么print会自动换行

1
2
3
4
# 源代码
print(self, *args, sep=' ', end='\n', file=None)
有一个end参数,默认值为\n,可以覆盖掉
print(a,b,c,d,end=';')

注释方式:

  • 单行注释 #
  • 多行注释 ‘’’ ‘’’ 或 “”” “””

注释的作用:

  • 解释说明: 给代码添加额外的说明,解释代码的作用
  • 屏蔽代码:不让代码执行

2、输入

输入是从键盘输入一个值给内存中某个变量

1
2
3
4
>>> a = input() # 从键盘输入的数据默认都是字符串
5
>>> a
>>> '5'
1
2
# 加提示
>>> a = input('请输入')

输入整数:

1
2
3
4
5
>>> a = int(input('请输入'))  # 类型转换  字符串->int
>>> a # 整数

>>> a = float(input('请输入')) # 类型转换 字符串->float
>>> a # 浮点型

五、类型转换

1、将其它类型转为int类型

  • float转int
1
2
3
pi = 3.14
a = int(pi)
print(a) # => 3
  • str转int
1
2
3
s = '125'
a = int(s)
print(a)
  • bool转int
1
2
3
y = True
a = int(y)
print(a) # => 1

2、将其它类型转为float类型

  • int转float
1
2
3
a = 5
b = float(a)
print(b) # => 5.0
  • str转float
1
2
3
s = '3.14'
f = float(s)
print(f)
  • bool转float
1
2
3
y = True
f = float(y)
print(f) # => 1.0

3、将其它类型转为str类型

  • int转str
1
2
3
a = 5
s = str(a)
print(s) # 5 字符串类型的5
  • float转str
1
2
3
4
pi = 3.14
s = str(pi)
print(s)
print(type(s)) # => <class 'str'>
  • bool转str
1
2
3
y = True
s = str(y)
print(s) # => True 字符串的True
  • 列表转str
1
2
3
n = [2,4,6,8,22]
s = str(n)
print(s) # => '[2, 4, 6, 8, 22]'

将字符串和整数相加:

1
2
3
4
5
r = 'a' + 1   # 字符串和整数不能直接相加
print(r)

r = 'a' + str(1) # 'a' + '1' = 'a1' 字符串拼接
print(r)

六、获取类型

  • type()函数:获取某个变量或值的数据类型
1
2
3
4
5
6
7
8
9
10
11
a = 5
print(type(a)) # <class 'int'> 类 一切皆对象

s = 'helloworld'
print(type(s)) # <class 'str'>

c = 2 + 3j
print(type(c)) # <class 'complex'>

l = [2,4,6,8,22]
print(type(l)) # <class 'list'> 列表 清单
  • isinstance()函数:判断某个变量或值是否为某个类型 结果为bool类型
1
2
a = 5
print(isinstance(a,int)) # True

七、运算符和表达式

  • 什么是运算符

    运算符也称为操作符,+ - * / % > < … operator

  • 什么是表达式

    由操作符和操作数组成的,a + b , a>b ,a 也可以是一个单值

运算符的分类:

  • 算术运算符
1
2
3
4
5
6
7
# + - * / %  //

print(3 / 5) # => 0.6
print(3 % 5) # => 3
print(5 % 3) # => 2
print( 3 // 5) # 向下取整 地板除 floor
print(5 // 3) #
  • 关系运算符
1
2
3
4
5
6
#  > < >= <= == !=
print(5 > 3) # True
print(5 == 3) # False

if a > b:
xxx
  • 赋值运算符
1
2
a = 5  # a是作为左值 -- 修改
b = a # 把a作为右值 -- 取值 print(id(a),id(b)) 0-256
  • 复合赋值运算符
1
2
3
4
# += -= *= /= %= //=
a = 5
a += 3 # 等价 a = a + 3
1. 更加简洁 2. 更加利于计算机解析
  • 逻辑运算符
1
2
3
4
5
6
7
8
9
# 逻辑与  and   左右两边的表达式都为真 则结果为真
# 逻辑或 or 其中一个表达式为真结果就为真
# 逻辑非 not 取反

# 一般会参与到if中作为条件判断
a = 5
b = 3
if a and b:
xxx

输入一个年份,计算这一年是否为闰年

1
2
3
4
5
6
year = int(input('请输入年份:'))
# 能被4整除不能被100整除或能被400整除
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print(year,"是闰年")
else:
print(year,"是平年")
  • 位运算符(了解)
1
2
3
4
5
6
7
8
# 按位运算: 按位与、按位或、按位取反、按位异或、左移、右移
# 按位运算时,需要将数据转为二进制运算00000011 00000111
1. 按位与: 都为1时则为1,否则为0
2. 按位或: 有一个为1则为1
3. 按位异或:相同为0 不同为1
4. 按位取反: 1变0 0变1 补码运算
5. 左移: 往左移动 高位丢弃,低位补0
6. 右移: 往右移动 低位丢弃,高位补0
1
2
3
4
5
6
7
8
a = 0b00111100  # 10进制的60
b = 0b00001101
print(a&b) # 0b00001100 -> 12
print(a|b) # 0b00111101 -> 61
print(a^b) # 0b00110001 -> 49
print(~a) # -a-1 -61
print(a<<2) # 0b11110000 -> 240 左移几位2几次方 2**2=4
print(a>>2) # 0b00001111 -> 15
  • 三元运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   
# a = 3
# b = 5
# max = 0
# if a > b:
# max = a
# else:
# max = b
# print(max)

# C语言中
# max = a > b ? a : b

# Python客户
# max = a if a > b else b

八、运算符的优先级

1
2
3
4
1. 先算乘除再算加减,遇到括号先算括号里的 
2. ** 幂运算优先级比较高
....
3. not > and > or

作业:

 1. 练习上课代码 
 2. 总结笔记 
 3. 
Prev:
Next: