当前位置: 首页 > news >正文

ps做汽车网站下载地址网站开发职业访谈

ps做汽车网站下载地址,网站开发职业访谈,钢材原材料东莞网站建设,goodwork wordpress学Python#xff0c;看一篇就够 python基础注释变量标识符命名规则使用变量认识bugDebug工具打断点 数据类型输出转义字符输入输入语法输入的特点 转换数据类型pycharm交互运算符的分类赋值运算符复合赋值运算符比较运算符逻辑运算符拓展 条件语句单分支语法多分支语法拓展 if… 学Python看一篇就够 python基础注释变量标识符命名规则使用变量认识bugDebug工具打断点 数据类型输出转义字符输入输入语法输入的特点 转换数据类型pycharm交互运算符的分类赋值运算符复合赋值运算符比较运算符逻辑运算符拓展 条件语句单分支语法多分支语法拓展 if嵌套随机数拓展 三目运算符while循环循环的作用循环的分类标题计数器break和continue理解实例九九乘法表else 字符串下标切片语法 常用方法查找修改 判断 列表列表的格式列表的常用操作下标判断是否存在列表增加数据列表数据删除列表数据修改列表复制数据列表的循环遍历列表嵌套 元组元组的应用场景定义元组元组的常用操作元组修改操作 字典字典的应用场景创建字典的语法字典常见操作增删改查 字典的循环遍历遍历字典的key遍历字典的value遍历字典的元素遍历字典的键值对 集合创建集合集合常见操作方法增加数据删除数据查找数据 公共操作一、运算符二、公共方法容器类型转换tuple()list()set() 推导式列表推导式带if的列表推导式多个for循环实现列表推导式 字典推导式字典推导式集合推导式 函数基础函数的作用定义函数调用函数案例函数的注意事项函数的参数作用定义函数函数的返回值作用应用函数的说明文档语法函数嵌套调用打印图形函数计算 函数升级变量作用域修改全局变量多函数程序执行流程函数的返回值函数的参数位置参数关键字参数缺省参数不定长参数拆包和交换变量值 交换变量值引用引用当实参 可变类型和不可变类型 函数加强目标应用学员管理系统系统介绍1.2步骤分析 1.3需求实现 递归函数和匿名函数递归2、递归的特点3、应用3以内数字累加和lambda表达式lambda的应用场景lambda语法应用应用计算a blambda的参数形式lambda的应用高阶函数体验高阶函数内置高阶函数 文件操作文件操作的作用文件的基本操作文件操作步骤打开打开文件模式 python基础 注释 单行注释 #多行注释 #第一种#第二种变量 变量的作用变量就是一个存储数据的时候把当前数据所在的内存地址的名字定义变量 变量名 值 #先计算等号右边值然后再赋值到左边变量名自定义要满足标识符命名规则 认识数据类型 标识符 标识符命名规则是python定义各种名字的时候的统一规范具体如下 由数字、字母、下划线组成不能数字开头不能使用内置关键字严格区分大小写 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命名规则 见名知义。大驼峰即每个单词首字母都大写列如MyName。小驼峰第二个含以后的单词首字母大写例如myName下划线列入my_name 使用变量 my_name guke print(my_name) schoolName 全文 print(schoolName)认识bug Debug工具 Debug工具是pyCharm IDE中集成的用来调试程序的工具在这里程序员可以查看程序的执行细节和流程或者调解bug。 Debug工具使用步骤 1.打断点2.Debug调试 打断点 断点位置 目标要调试的代码块的第一行代码即可即一个断点即可。 打断点的方法 单击目标代码的行号右侧空白位置。 数据类型 数值int(整数)、float(浮点数)布尔型str字符串list列表tuple元组set集合dict字典 #type()函数检查python数据类型输出 作用程序输出内容给用户 print(hello Python) age 18 print(age) #需求输出“今年我的年龄是18岁”格式符号转换%s字符串%d有符号的十进制整数%f浮点数%c字符%u无符号十进制整数%o八进制整数%x十六进制整数小写ox%X十六进制整数大写OX%e科学计数法小写‘e’%E科学计数法大写‘E’%g%f和%e的简写%G%f和%E的简写 age 18 name GUKE weight 75.5 stu_id 1 print(今年我的年龄是%d岁 % age) print(我的名字是%s % name) print(我的体重是%.3f公斤 % weight) #.3f保留三位小数 print(我的学号是%03d % stu_id) #03d格式化输出三位数 print(我的名字是%s,今年%d岁了,体重是%.3f公斤,学号是%03d % (name,age,weight,stu_id))# 拓展 print(我的名字是%s,今年%s岁了体重%s公斤 % (name,age,weight)) print(f我的名字是{name},明年{age1}岁了) #3.6出来的转义字符 \n换行\t制表符一个tab键4个空格的距离。 输入 在python中程序接收用户输入的数据的功能即是输入。 输入语法 input(提示信息)输入的特点 当程序执行到input等待用户输入输入完成之后才继续向下执行。 在python中input接收用户输入后一般存储到变量方便使用。 在python中input会把接收到的任意用户输入的数据都当做字符串处理。 转换数据类型 问input接收用户输入的数据都是字符串类型如果用户输入1想得到整型该如何操作答转换数据类型即可即将字符串类型转换成整型。typle() #将一个序列转换为元组 str() #将数据转换成字符串型 float() #将数据转换成浮点型 list() #将一个序列转成列表 eval() #计算在字符串中的有限python表达式并返回一个对象pycharm交互 python console联系作者前10名粉丝不仅提供软件还提供激活码 运算符的分类 算数运算符赋值运算符复合赋值运算符比较运算符逻辑运算符算数运算符 运算符描述实例加11–减1-1*乘2*2/除10/2%取余9%4输出结果为1**指数24输出结果为16()小括号*小括号用来提高运算优先级即(12)3输出结果为9/除10/2输出结果为5//整除9//4输出结果为2 混合运算优先级顺序()高于**高于* / // % 高于 – 赋值运算符 运算符描述实例赋值将右侧的结果赋值给等号左侧的变量 单个变量赋值 num 1 print(num)多个变量赋值 num1,float1,str1 10,0.5,hello world print(num1) print(float1) print(str1)多变量赋相同值 a b 10 print(a) print(b) 复合赋值运算符 运算符描述实例加法赋值运算符c a 等价于c c a-减法赋值运算符c - a 等价于c c – a*乘法赋值运算符c * a 等价于c c * a/除法赋值运算符c / a 等价于 c c / a//整除赋值运算符c // a 等价于 c c // a%取余赋值运算符c % a 等价于 c c % a**幂赋值运算符c ** a 等价于 c c ** a 注意点先算符合赋值运算符右边表达式再算复合赋值运算 比较运算符 比较运算符也叫关系运算符通常用来判断。 运算符描述实例判断相等。如果两个操作数的结果相等则条件结果为真(True),否则条件结果为假(False)如a3b3,则ab为true!不等于。如果两个操作数的结果不相等则条件为真(True),否则条件结果为假(False)如a1b3,则a!b为true运算符左侧操作数结果是否小于等于右侧操作数结果如果小于则条件为真否则为假如a3,b3,则(a b)为true运算符左侧操作符结果是否小于右侧操作数结果如果小于则条件为真否则为假如a7,b3,则(ab)为false 逻辑运算符 运算符逻辑表达式描述实例andx and y一假即假true and true 返回trueorx or y一真即真false or true 返回 truenotnot x非真即假not true 返回 false a 1 b 2 c 3 print((a b) and (b c)) #true print((a b) and (b c)) #false print((a b) or (b c)) #true print(not (a b)) #true拓展 数字之间的逻辑运算 a 0 b 1 c 2 # and运算符只要有一个值为0则结果为0否则结果为最后一个非0数字 print(a and b) # 0 print(b and a) # 0 print(a and c) # 0 print(b and c) # 2 print(c and b) # 1 #or运算符只有所有值为0结果才为0否则结果为第一个非0数字 print(a or b) # 1 print(a or c) # 2 print(b or c) # 1条件语句 假设一个场景 同学们这个年龄去过网吧吗去网吧进门想要上网必须做的一件事是做什么考虑重点为什么要把身份证给工作人员是不是就是为了判断是否成年是不是如果成年可以上网如果不成年则不允许上网 其实这里所谓的判断就是条件语句即条件成立执行某些代码条件不成立则不执行这些代码。 单分支语法 if 条件:条件成立执行的代码1条件成立执行的代码2......多分支语法 if 条件:条件成立执行的代码1条件成立执行的代码2...... elif 条件:条件成立执行的代码1条件成立执行的代码2...... else 条件:条件成立执行的代码1条件成立执行的代码2......拓展 age 18 and age 60 可以化简为 18 age 60if嵌套 if 条件1:条件成立执行的代码1条件成立执行的代码2......if 条件2:条件成立执行的代码1条件成立执行的代码2......随机数拓展 import 模块名 #导出random模块 random.randint(开始,结束) #使用random模块中的随机整数功能三目运算符 三目运算符也叫三元运算符或三元表达式。 语法如下: # 条件成立执行的表达式 if 条件 else 条件不成立执行的表达式实例 a 1 b 2 c a if a b else b print(c) #需求有两个变量比较大小如果变量1 大于 变量2 执行 变量1 - 变量2否则 变量2 - 变量1 q 22 w 12 r q - w if q w else w - q print(r)while循环 循环的作用 循环的作用让代码更高效的重复执行。 循环的分类 在python中循环分为while和for两种最终实现效果相同。 语法 while 条件:条件成立重复执行的代码1条件成立重复执行的代码2......标题计数器 # 循环的计数器 i 0 while i 5:print(你好世界)i1print(任务结束)break和continue break和continue是循环中满足一定条件退出循环的两种不同方式。 理解 break是终止此循环continue是退出当前一次循环继而执行下一次循环代码。 实例九九乘法表 for循环 for 临时变量 in 序列:重复执行的代码1重复执行的代码2......else 循环可以和else配合使用else下方缩进的代码指的是当循环正常结束之后要执行的代码。 while…else 语法 while 条件:条件成立重复执行的代码 else:循环正常结束之后要执行的代码所谓else指的是循环正常结束之后要执行的代码即如果是break终止循环的情况else下方缩进的代码将不执行。因为continue是退出当前一次循环继续下一次循环所以该循环在continue控制下是可以正常结束的当循环结束后则执行了else缩进的代码。 for…else 语法 for 临时变量 in 序列:重复执行的代码... else:循环正常结束之后要执行的代码所谓else指的是循环正常结束之后要执行的代码即如果是break终止循环的情况else下方缩进的代码将不执行。 因为continue是退出当前一次循环继续下一次循环所以该循环在continue控制下可以正常结束的当循环结束后则执行了else缩进的代码。 字符串 下标 “下标”又叫”索引”就是编号。比如火车座位号座位号的作用按照编号快速找到对应的座位。同理下标的作用即是通过下标快速找到对应的数据。 切片 切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。 语法 序列[开始位置下标:结束位置下标:步长]注意 不包含结束位置下标对应的数据正负整数均可步长是选取间隔正负整数均可默认步长为1。 常用方法 字符串的常用操作方法有查找、修改和判断三大类。 查找 所谓字符串查找方法即是查找子串在字符串中的位置或出现的次数。 find():检测某个子串是否包含在这个字符串中如果在返回这个子串开始的位置下标否则则返回-1。 1.语法 字符串序列.find(子串开始位置下标结束位置下标)注意开始和结束位置下标可以省略表示在整个字符串序列中查找。 index():检测某个子串是否包含在这个字符串中如果在返回这个子串开始的位置下标否则则报异常. 1.语法 字符串序列.index(子串开始位置下标结束位置下标)注意开始和结束位置下标可以省略表示在整个字符串序列中查找。 rfind()和find()功能相同但查找方向为右侧开始。rindex()和index()功能相同但查找方向为右侧开始。count()返回某个子串在字符串中出现的次数 1.语法 字符串序列.count(子串开始位置下标结束位置下标)注意开始和结束位置下标可以省略表示在整个字符串序列中查找。 修改 所谓修改字符串,指的就是通过函数的形式修改字符串中的数据。 replace()替换 1.语法 字符串序列.replace(旧子串新子串替换次数)注意替换次数如果查出子串出现次数则替换次数为该子串出现次数。 调用replace函数后发现原有字符串的数据并没有得到修改修改后的数据是 replace函数的返回值 说明字符串是不可变数据类型 数据是否可以改变分为可变类型 和不可变类型。 split()按照指定字符分割字符串。 1.语法 字符串序列.split(分割字符num)注意num表示的是分割字符出现的次数即将来返回数据个数为num1个。 分割返回一个列表丢失分割字符 join()用一个字符或子串合并字符串即是将多个字符串合并为一个新的字符串。1.语法 字符或子串.join(多字符串组成的序列)注意合并列表里面的字符串数据为一个大字符串 大小写转换 capitalize()将字符串第一个字符转换成大写。注意capitalize()函数转换后只字符串第一个字符大写其他的字符全都小写。title()将字符串每个单词首字母转换成大写。lower()将字符串中大写转小写。upper()将字符串中小写转大写。删除空白字符lstrip()删除字符串左侧空白字符。rstrip()删除字符串右侧空白字符。strip()删除字符串两侧空白字符。字符串对齐ljust()返回一个原字符串左对齐并使用指定字符默认空格填充至对应长度的新字符串。left 1.语法 字符串序列.ljust(长度填充字符)rjust()返回一个原字符串右对齐并使用指定字符默认空格填充至对应长度的新字符串语法和ljust()相同。(right)center()返回一个原字符串居中对齐并使用指定字符默认空格填充至对应长度的新字符串语法和ljust()相同。 判断 所谓判断即是判断真假返回的结果是布尔型数据类型true或false。 startswith()检查字符串是否是以指定子串开头是则返回true否则返回false。如果设置开始和结束位置下标则在指定范围内检查。 1.语法 字符串序列.startswith(子串开始位置下标结束位置下标)endswith()判断字符串是否以某个子串结尾isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回true否则返回false。isdigit()如果字符串只包含数字则返回true否则返回false。isalnum()如果字符串至少有一个字符并且所有字符都是字母或数字则返回true否则返回false。isspace()如果字符串中包含空白则返回true否则返回false。 列表 列表的格式 [数据1数据2数据3数据4......]列表可以一次性存储多个数据且可以为不同数据类型。列表数据可改 列表的常用操作 列表的作业是一次性存储多个数据程序员可以对这些数据进行的操作有增、删、改、查。 下标 从0开始 index()返回指定数据所在位置的下标。 1.语法 列表序列.index(数据开始位置下标结束位置下标)注意如果查找的数据不存在则报错。 count()统计指定数据在当前列表中出现的次数。len()访问列表长度即列表中数据的个数。 判断是否存在 in:判断指定数据在某个列表序列如果在返回true否则返回falsenot in判断指定数据不在某个列表序列如果不在返回true否则返回false 列表增加数据 作用增加指定数据到列表中。append()列表结尾追加数据。 1.语法 列表序列.append(数据)2.注意 如果append()追加的数据是一个序列则追加整个序列到列表 extend()列表结尾追加数据如果数据是一个序列则将这个序列的数据逐一添加到列表。 1.语法 列表序列.extend(数据)2.注意 如果是一个序列会把序列数据拆开追加列表中 insert()指定位置新增数据。 1.语法 列表序列.insert(位置下标数据)列表数据删除 del 1.语法 del 目标pop()删除指定下标的数据默认为最后一个并返回该数据。 1.语法 列表序列.pop(下标)remove()移除列表中某个数据的第一匹配项。 1.语法 列表序列.remove(数据)clear()清空列表 列表数据修改 修改指定下标数据逆置reverse()排序sort() 1.语法 列表序列.sort(key None,reverse False)注意reverse表示排序规则reverse True 降序reverse False升序默认 列表复制数据 函数copy() name_list {MR,LILY,ROSE} list1 name_list.copy() print(list1) print(name_list)列表的循环遍历 需求依次打印列表中的各个数据。 while 代码 name_list [MR,LILY,ROSE] i 0 while i len(name_list):print(name_list[i])i 1for 代码 name_list [MR,lily,rose] for i in name_list:print(i)列表嵌套 所谓列表嵌套指的就是一个列表里面包含了其他的子列表。 应用场景要存储班级一、二、三个班级学生姓名且每个班级的学生姓名在一个列表。 name_list [[小明,小红,小绿],[wk,lily,rose],[张三,李四,王五]]思考如何查找到数据”李四”? #第一步按下标查找到李四所在的列表 print(name_list[2]) #第二步从李四所在的列表里面再按下标找到数据李四 print(name_list[2][1])元组 元组的应用场景定义元组元组常用操作 元组的应用场景 思考如果想要存储多个数据但是这些数据是不能修改的数据则么办 答列表列表可以一次性存储多个数据但是列表中的数据允许更改。 num_list [10,20,30] num_list[0] 100一个元组可以存储多个数据元组内的数据是不可能修改的。 定义元组 元组特点定义元组使用小括号且逗号隔开各个数据数据可以是不同的数据类型。 #多个数据元组 t1 (10,20,30) #单个数据元组 t2 (10,)注意如果定义的元组只有一个数据那么这个数据后面也好添加逗号否则数据类型为唯一的这个数据的数据类型 t2 (10,) print(type(t2)) #tuple t3 (20) print(type(t3)) #int t4 (hello) print(type(t4)) #str元组的常用操作 元组数据不支持修改只支持查找具体如下 按下标查找数据 typle1 (aa,bb,cc,bb)index()查找某个数据如果数据存在返回对应的下标否则报错语法和列表、字符串的index方法相同。 typle1 (aa,bb,cc,bb) print(tpple1.index(aa))count()统计某个数据在当前元组出现的次数。 tuple1 (aa,bb,cc,bb) print(tuple1.count(bb))len()统计元组中数据的个数。 tuple1 (aa,bb,cc,bb) print(len(tuple1))元组修改操作 注意元组内的数据直接修改会报错 t1 (aa,bb,cc,bb) t1[0] aaa但是如果元组里面有列表修改列表里面的数据则是支持的。 t2 (aa,bb,[cc,dd]) print(t2[2]) t2[2][0] ccc字典 字典的应用场景 思考1如果有多个数据例如‘MR’,‘男’’20‘如何快速存储 答列表 list1 [MR,男,20]思考2如何查找到数据’Tom‘ ? 答查找到下标为0的数据即可。 list1[0]思考3如果将来数据顺序发生变化如下所示还能用list[0] 访问到数据’MR’吗 list1 [男20MR]答不能数据’Tom’此时下标为2. 思考4数据顺序发生变化每个数据的下标也会随之变化如何保证数据顺便变化前后使用同一的标准数据查找数据呢 答字典字典里面的数据是一键值对形式出现字典数据和数据顺序没有关系即字典不支持下标后期无论数据如何变化只需要按照对应的键的名字查找数据即可。 创建字典的语法 字典特点 符号为大括号数据为键值对形式出现各个键值对之间用逗号隔开 # 有数据字典 dict1 {name:Wk,age:20,gender:男}# 空字典 dict2 {} dict3 dict()字典常见操作 增 写法字典序列[key] 值 注意如果key存在则修改这个key对应的值如果key不存在则新增此键值对。 dict1 {‘name’:MR,age:20,gender:男} dict1[name] Rose #结果{name:Rose,age:20,gender:男} print(dict1) dict1[id] 110 #{name:Rose,age: 20,gender:男,id:110} print(dict1)注意字典为可变类型。 删 del()/del删除字典或删除字典中指定键值对。 dict1 {name:MR,age:20,gender:男} del dict1[gender] #结果{name:Tom,age:20} print(dict1) clear()清空字典 dict1 {name:MR,age:20,gender:男} dict1.clear()改 写法字典序列[key] 值 注意如果key存在则修改这个key对应的值如果key不存在则新增此键值对。 查 key值查找 dict1 {name:MR,age:20,gender:男} print(dict1[name]) print(dict1[id])如果当前查找的key存在则返回对应的值否则报错。 get() 语法 字典序列.get(key,默认值)注意如果当前查找的key不存在则返回第二个参数默认值如果省略第二个参数则返回None。 - keys() dict1 {name:MR,age:20,gender:男} print(dict1.keys()) #dict_keys([name,age,gender])- values() dict1 {name:MR,age:20,gender:男} print(dict1.values()) #dict_values([tom,20,男])- items() dict1 {name:MR,age:20,gender:男} print(dict1.items()) #dict_items([name,tom),(age,20),(gender,男])字典的循环遍历 遍历字典的key dict1 {name:wk,age:20,gender:男} for key in dict1.keys():print(key)遍历字典的value dict1 {name:wk,age:20,gender:男} for value in dict1.values():print(value)遍历字典的元素 dict1 {name:wk,age:20,gender:男} for item in dict1.items():print(item)遍历字典的键值对 dict1 {name:wk,age:20,gender: 男} for key,value in dict1.items():print(f{key} {value})集合 创建集合 创建集合使用{}或set(),但是如果要创建空集合只能使用set(),因为{}创建空字典。 s1 {10,20,30,40,50} print(s1) s2 {10,30,20,10,30,40,30,50} print(s2) s3 set(abcdefg) print(s3) s4 set() print(type(s4)) #set s5 {} print(type(s5)) #dict注意集合有去重功能 集合数据没有顺序 集合常见操作方法 增加数据 add() s1 {10,20} s2.add(100) s1.add(10) print(s1) #{100,10,20}因为集合有去重功能所以当向集合内追加的数据是当前集合已有数据的话则不进行任何操作。 update(),追加的数据是序列 s1 {10,20} #s1.update(100) #报错 s1.updata([100,200]) s1.updata(abc)删除数据 remove(),删除集合中的指定数据如果数据不存在则报错。 s1 {1020} s1.remove(10) print(s1) s1.remove(10) #报错 print(s1)discard()删除集合中的指定数据如果数据不存在也不会报错。 s1 {10,20} s1.discard(10) print(s1) s1.discard(10) print(s1)pop(),随机删除集合中的某个数据并返回这个数据。 s1 {10,20,30,40,50} del_num s1.pop() print(del_num) print(s1)查找数据 in:判断数据在集合序列not in: 判断数据不在集合序列 s1 {10,20,30,40,50} print(10 in s1) print(10 not in s1)公共操作 一、运算符 运算符描述支持的容器类型合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 二、公共方法 函数描述len()计算容器中元素个数del 或 del()删除max()返回容器中元素最大值min()返回容器中元素最小值range(start,end,step)生成从start到end的数字步长为step供for循环使用enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列同时列出数据和数据下标一般用在for循环当中。 注意range()生成的序列不包含end数字 enumerate(可遍历对象,start0) #start参数用来设置遍历数据的下标的起始值默认为0. #返回结果是元组元组第一个数据是原迭代对象的数据对应的下标元组第二个数据是原迭代对象的数据 list1 [a,b,c,d,e] for i in enumerate(list1):print(i)for index,char in enumerate(list1,start1):print(f下标是{index},对应的字符是{char})容器类型转换 tuple() 作用将某个序列转换成元组 list() 作用将某个序列转换成列表 set() 作用将某个序列转换成集合 注意1.集合可以快速完成列表去重 2.集合不支持下标 推导式 列表推导式字典推导式集合推导式 列表推导式 作用用一个表达式创建一个有规律的列表或控制一个有规律列表。 列表推导式又叫列表生成式。 while循环实现 # 1.准备一个空列表 list1 [] # 2.书写循环依次追加数字到空列表list1中 i 0 while i 10:list1.append(i)i 1 print(list1)for循环实现 list1 [] for i in range(10):list1.append(i) print(list1)列表推导式实现 list1 [i for i in range(10)] # 返回数据 遍历数据 print(list1)带if的列表推导式 需求创建0-10的偶数列表 方法一range()步长实现 list1 [i for i in range(0,10,2)] print(list1)方法二if实现 list1 [i for i in range(10) if i % 2 0] print(list1)多个for循环实现列表推导式 需求创建列表如下 [(1,0),(1,2),(1,2),(2,0),(2,1),(2,2)]代码如下 list1 [(i,j) for i in range(1,3) for j in range(3)] print(list1)字典推导式 思考如果有如下两个列表 list1 [name,age,gender] list2 [tom,20,man]如何快速合并为一个字典 字典推导式 字典推导式作用快速合并列表为字典或提取字典中目标数据 #创建一个字典字典key是1-5数字value是这个数字的2次方 dict1 {i: i**2 for i in range(1,5)} print(dict1) #{1:1,2:4,3:9,4:16}将两个列表合并为一个字典 list1 [name,age,gender] list2 [tom,20,man] dict1 {list1[i]:list2[i] for i in range(len(list1))} print(dict1)注意如果两个列表数据个数相同len统计任何一个列表的长度都可以 如果两个列表数据个数不同len统计数据多的列表数据个数会报错len统计数据少的列表数据个数不会报错。 提取字典中目标数据 counts {MBP:268,HP:125,DELL:201,Lenovo:199,acer:99} #需求;提取上述电脑数量大于等于200的字典数据 count1 {key : value for key,value in counts.items() if value 200 } print(count1)集合推导式 需求创建一个集合数据为下方列表的2次方 list1 [1,1,2] set1 {i ** 2 for i in list1} print(set1)集合有数据去重功能 函数基础 函数的作用函数的使用步骤函数的参数作用函数的返回值作用函数的说明文档函数嵌套 函数的作用 需求用户到ATM机取钱 1、输入密码后显示”选择功能”界面 2、查询余额后显示“选择功能“界面 3、取2000后显示”选择功能“界面 特点显示”选择功能“界面需要重复输出给用户则么实现 函数的定义函数就是将一段具有独立功能的代码块整合到一个整体并命名在需要的位置调用这个名称即可完成对应的需求。 函数在开发过程中可以更高效的实现代码重用。 定义函数 def 函数名(参数):代码1代码2......调用函数 函数名(参数)注意: 1.不同的需求参数可有可无。 2.在python中函数必须先定义后使用。 案例 1.搭建整体框架(复现需求) print(密码正确登录成功) #显示‘选择功能’界面 print(查询余额完毕) #显示”选择功能“界面 print(取了2000元钱) #显示”选择功能“界面2.确定”选择功能“界面 print(查询余额) print(存款) print(取款)3.封装”选择功能“ 注意一定是先定义函数后调用函数。 #封装ATM机功能选项 -- 定义函数 def select_func():print(-----请选择功能-----)print(查询余额)print(存款)print(取款)print(-----请选择功能-----)4.调用函数 在需要显示”选择功能“函数的位置调用函数。 print(密码正确登录成功) #显示”选择功能“界面 -- 调用函数 select_func()函数的注意事项 1.不同的需求参数可有可无。 2.在python中函数要先定义在使用。 函数的参数作用 思考完成需求如下一个函数完成两个数1和2的加法运算如何书写程序 定义函数 def add_num1():result 1 2print(result)#调用函数 add_num1()思考上述add_num1函数只能完成数字1和2的·加法运算如果想要这个函数变得更灵活可以任何用户指定的两个数字的和如何书写程序 分析用户要在调用函数的时候指定具体数字那么在定义函数的时候就需要接收用户指定的数字函数调用时候指定的数字和定义函数时候接收的数字即是函数的参数。 #定义函数时同时定义了接收用户数据的参数a和ba和b是形参 def add_num2(a,b):result a bprint(result)#调用函数时传入了真实的数据10和20真实数据为实参 add_num2(10,20)函数的返回值作用 例如我们去超市购物比如买烟给钱之后是不是售货员会返回给我们烟这个商品在函数中如果需要返回结果给用户需要使用函数返回值。 def buy():return 烟 #使用变量保存函数返回值 goods buy() print(goods)应用 需求制作一个计算器计算任意两数字之和并保存结果。 def sum_num(a,b):return a b #用result变量保存函数返回值 result sum_num(1,2) print(result)函数的说明文档 思考定义一个函数后程序员如何书写程序能够快速提示这个函数的作用 答注释 思考如果代码多我们是不是需要在很多代码中找到这个函数定义的位置才能看到注释如果想更方便的查看函数的作用则么办 答函数的说明文档 注意函数的说明文档也叫函数的文档说明。 语法 help() #help函数的作用查看函数的说明文档函数的解释说明的信息 def 函数名(参数): #表达1说明文档的位置代码 def 函数名(参数): #表达2(在多行注释中间打回车自动生成参数说明)参数一参数二说明文档的位置代码 help(函数名)函数嵌套调用 所谓函数嵌套调用指的是一个函数里面又调用了另一个函数 示例 def testB():print(--- testB start ----)print(这里是testB函数执行的代码...(省略)...)print(---- testB end----)def testA():print(---- testA start----)testB()print(---- testA end----)testA()打印图形 1.打印一条横线 def print_line():print(- * 20)print_line()2.打印多条横线 def print_line():print(- * 20)def print_lines(num):i 0whlie i num:print_line()i 1 print_lines(5)函数计算 1、求三个数之和 def sum_num(a,b,c):return a b c result sum_num(1,2,3) print(result) #62、求三个数平均值 def sum(a,b,c):return a b c def avg(a,b,c):sun sum(a,b,c)return sun / 3 giao avg(1,2,3) print(giao)函数升级 变量作用域多函数程序执行流程函数的返回值函数的参数拆包和交换两个变量的值引用可变和不可变类型 变量作用域 变量作用域指的是变量生效的范围主要分为两类局部变量和全局变量。 局部变量 所谓局部变量是定义在函数体内部的变量即只在函数体内部生效。 def testA():a 100print(a)testA() #100 print(a) #报错name a is not defined变量a是定义在testA函数内部的变量在函数外部访问则立即报错。 局部变量的作用在函数体内部临时保存数据即当函数调用完成后则销毁局部变量。 全局变量 所谓全局变量指的是在函数体内、外都能生效的变量。 思考如果有一个数据在函数A和函数B中都要使用该则么办 答将这个数据存储在一个全局变量里面。 # 定义全局变量a a 100 def testA():print(a) #访问全局变量a,并打印变量a存储的数据def testB():print(a) #访问全局变量a,并打印变量a存储的数据testA() #100 testB() #100修改全局变量 思考testB函数需求修改变量a的值为200如何修改程序 a 100 def testA():print(a)def testB():a 200print(a)testA() #100 testB() #200 print(f全局变量a {a}) #全局变量a 100思考在testB函数内部的a 200中的变量a是在修改全局变量a吗 答不是。观察上述代码发现15行得到a的数据是100任然是定义全局变量a时候的值而没有返回testB函数内部200.因此testB函数内部的 a 200是定义了一个全局变量。 思考如何在函数体内部修改全局变量 a 100 def testA():print(a)def testB():#global 关键字声明a是全局变量global aa 200print(a)多函数程序执行流程 一般在实际开发过程中一个程序往往由多个函数(后面知识中会讲解类)组成并且多个函数共享某些数据如下所示: 共用全局变量 #1.定义全局变量 glo_num 0 def test1():global glo_num#修改全局变量glo_num 100def test2():#调用test1函数中修改后的全局变量print(glo_num)#2.调用test1函数执行函数内部代码声明和修改全局变量 test1() #3.调用test2函数执行函数内部代码打印 test2() #100返回值作为参数传递 def test1():return 50 def test2(num):print(num)#1.保存函数test1的返回值 result test1() #2.将函数返回值所在变量作为参数传递到test2函数 test2(result) #50函数的返回值 思考如果一个函数返回两个return如下所示程序如何执行 def return_num():return 1return 2 result return_num() print(result) #1答只执行了第一个return原因是因为return可以退出当前函数导致return下方的代码不执行 思考如果一个函数要有多个返回值该如何书写代码 def return_num():return 1,2 result return_num()注1.return可以直接返回书写元组、列表、字典、返回多个值 2.return a,b写法返回多个·数据的时候默认是元组类型 函数的参数 位置参数 位置参数调用函数时根据函数定义的参数位置来传递参数。 def user_info(name,age,gender):print(f您的名字是{name},年龄是{age},性别是{gender})user_info(TOM,20,男)注意传递和定义参数的顺序及个数必须一致。 关键字参数 函数调用通过“键值”形式加以指定。可以让函数更加清晰容易使用同时也清楚了参数的顺序需求。 def user_info(name,age,gender):print(f您的名字是{name},年龄是{age}性别是{gender})user_info(Rose,age20,gender女) user_info(小明,gender男,age16)注意函数调用时如果有位置参数时位置参数必须在关键字参数的前面但关键字参数之间不存在先后顺序。 缺省参数 缺省参数也叫默认参数用于定义函数为参数提供默认值调用函数时可不传该默认参数的值注所有位置参数必须出现在默认参数前包括函数定义和调用 def user_info(name,age,gender男):print(f您的名字是{name},年龄是{age}性别是{gender})user_info(TOM,20) user_info(Rose,18,女)注意函数调用时如果为缺省参数传值则修改默认参数值否则使用这个默认值。 不定长参数 不定长参数也叫可变参数。用于不确定调用的时候会传递多个参数(不传参也可以)的场景。此时可以包裹packing位置参数或者包裹关键字参数来进行参数传递会显得非常方便。 包裹位置传递 def user_info(*args): #默认*args底层是这个但args可以替换print(args)#(TOM,) user_info(TOM) #(TOM,18) user_info(TOM,18)注意;传进的所有参数都会被args变量收集它会根据传进参数的位置合并为一个元组tupleargs是元组类型这就是包裹位置传递。 包裹关键字传递 def user_info(**kwargs):print(kwargs)#(name:TOM,age:18,id:110) user_info(TOM,age18,id110)注意关键字组包返回是字典类型 综上无论是包裹位置传递还是包裹关键字传递都是一个组包的过程。 拆包和交换变量值 拆包 拆包元组 def return_num():return 100,200 num1,num2 return_num() print(num1) #100 print(num2) #200拆包字典 dict1 {name:TOM,age:18} a,b dict1 #对字典进行拆包取出来的是字典的key print(a) #name print(b) #age print(dict1[a]) #TOM print(dict1[b]) #18交换变量值 需求有变量a 10 和 b 20,交换两个变量的值 方法一 借助第三变量存储数据。 # 1.定义中间变量 c 0 #2.将a的数据存储到c c a #3.将b的数据20赋值到a此时 a 20 a b #4.将之前c的数据10赋值到b此时b 10 b c print(a) #20 print(b) #10方法二 a,b 1,2 a,b b,a print(a) print(b)引用 在python中值是靠引用来传递来的。 我们可以用id()来判断两个变量是否为同一个值的引用。我们可以将id值理解为那块内存的地址标识。 int类型不可变类型 #1.int类型(不可变类型) 将独立开辟内存空间存储 a 1 b a print(b) #1 print(id(a)) #140708464157520 print(id(b)) #140708464157520 a 2 print(b) #1.说明int类型为不可变类型列表(可变类型) #2.列表 aa [10,20] bb aa print(id(aa)) #2500998619656 print(id(bb)) #2500998619656 aa.append(30) print(id(aa)) #2500998619656 print(id(bb)) #2500998619656引用当实参 def test1(a):print(a)print(id(a))a aprint(a)print(id(a))#int:计算前后id值不同 b 100 test1(b)#列表计算前后id值相同 c [11,22] test1(c)可变类型和不可变类型 所谓可变类型与不可变类型是指数据能够直接进行修改如果能修改那么就是可变否则是不可变。 可变类型列表字典集合不可变类型整型浮点型字符串元组 函数加强 目标 应用学员管理系统递归lambda表达式高阶函数 应用学员管理系统 系统介绍 需求进入系统显示系统功能界面功能如下: 添加学员删除学员修改学员信息查询学员信息显示所有学员信息退出系统系统共6个功能用户根据自己需求选取。 1.2步骤分析 1.显示功能界面 2.用户输入功能序号 3.根据用户输入的功能序号执行不同的功能(函数) 3.1 定义函数 3.2 调用函数 总体框架 # 定义功能界面函数 def info_print():print(请选择功能.......)print(1、添加学员)print(2、删除学员)print(3、修改学员)print(4、查询学员)print(5、显示所有学员)print(6、退出系统)print(-*20) # 1.显示界面 while True:info_print()# 2.按照用户输入的功能user_num int(input(请输入功能序号))#3、按照用户输入的功能序号执行不同的功能函数# 如果用户输入1.执行添加如果用户输入2.执行删除....if user_num 1:print(添加)elif user_num 2:print(删除)elif user_num 3:print(修改)elif user_num 4:print(查询)elif user_num 5:print(显示所有学员)elif user_num 6:print(退出系统)1.3需求实现 所有功能函数都是操作学员信息所有存储所有学员信息应该是一个全局变量数据类型为列表。 info []1.3.1 显示功能界面 定义函数print_info,负责显示系统功能。 # 定义功能界面函数 def info_print():print(请选择功能.......)print(1、添加学员)print(2、删除学员)print(3、修改学员)print(4、查询学员)print(5、显示所有学员)print(6、退出系统)print(-*20) # 1.显示界面 while True:info_print()1.3.2 添加学员 需求分析 1、接收用户输入学员信息并保存 2、判断是否添加学员信息 2.1 如果学员姓名已经存在则报错提示 2.2如果学员姓名不存在则准备空字典将用户输入的数据追加到字典再列表追加字典数据 3、对应的if条件成立的位置调用该函数 代码实现 # 定义添加功能函数 def info_add():添加学员函数#接收用户输入学员信息new_idinput(请输入学号)new_nameinput(请输入姓名)new_telinput(请输入电话)global info #声明全局变量for i in info: #判断是否重名if new_name i[name]:print(此用户存在)returninfo_dict {}info_dict[id] new_idinfo_dict[name] new_nameinfo_dict[tel] new_telinfo.append(info_dict)1.3.3 删除学员 需求分析 按用户输入的学员姓名进行删除 1.用户输入目标学员姓名 2.检查这个学员是否存在 2.1如果存在则列表删除这个数据 2.2如果不存在则提示“该用户不存在” 3.对应的if条件成立的位置调用该函数 代码实现 #定义删除学员 def info_del():删除学员del_name input(请输入要删除的学员的姓名)global infofor i in info:if del_name i[name]:info.remove(i)breakelse:print(该学员不存在)print(info)1.3.4 修改学员信息 需求分析 1.用户输入目标学员姓名 2.检查这个学员是否存在 2.1 如果存在则修改这位学员信息例如手机号 2.2 如果不存在则报错 3.对应的if条件成立的位置调用函数 代码实现 #定义修改学员 修改学员 def info_alt():alt_name input(请输入学员姓名)global infofor i in info:if alt_name i[name]:i[tel] input(请输入新的手机号)breakelse:print(该学员不存在)1.3.5 查询学员信息 需求分析 用户输入目标学员姓名 检查学员是否存在2.1 如果存在则显示这个学员的信息2.2 如果不存在则报错提示 对应的if条件成立的位置调用该函数 代码实现 #查询学员信息 def info_find():查询学员find_name input(请输入要查找的学员姓名)global infofor i in info:if find_name i[name]:print(查询到的信息如下......)print(f学员的学号是{i[id]},姓名是{i[name]},手机号是{i[tel]})breakelse:print(查无此人)1.3.6 显示所有学员信息 需求分析 打印所有学员信息 代码实现 #显示所有学员信息 def info_printall():显示所有学员信息print(学号\t姓名\t手机号)for i in info:print(f{i[id]}\t{i[name]}\t{i[tel]})1.3.7 退出系统 在用户输入功能序号6的时候要退出系统代码如下 elif user_num 6:info_exit input(确定要退出程序吗yes退出no不退出)if info_exit yes:break 1.3.8 完整代码 info [] # 定义功能界面函数 def info_print():print(请选择功能.......)print(1、添加学员)print(2、删除学员)print(3、修改学员)print(4、查询学员)print(5、显示所有学员)print(6、退出系统)print(-*20) # 定义添加功能函数 def info_add():添加学员函数#接收用户输入学员信息new_idinput(请输入学号)new_nameinput(请输入姓名)new_telinput(请输入电话)global info #声明全局变量for i in info: #判断是否重名if new_name i[name]:print(此用户存在)returninfo_dict {}info_dict[id] new_idinfo_dict[name] new_nameinfo_dict[tel] new_telinfo.append(info_dict) #定义删除学员 def info_del():删除学员del_name input(请输入要删除的学员的姓名)global infofor i in info:if del_name i[name]:info.remove(i)breakelse:print(该学员不存在)print(info) #定义修改学员 修改学员 def info_alt():alt_name input(请输入学员姓名)global infofor i in info:if alt_name i[name]:i[tel] input(请输入新的手机号)breakelse:print(该学员不存在) #查询学员信息 def info_find():查询学员find_name input(请输入要查找的学员姓名)global infofor i in info:if find_name i[name]:print(查询到的信息如下......)print(f学员的学号是{i[id]},姓名是{i[name]},手机号是{i[tel]})breakelse:print(查无此人) #显示所有学员信息 def info_printall():显示所有学员信息print(学号\t姓名\t手机号)for i in info:print(f{i[id]}\t{i[name]}\t{i[tel]}) # 1.显示界面 while True:info_print()# 2.按照用户输入的功能user_num int(input(请输入功能序号))#3、按照用户输入的功能序号执行不同的功能函数# 如果用户输入1.执行添加如果用户输入2.执行删除....if user_num 1:info_add()elif user_num 2:info_del()elif user_num 3:info_alt()elif user_num 4:info_find()elif user_num 5:info_printall()elif user_num 6:info_exit input(确定要退出程序吗yes退出no不退出)if info_exit yes:breakelse:print(输入的功能序号有误)递归函数和匿名函数 递归 1、递归的应用场景 递归是一种编程思想应用场景 在我们日常开发中如果要遍历一个文件夹下面所有的文件通常会使用递归来实现在后续的算法课程中很多算法都离不开递归例如快速排序。 2、递归的特点 函数的内部自己调用自己 必须有出口 3、应用3以内数字累加和 代码 # 3 2 1 def sum_numbers(num):# 1.如果是1直接返回1 -- 出口if num 1:return 1 #return的作用返回值、退出函数# 2.如果不是1重复执行累加并返回结果return num sum_numbers(num-1) sum_result sum_numbers(3) #输出结果为6 print(sum_result)lambda表达式 lambda的应用场景 如果一个函数有一个返回值并且只有一句代码可以使用lambda简化。 lambda语法 lambda 参数列表 : 表达式lambda表达式的参数可有可无函数的参数在lambda表达式中完全适用。lambda表达式能接收任何数量的参数但只能返回一个表达式的值。 应用 def fn1():return 100 ws fn1() print(ws) wq lambda:200 print(wq())注意:直接打印lambda表达式输出的是此lambda的内存地址 应用计算a b def add(a,b):return a b print(add(1,2)) aq lambda a,b:ab print(aq(1,2))lambda的参数形式 无参数 wq lambda:100 print(wq())一个参数 wq lambda i : i print(wq(hello python))默认参数 wq lambda a,b,c100:abc print(wq(10,20))位置可变参数args(返回元组) wq lambda *args: args print(wq(10,20,30))关键字可变参数**kwargs返回字典 wq lambda **kwargs: kwargs print(wq(namepython,giao1234))lambda的应用 带判断的lambda wq lambda a,b: a if a b else b print(fn1(1000,500))列表数据按字典key的值排序 students [{name:TOM,age:20},{name:giao,age:17},{name:jack,age:22} ] #1.name key对应的值进行升序排序 students.sort(keylambda x:x[name]) #2.name key对应的值进行降序排序 students.sort(keylambda x:x[name],reverseTrue) #3.age key对应的值进行排序 students.sort(keylambda x:x[age])高阶函数 把函数作为参数传入这样的函数称为高阶函数高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式 体验高阶函数 在python中abs()函数可以完成对数字求绝对值计算。 abs(-10) #10 round()函数可以完成对数字的四舍五入计算。round(1.2) #1 round(1.9) #2需求任意两个数字按照指定要求整理数字后再进行求和计算。 方法1 def add_ num(a,b):return abs(a) abs(b) result add_num(-1,2) print(result) #3方法2 def sum_num(a,b,f):return f(a) f(b) result sum_num(-1,2,abs) print(result) #3注意两种方法对比之后发现方法2的代码会更加简洁函数灵活性更高。函数式编程大量使用函数减少了代码的重复因此程序比较短开发速度较快。 内置高阶函数 map() 需求计算list1序列中各个数字的2次方。 list1 [1,2,3,4,5] def func(x):return x ** 2 result map(func,list1) print(result) #map object at 0x000001A0FFE8E7F0 print(list(result)) #[1,4,9,16,25]reduce() reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计算。 注意reduce()传入的参数func必须接收2个参数。 需求计算list1序列中各个数字的累加和。 import functools list1 [1,2,3,4,5] def func(a,b):return a b result functools.reduce(func,list1) print(result) #15filter() filter(func,lst)函数用于过滤序列过滤掉不符合条件的元素返回一个filter对象。如果要转换为列表可以使用list()来转换。 list1 [1,2,3,4,5,6,7,8,9,10] def wqw(x):return x%20 result filter(wqw,list1) print(list(result))文件操作 文件操作的作用文件的基本操作打开读写关闭文件备份文件和文件夹的操作 文件操作的作用 总结文件操作的作用就是把一些内容数据存储存放起来可以让程序下一次执行的时候直接使用而不必重新制作一份省时省力。 文件的基本操作 文件操作步骤 1、打开文件 2、读写等操作 3、关闭文件 注意可以只打开和关闭文件不进行任何读写操作。 打开 在python使用open函数可以打开一个已经存在的文件或者创建一个新文件语法如下 open(name,mode)name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。 mode:设置打开文件的模式访问模式只读写入、追加等。 打开文件模式 模式描述r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。r打开一个文件用于读写。文件指针将会放在文件的开头。rb以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。w打开一个文件只用于写入。如果该文件已存在则打开文件并从开头开始编辑即原有内容会被删除。如果该文件不存在创建新文件。wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件并从开头开始编辑即原有内容会被删除。如果该文件不存在创建新文件。w打开一个文件用于读写。如果该文件已存在则打开文件并从开头开始编辑即原有内容会被删除。如果该文件不存在创建新文件。wb以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件并从开头开始编辑即原有内容会被删除。如果该文件不存在创建新文件。a打开一个文件用于追加。如果该文件已存在文件指针将会放在文件的结尾。也就是说新的内容将会被写入到已有内容之后。如果该文件不存在创建新文件进行写入。ab以二进制格式打开一个文件用于追加。如果该文件已存在文件指针将会放在文件的结尾。也就是说新的内容将会被写入到已有内容之后。如果该文件不存在创建新文件进行写入。a打开一个文件用于读写。如果该文件已存在文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在创建新文件用于读写。ab以二进制格式打开一个文件用于追加。如果该文件已存在文件指针将会放在文件的结尾。如果该文件不存在创建新文件用于读写。 本人微信公众号祖龙科技工作室博客主页孤客网络科技工作室官方账号欢迎点赞收藏⭐️留言 如有错误敬请指正本文由孤客原创若侵权联系作者首发于CSDN博客停下休息的时候不要忘了别人还在奔跑希望大家抓紧时间学习全力奔赴更好的生活
http://www.dnsts.com.cn/news/21244.html

