第1节课 数据与变量
程序 = 数据 + 指令
1.1 内置基本数据类型
(1)数值型
整数(int):用于表示整数,注意一点Python中int数据可以存储任意大小整数,不会像其他语言(C\C++ Java)会存在整型溢出的问题
>>> print(1010101010101010101118923986192673987123 + 1)
1010101010101010101118923986192673987124
>>> print(12)
12
>>> print(0b1011) # 二进制
11
>>> print(0o123) # 八进制
83
>>> print(0x1A2B3C) # 十六进制
1715004
浮点数(float):用于表述小数,浮点数存在科学计数法,由于小数实际上用二进制存储的,可能会存在误差(如果要进行非常精确的小数运算时,浮点数就不适用)
>>> print(3.14)
3.14
>>> print(3.14e10)
31400000000.0
>>> print(3.14e-5)
3.14e-05
>>> print(3.14e-3)
0.00314
复数:由实部和虚部构成数字,a + bj
>>> 3 + 1j
(3+1j)
>>> 1 + 2j
(1+2j)
>>> (3 + 2j) * (2 - 3j)
(12-5j)
(2)布尔类型(bool)
只有两个值 True
和False
,常用于逻辑判断。Python中 True
表示真,False
表示假,但是从实际而言,就是用1和0来表示的。
>>> print(True + 1)
2
>>> print(False - 1)
-1
(3)字符串类型(str)
字符串是由零个或多个字符组成的不可变序列,可以使用单引号、双引号、三单引号、三双引号表示字符串。
字符串主要表现的是文本数据。
>>> print("123")
123
>>> print("123 + 123")
123 + 123
>>> print('''Hello'''')
File "<stdin>", line 1
print('''Hello'''') # 非法结束符错误
^
SyntaxError: unterminated string literal (detected at line 1)
>>> print('''Hello''')
Hello
>>> print("""Hello""")
Hello
>>> print('Hello') # 单引号在C\C++ Java 表示字符数据 在Python一律当成字符串来处理
Hello
>>> print("") # 空串 没有字符的字符串
(4)空置类型
None
是Python中一个特殊值,表示空或者无意义。
>>> print(None)
None
>>> None + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
1.2 变量与数据类型
(1)变量的定义与赋值
变量,表示程序中临时存储数据的容器
在Python,变量是不需要声明类型的,直接赋值即就是创建变量,赋值用=
表示,把=
右边的结果赋值给左边
>>> age = 25 # int age = 25
>>> name = "张三" # 是第一次出现 创建变量
>>> name = "李四" # name已经有了 修改变量
>>> name
'李四'
(2)变量命名规则,标识符
就是给程序当中某些数据进行命名,自定义名称
- 变量名只能包含字母、数字、下划线,且不能以数字开头
- 变量名是区分大小写的,age、Age,AGE其实三个变量
- 不能使用Python的关键字作为变量名
(3)关键字
在Python语法当中,已经给一些单词赋予了特殊的含义,我们就不能随意使用了
以下是Python所有的关键字:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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']
>>> True = 3.14
File "<stdin>", line 1
True = 3.14
^^^^
SyntaxError: cannot assign to True
>>> if = 1
File "<stdin>", line 1
if = 1
^
SyntaxError: invalid syntax
(4)标识符的命名规范
- 变量和函数的命名:变量和函数名称通常使用小写字母,单词之间用下划线分隔,蛇形命名法。
my_age
last_time
first_run()
# 小驼峰写法 除了第一个单词首字母小写外 其他单词首字母都大写
myAge
lastTime
firstRun
- 类命名:大驼峰 所有单词的首字母大写
MyAge
YourBoyFriend
- 常量命名:所有的单词字母都大写,单词之间用下划线分隔
MAX_VALUE
SUM_OF_ARR
(5)内置函数名称也不要随便乱用
Python当中的变量由于没有类型的约束,所以存啥都可以,甚至是函数\类\对象
把内置函数的名称当成一个变量看待就行了
>>> print(1 + 2)
3
>>> num = print
>>> print = 1
>>> print + 1
2
>>> num(1 + 2)
3
(6)数据类型
可以使用内置函数type()
来去查看变量或数据的类型
>>> type(1)
<class 'int'>
>>> num = 1
>>> type(num)
<class 'int'>
>>> num = 3.14
>>> type(num)
<class 'float'>
>>> num = "Hello"
>>> type(num)
<class 'str'>
>>> num = True
>>> type(num)
<class 'bool'>
>>> num = 3 + 1j
>>> type(num)
<class 'complex'>
>>> num = None
>>> type(num)
<class 'NoneType'>
Python中的变量赋值是动态的,虽然很灵活,但是你得注意变量的运算
>>> num = 1
>>> num + 1
2
>>> num = "Hello"
>>> num + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
(8)变量的多重赋值与交换
可以同时给多个变量进行赋值,也可以进行快速变量交换的问题
>>> a,b,c = 1,2,3 # 多重赋值
>>> a
1
>>> b
2
>>> c
3
>>> a = b = c = 3 # 链式赋值
>>> a
3
>>> b
3
>>> c
3
>>> a = 3
>>> b = 10
>>> temp = a
>>> a = b
>>> b = temp
>>> a
10
>>> b
3
>>> a,b = b,a
>>> a
3
>>> b
10
1.3 基本数据类型转换
在Python中,数据类型转换主要有两种,隐式转换,显式转换
(1)隐式转换
Python会在某些运算中自动进行数据类型转换,以保证运算的顺利进行,通常是将低精度的类型转为高精度的类型
>>> num = 1
>>> type(num)
<class 'int'>
>>> num = num + 3.14
>>> num
4.140000000000001
>>> type(num)
<class 'float'>
(2)显示转换
使用内置函数来操作
- 转为整数
>>> num = 3.9
>>> int(3.9) # 将小数转为整数 直接砍掉小数部分
3
>>> num = "123"
>>> int(num) + 1 # 将数字字符串转为小数
124
>>> num = "123abc"
>>> int(num)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '123abc'
>>> int("1011",2) # 2指定字符串为二进制数字字符串来进行解析 -> 十进制
11
>>> int("123",4)
27
>>> int("1234",3) # 3和4 不属于三进制范围(0~2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 3: '1234'
>>> int("jahsgdjkhvasaz123g213",36)
257879087050173629504097140435271
>>> int("jahsgdjkhvasaz123g213",36)
257879087050173629504097140435271
最小二进制,最大三十六
>>> int("00000",1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: int() base must be >= 2 and <= 36, or 0 (默认十进制)
- 转浮点数
>>> num = 1
>>> num = num + 0.0
>>> num
1.0
>>> num = 1
>>> float(num) # 整数转小数 加小数点.0
1.0
>>> num = "3.14"
>>> float(num) # 小数字符串转小数
3.14
>>> float(num,2) # 不支持指定进制
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float expected at most 1 argument, got 2
- 转字符串
任意数据加str()函数一套即可
>>> num = 1
>>> str(num)
'1'
>>> num = 3.14
>>> str(num)
'3.14'
>>> num = True
>>> str(num)
'True'
- 转换为布尔类型
以下数据转为布尔类型时为 False:0
、0.0
、None
、""
其他均为 True
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True