ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 变量 变量是内存中用于存储数据的基本单位! ## 什么是变量? 概念: 变量是内存中用于存储数据的基本单位! 变量会暂时性的存储放入的数据! **数学角度** >数学中 >x + y = 10 >x=5 y=? >x和y就是变量,它们就是数学中的变量! **变量声明语法** ![变量语法](https://box.kancloud.cn/9cf45849fc487c07132eff5f508ea142_921x430.png) > 变量名字学名叫标识符 > 该表达式正确读法: 值42赋值给变量 answer > 可以直接使用名字,调用内存中保存的值 **案例** ``` # 变量 answer = 42 print(answer); print("变量的值:", answer); # 使用变量接收用户输入的数据 uname = input("请输入你的名字:") print("姓名:",uname) age = input("请输入你的年龄:") print("年龄:",age) #多个变量同时赋值 a = b = c = 1 或 a, b, c = 1, 2, "runoob" ``` **生活角度理解** 变量是内存中存储数据的最小单位. > 变量= 生活中的容器 > 变量赋值操作 = 我们把物品放入容器 > 数据类型= 取决于我们在容器中放的物品 内存中保存变量的过程和人住宾馆过程相同! ![宾馆](https://box.kancloud.cn/34da0fd1993f754af5d520b6aa8d3f26_757x375.png) ![内存数据存储](https://box.kancloud.cn/676167ae58bd4787b17024fe10521822_782x500.png) ![定义类比](https://box.kancloud.cn/903e32c2db8d3ade77983f47204c5fe5_745x474.png) 变量定义语法: *标识符/变量名 = 值* ## 变量名规范 **1. 变量名严格区分大小写** **2.变量名可重复** > Python是弱数据类型语言.可以理解为不严格区分数据的具体类型! 任意类型都可以储存在一个变量中! **3. 变量名由字母数字下划线组成,首字母不能为数字** ![案例](https://box.kancloud.cn/aa9b0b2c8d0d7e1000996031f10cf803_553x348.png) **4 驼峰命名法或帕斯卡命名法** ![驼峰命名法](https://box.kancloud.cn/b9e948f534050cd007a2abf404ac30fb_482x335.png) > 小驼峰: zhangSan userName, dogName 首字母小写,每个新单词首字母大写 > 大驼峰: ZhangSan UserName, DogName 每个单词首字母都大写 > 帕斯卡命名法: zhangsan-name 或 zhangsan_name 多个单词之间用中划线或下划线隔开也常用! **5 简短清晰见名知意尽量用英文避免用中文** **6 不能和内置关键字冲突** **7 变量只定义未赋值报错** ``` #变量未赋值就使用报错 print(a); 报错 NameError: name 'a' is not defined ```` > 系统保留关键字 > False, None, True, and, as , assert, break, class, continue, def, del,elif,else,except,finally,for,form,global,if,import, in,is , lambda, nonlocal,not,nor,pass,raise,return, try,while,with,yield ## 变量交换 > #两个变量交换值操作 > 变量1,变量2= 变量2,变量1 > a = 1 > b =2 > a,b= b,a ## print()函数/命令 > 打印是Python中常用功能,顾名思义, print()理解为打印展示的结果!使用该方法把你要打印查看结果的对象塞入括号中,就可以打印出来! (Python2.x 无括号) ![打印](https://box.kancloud.cn/eab7a4c8d272d1a8401d907f7c77c883_442x162.png) - print(内容) - prin(变量) - print(变量1,变量2,变量3...); 打印多个值用逗号隔开 - print("提示内容:", 变量名) ; **案例** ``` #在txt文档中打印内容 file = open("d:/demo.txt","w"); file.write("你好,我新写入的内容") ``` ## 变量的3个常用操作 **1 获取变量的值-直接通过名字获取** > 用法: num1=3; print(num1) **2获取数据类型 type()函数** > 用法: type(变量名) **3 获取变量在内存中的id标识id()函数** > 用法 id(变量名) ``` # 根据名字直接 num1= 30; print(num1) # 查看数据类型 print(type(num1)) num1 = "33" print(type(num1)) num1 = 3.3 print(type(num1)) # 查看内存地址 print(id(num1)) ``` # 数据类型 Python3 中有六个标准的数据类型: - Number(数字) - String(字符串) - List(列表) - Tuple(元组) - Set(集合) - Dictionary(字典) Python3 的六个标准数据类型中: - 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组); - 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。 >在Python中我们不需要声明一个变量的数据类型,只需要定义它并为它赋值,因为系统会根据值自动分辨它的数据类型 数据的信息查看 > 内存标识: id() 类型检测: type() 值的使用: 直接使用 ## Number(数字) ![](https://box.kancloud.cn/e65e44ec5d0b7f005ab0ed541e9fd857_778x419.png) >Python3 支持 int、float、bool、complex(复数)。 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。 像大多数语言一样,数值类型的赋值和计算都是很直观的。 内置的 type() 函数可以用来查询变量所指的对象类型。 ``` a, b, c, d = 20, 5.5, True, 4+3j print(type(a), type(b), type(c), type(d)) <class 'int'> <class 'float'> <class 'bool'> <class 'complex'> ``` ### 类型判断 **变量类型判断 type和isinstance** > 此外还可以用 isinstance 来判断: >isinstance(变量,测试的类型) 检测一个暑假是否由指定的类型创建 ``` # 判断是否为整数 a = 111; print(isinstance(a,int)) ``` >isinstance 和 type 的区别在于: 区别就是: type()不会认为子类是一种父类类型。 isinstance()会认为子类是一种父类类型。 ``` class A: pass class B(A): pass isinstance(A(), A) # returns True type(A()) == A # returns True isinstance(B(), A) # returns True type(B()) == A # returns False ``` 注意:在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。 ### del删除引用 **del 删除变量引用** >您也可以使用del语句删除一些对象引用, >语法 del var1[,var2[,var3[....,varN]]]] ### 自动转换 ``` #通过控制台输入的所有数据都为字符串 num1 = input("请输入一个数:") print(int(num1)+ 2); #不转换为整数运算出错 ``` ### 案例 ``` # 数字类型 print(type(3)) print(type(3.13)) print(type(3j)) # 科学家用 # 判断是否为整数 a = 111; print(isinstance(a,int)) # 删除变量引用 num1 =30 print("num1的值:",num1) del num1 print("num1的值:",num1) print("num1的值:"+"aaa") # 数字交换 a = 3; b = 4; a,b = b,a; print("a结果:",a) print("b结果:",b) # 混合运算时整数会自动变为小数 num1= 3; num2= 1.3; jieguo = num1/num2; print(type(jieguo)) ``` ### 注意 - 1、Python可以同时为多个变量赋值,如a, b = 1, 2。 - 2、一个变量可以通过赋值指向不同类型的对象。 - 3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。 - 4、在混合计算时,Python会把整型转换成为浮点数。 ## 字符串String 字符串或串(String)是由数字、字母、下划线组成的一串字符,它是编程语言中表示文本的数据类型. ![](https://box.kancloud.cn/d4f291d177f8c278b2e418d771fcb042_607x481.png) ### 定义 **字符串定义** ``` print(type('123')) print(type("123")) print(type('''123''')) print(type("""123""")) # 转义符 \n print("窗前明月光\n \'疑是地上霜\'") ``` ### 连接和重复 **+表示链接 * 表示重复** 都是字符串类型才可以使用 `+` 连接 ``` # 字符串连接 name="张三" sex="男" age="20" #注意 age必须为整数!否则无法实现合并 print(name+sex+age) num1 = 1 str2 ='1' num2 = int(str2) #被转换为同种类型后就可以合并两个变量了 print(num1+num2) words = "ABC" print(words*3) #结果ABCABCABC ``` ### 截取 **字符串截取(学名叫分片)** 字符串可以通过s `tring[开始位置 : 结束位置 ]` 的方式进行索引,分片slice,也就是加一个 `[]` ,字符串分片(silice)实际上可以看做是从字符串中找到你要截取的东西,复制出来一小段你要的长度,存储在另个地方,而不会对原字符串进行更改! ![字符串](https://box.kancloud.cn/5e4924d0dd21113bb1e723c862c64b7a_758x141.png) ### 常用方法 **字符串常用方法** 方法: >Python是面向对象进行编程的语言,而对象拥有各种功能,特征,专业术语称之为---方法(method).比如:日常生活中的车是对象 `car`,车有很多特性和功能, 比如`驾驶` `开车门` `开车灯` 等,在Python编程中可以描述成这样: ``` car.drive() car.door.open() car.light() ``` ![方法](https://box.kancloud.cn/a436b5b292f4740cc2631c86c50c9d09_643x312.png) 字符串常用的方法 - `replace(待替换字符串,新字符串)` 替换 - `len(字符串)`长度 - `find(字符串)` 查找,找不到返回-1 - `format` 格式化 真实应用: ![替换应用](https://box.kancloud.cn/e26e260c11aca10c139034e85a03dc9e_707x234.png) ![查找应用](https://box.kancloud.cn/1bdc2464f32a975756dba153fa123979_723x210.png) ![格式化应用](https://box.kancloud.cn/635e9048cbd32e4cc9bceb842f9f70c7_598x221.png) **字符串长度len()** len(字符串/变量) 可获取字符串长度 ``` print(len("abc def")) #打印长度为7 ``` ### 案例 ``` #+连接 * 重复 num1 = 1 str2 ='1' num2 = int(str2) #被转换为同种类型后就可以合并两个变量了 print(num1+num2) words = "ABC" print(words*3) #长度len() print("长度:",len("abc def")) #打印长度为7 #截取 s = 'ilovepython' print("结果:",s[1:5]) #包头不包尾 print("结果:",s[1:]) name= 'My name is Mike' print(name[0]) #M print(name[-1]) #从后往前取e print(name[3:7])#包头不包尾 print(name[3:])#后面的全貌 print(name[:5])#5之前的 #真实应用 url = 'http://www.jd.com/14d2e8ejw1exjogbxdxhj20ci0kuwex.jpg' print(url[-10:]) #替换replace,find查找 # 手机号码只显示后4位,其余用*替换 phone = '17600950805' print(phone.replace(phone[:7],"*"*9)) search='176' print(search +'开始:'+ str(phone.find(search)) +'到'+(str(phone.find(search)+ len(search))) ) # 格式化 print("我的名字叫:{},年龄是:{}".format('张三',20)) #真实应用 keyword="python3" url = "您要查找的网址是:http://www.runoob.com/{}/{}-tutorial.html".format(keyword,keyword) print(url) ``` ### 转义字符 >特殊格式的字符串需要用转义字符表示,参考一下列表 | 转义字符 | 描述 | | --- | --- | | \(在行位) | 续行符 | | \\ | 反斜杠 | | \' | 单引号 | | \'' | 双引号 | | \'' | 双引号 | | \n | window系统换行 | | \n \r | Linux系统换行 | | \t | 横向制表符| # 数据类型转换 将数据从当前类型变为其他类型的过程叫 数据类型转换. 我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。 >语法 数据类型名() **数据类型转换分两大类** >自动数据类型转换 (隐士) 程序自动完成 >强制数据类型转换(显示) 必须用户强制转化 >(比如从控制台输入的数字也是字符串类型) ``` #现在常用 int(3.6) #结果3 float(3) #结果3.0 int('3.3') #结果3 str(3) #变为字符串类型 num1 = 3; num2 = 1.0 jieguo= num1/num2; # 自动变为更加精确的小数类型 ``` ### 自动转换 >运算时程序自动完成 特征 >1. 程序自动进行,不需要人工干预 >2. 发生在运算或判断工程中 >3. 类型转换向着更加精确的类型进行转换 ### 强制转换 > 根据程序需要,程序员通过操作强制改变数据类型! 过程可见 > 常用功能 > int( 变量) 强制将数据转化为整数 > float(变量) 强制将数据转化为浮点型 > str(变量) 强制将数据转化为字符串 > 等.... 以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。 | 函数 | 描述 | | --- | --- | | int(x [,base]) | 将x转换为一个整数 | | long(x [,base] ) | 将x转换为一个长整数 | float(x) | 将x转换到一个浮点数| | complex(real [,imag]) | 创建一个复数| | str(x) | 将对象 x 转换为字符串| | repr(x) | 将对象 x 转换为表达式字符串 | | eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 | | tuple(s) | 将序列 s 转换为一个元组 | | list(s) | 将序列 s 转换为一个列表 | | set(s) | 转换为可变集合 | | dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 | | frozenset(s) | 转换为不可变集合 | | chr(x) | 将一个整数转换为一个字符 | | unichr(x) | 将一个整数转换为Unicode字符 | | ord(x) | 将一个字符转换为它的整数值 | | hex(x) | 将一个整数转换为一个十六进制字符串 | | oct(x) | 将一个整数转换为一个八进制字符串 | # 列表 list 常用 ![](https://box.kancloud.cn/fed31015ebbd6ef6659e57891ce1fddb_778x210.png) ![](https://box.kancloud.cn/db75a0654e8d0ad4146f24f1517d1b0b_706x191.png) # 元组(Tuple) ![](https://box.kancloud.cn/88d20ad317e0b5b0db56a8161f609299_767x163.png) # 字典(Dictionary) ![](https://box.kancloud.cn/21e772ab2edb471eba9e1934a71a34c0_768x570.png) # 集合(Set) ![](https://box.kancloud.cn/2effa284c880da5f0013cbc9b2b826c8_761x434.png) # 运算符 1. 算术运算符(+ , - , * , / , %) %取余讲解 2. 比较/关系运算符(> < >= <= != ==) 3. 赋值 = +=练习 (= 和 +=) 4. 逻辑运算符:(and or not ) 5. 位运算符: ( & | 左移 右移) 6. 成员运算符 (in , not in) 8. 身份运算符( is , is not) 9. 优先级: 使用小括号 ## 位运算符讲解 ![位运算符](https://box.kancloud.cn/165861cf7a9382f4093f2f2c48b5b26a_756x352.png) ``` # 小数对大数取余结果=小数 print(10%30) # num = num +3; 简写 num+=3; num =3; num +=3; print(num) # and 两个都成立返回true or 其中一个成立返回true age1 = 20; age2= 32; jieguo = age1>18 and age2>18 jieguo = age1>18 or age2>18 print(jieguo) # &与 |或 <<左移动 >>右移 判断二进制数据的 a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 #按位与 (位置) print(a & b) ; # 12 = 0000 1100 print(a | b); # 61 = 0011 1101 print(a << 2) ; # 240 = 1111 0000 print(a >> 2) ; # 15 = 0000 1111 #成员 a = 2 list = [1, 2, 3, 4, 5 ]; print(a in list) # 身份 is是判断两个标识符是不是引用自一个对象 a = 20 b = 20 print( '成立么:', a is b) print( '成立么:', id(a) == id(b)) ```