相关文章:

  • 做英文网站哪里好网站不续费
  • 网站开发用笔记本电脑公司管理培训课程
  • 做网站除了域名还需要什么大数据推广公司
  • 个人建网站简易方法注册公司代理记账
  • 网页设计 网站建设 哪个好wordpress数据库设置密码
  • 怎样建设网络游戏网站门店做网站有没有必要
  • 秦皇岛手机网站新产品推广方案策划
  • 做网站图片怎么找基于企业网站的网络营销方法
  • ipv6改造 网站怎么做6重庆市工信部网站
  • 网站制作公司新鸿儒网站建设费计入那个科目
  • 书店网站建设方案网站建设上海网站建设
  • 做网站最好要买什么东西好看的网站的导航怎么做
  • 建设网站设计专业服务wordpress 谷歌头像
  • 山东青岛网站建设公司排名网页设计结束语
  • 哪些网站是做设计的山西住房建设部网站
  • 网站的关键词可以取消吗wordpress 不用插件代码高亮
  • 像聚美网站建设费用网页设计教程读后感
  • 网站开发的要注意基本原则深圳网站建设seo优化
  • 江阴做网站公司短视频app开发有哪些公司
  • 海南网站定制网站建设高端网页设计
  • 做实验流程图的网站百度手机助手app
  • 青州网站设计公司企业如何开展网络营销
  • 电子商务网站建设步网站展示重点
  • 展示型网站可以优化吗公司logo设计欣赏
  • 4399网站开发人员 被挖走做a视频网站
  • 一个好的网站建设需要多少钱济南建设网站需要
  • ps网站交互设计织梦dedecms绿色led照明公司企业网站模板 下载
  • 有域名怎么建立网站建设外围彩票网站
  • 苏州网站优化维护做网站自动上传文章
  • 服务器两个域名一个ip做两个网站php wordpress joom