python基础,列表,元组,键值对,日期时间,高级特性(切片,迭代,列式推导) 电脑版发表于:2022/5/17 15:41 [TOC] ## Python的安装 #### windows环境: https://www.python.org/downloads/windows/ 找一个你想要的版本,下载即可。比如下载3.99版本,直接下载安装文件 ![](https://img.tnblog.net/arcimg/aojiancc2/f1780c97fb81491c9c7bdc3db2222054.png) 安装的时候把添加到环境变量勾上。Add Python to Path。这样就不用添加完成后在自己配置一次环境变量了。 ![](https://img.tnblog.net/arcimg/aojiancc2/bb37f2b76884409a95f4da88ce7db974.png) ![](https://img.tnblog.net/arcimg/aojiancc2/822b90528ab649b8888d79c196c49ea7.png) 安装完成后就可以使用python命令试试,是否安装成功了。 ## python的基础命令 ##### 查看python版本号 ``` python --version ``` 或者,使用-V,大写的V ``` python -V ``` ##### 进入python命令行 直接输入python即可 ![](https://img.tnblog.net/arcimg/aojiancc2/d660c0b9517948c98f50abf8bf0e56d0.png) ##### 退出python命令行 exit()或者ctrl+z ![](https://img.tnblog.net/arcimg/aojiancc2/123c22b184044bc29c4e79343fc1d6d5.png) ## Python基本语法 ### Python注释 注释: ``` # 定义一个变量 str = 'hello python' ''' hello python多行注释 ''' """ hello python多行注释 """ print(str) ``` ### Python变量 ### Python的输入输出 input接受输入,print输出 ```python username = input("请输入用户名:\n") print("你输入的内容为:"+username) ``` ![](https://img.tnblog.net/arcimg/aojiancc2/07607122e98940df9d2b761a78a9a865.png) 输入输出做一个简单的加法计算: ``` number1 = input("请输入加数1:\n") number2 = input("请输入加数2:\n") result = int(number1)+int(number2) print("两数之和为:"+str(result)) ``` tn>注意:python中,print函数不能同时识别2种数据类型。直接print("两数之和为:"+result)会报错,无法把字符串和int类型相加,不像c#那样会自动转换,所以需要手动转化一下。 ![](https://img.tnblog.net/arcimg/aojiancc2/1239c7efefcf47ce869df8dd0d05f4c5.png) ### 根据不同运算符实现两数计算 ``` import sys number1 = input("请输入加数1:\n") number2 = input("请输入加数2:\n") calltype = input("请输入运算符:\n") result = 0 if calltype=="+": result = int(number1)+int(number2) elif calltype=="-": result = int(number1)-int(number2) elif calltype=="*": result = int(number1)*int(number2) elif calltype=="/": result = round(int(number1)/int(number2),2) else: print("不支持该运算符") sys.exit() print("两数运算的结果:"+str(result)) ``` ### Python的基本数据类型 整形 字符串 列表 键值对 ### Pythonwhile循环 #### 简单求和循环 ``` i=1 r=0 while i<=100: r=i+r i=i+1 print(r) ``` #### Python猜数字 基础用法: ``` import random result = random.randint(1,100) while True: number = int(input("请猜数字,范围1-100\n")) if number > result: print("数字比实际数字大") elif number < result: print("数字比实际数字小") else: print("猜对了:数字是"+str(result)) break ``` 算上次数与时间差 ![](https://img.tnblog.net/arcimg/aojiancc2/faca27f917194b3dbce1b37594534d50.png) ``` import random import datetime result = random.randint(1,100) count = 0 # 记录游戏开始的时候 starttime = datetime.datetime.now() while True: number1 = int(input("请猜数字,数字的范围是1到100\n")) count= count+1 if number1 > result : print("你猜大了") elif number1 < result : print("你猜小了") else: ## 记录游戏结束的时间 start_end = datetime.datetime.now() ## 计算时间差 diff_time = (start_end-starttime).total_seconds() print("你猜对了"+",你猜了"+(str)(count)+"次","用时:",diff_time,"秒") break ``` ### python获取当前时间,Python获取时间差 ``` import datetime import time ## 获取当前时间 start_time = datetime.datetime.now() print(start_time) time.sleep(3) ## 暂停3秒后获取当前时间 end_time = datetime.datetime.now() print(end_time) ## 求两个时间差 time_diff = (end_time-start_time).total_seconds() print(time_diff) ``` ### Python日期模块 ``` import calendar ## 获取一年的日期 reuslt = calendar.calendar(2022) print(reuslt) print("--------------------------------------") ## 获取某月的日期 r2 = calendar.month(2022,6) print(r2) ## 计算某一天是星期几 r3 = calendar.weekday(2022,5,22) print(r3) ``` ### python的模块引用语法 ##### import 模块.... 这样是把某个模块全部引入。比如下面示例的datetime模块中既包含datetime,也包含date。我们直接引入全部模块里边所有的模块都可以用。 ``` import datetime ## 获取年月日 时分秒 now_time = datetime.datetime.now() print(now_time) ## 获取年月日 today = datetime.date.today() print(today) ``` ##### from xx模块 import 模块里边的部分内容 这样是引入一个模块里边的部分内容,比如这里引入datetime模块的datetime,所以我们可以直接datetime.now()了,而不用datetime.datetime.now()了。 ``` from datetime import datetime ## 获取年月日 时分秒 now_time = datetime.now() print(now_time) ``` ### Python列表List #### list基本使用 ```python ''' list ''' ## 申明 list1 = ['a','m','c','g','b'] ## 访问 print(list1[2]) print(list1[-2]) print(list1[0:2]) print(list1[2:]) ## 修改 print("---------------------------") list1[2]="mm" print(list1[2]) ## 添加 list1.append("xx") print(list1[-1]) print(list1) ## 删除 del list1[2] list1.remove("a") print(list1) ## 判断某个元素是否包含在列表中 iscontent = 3 in [1,5,7] print(iscontent) ## 拿到list的长度 listlength = len(list1) print(listlength) ## 两个list之间相加 listsum = [1,5,7]+[2,4,8] print(listsum) ## 使用循环遍历list ### while 遍历 i = 0 listsumlen = len(listsum) while i < listsumlen : print(listsum[i]) i=i+1 ### for循环 遍历 for item in listsum : print(item) ``` #### 使用list切片(slice)获取python ``` list1 = ["苹果","西瓜","香蕉","桃子","荔枝","芒果","哈密瓜"] ## 直接使用的方法 开始,结束, result = list1[slice(2,5,2)] ## 可以等价于下面的写法,简写 result2 = list1[2:5:2] print(result2) ``` #### list 练习。寻找list里边内容的位置,找到两次后退出 大概的效果 ![](https://img.tnblog.net/arcimg/aojiancc2/c89ac03a4ed04035aef71751d0d670f1.png) 或者叫在水果集合里边找水果,找到后返回水果的位置,找到两次后就退出。这个图看着更清晰点 ![](https://img.tnblog.net/arcimg/aojiancc2/096a02cbbad8485cb6aa7ed4216c1b47.png) **可以把问题分步简化** 1:更根据名字找到位置(一个循环判断一下就搞定) ``` fruilt_list = ["苹果","哈密瓜","桃子","荔枝","西瓜","葡萄","榴莲"] content = input("请输入想要找到的水果\n") i = 0 while i<len(fruilt_list): ## item是集合里边的值 item = fruilt_list[i] ## 找到了就直接输出位置 if item ==content: print(content,i) i=i+1 ``` 2:能找无数次(外面套一个死循环搞定) 注意缩进,还有用于输入的位置放到死循环里边 ``` fruilt_list = ["苹果","哈密瓜","桃子","荔枝","西瓜","葡萄","榴莲"] while True: i = 0 content = input("请输入想要找到的水果\n") while i<len(fruilt_list): ## item是集合里边的值 item = fruilt_list[i] ## 找到了就直接输出位置 if item ==content: print(content,i) i=i+1 ``` 3:只能找两次(限制一下次数,两次就退出) ``` fruilt_list = ["苹果","哈密瓜","桃子","荔枝","西瓜","葡萄","榴莲"] ## 定义一个变量用于记录找到了的次数 count =0 while True: content = input("请输入想要找到的水果\n") i = 0 while i<len(fruilt_list): ## item是集合里边的值 item = fruilt_list[i] ## 用户想要找的水果和集合里边一个一个比较,如果有一个相等,就说明找到了 if item ==content: count = count+1 print(content,",位置在:",i,"找到了",count,"次") i=i+1 ## 用break退出循环,由于有两个循环,所以写到外面,不然只能退出第一个循环。写里边也可以使用exit退出 if count == 2: break ``` **或者这样也可以方法有很多种,这里用exit退出:** 上面一步一步分析的,逻辑理解起来更清晰点 ``` list1 = ["a",'c','d','e','q'] ## 找出列表中的位置 i = 1 count = 0 while True: number1 = (input("请猜---------------\n")) i=1 # 遍历查询 while i<len(list1): # print(list1[i],number1) if list1[i]==number1: count = count+1 print("找到了",count,"个,位置在",i) ## 找到两个就退出 if count==2: print("已经找到两个了结束了") exit() i=i+1 ``` **配合方法定义后** ``` fruit_list = ["苹果","哈密瓜","桃子","荔枝","西瓜","葡萄","榴莲"] ## 定义一个变量用于记录找到了的次数 count =0 ## 定义方法找到变量就加1 def findfruit(fruit_list,fruitname,_count): i = 0 while i<len(fruit_list): ## item是集合里边的值 item = fruit_list[i] ## 用户想要找的水果和集合里边一个一个比较,如果有一个相等,就说明找到了 if item ==fruitname: _count = _count+1 print(fruitname,",位置在:",i,"找到了",_count,"次") i=i+1 return _count while True: content = input("请输入想要找到的水果\n") resultcount = findfruit(fruit_list,content,count) count = resultcount ## 用break退出循环,由于有两个循环,所以写到外面,不然只能退出第一个循环。写里边也可以使用exit退出 if count == 2: break ``` #### list 练习2。同一个水果找两次才退出 配合键值对使用就比较简单了 ``` list1 = ["苹果","西瓜","香蕉","桃子","荔枝","芒果","哈密瓜"] ## 定义一个键值对存放找到水果的次数 count_keyvalue = {} ## 可以无限找,输入exit退出 count = 0 while True: poi = 0 fruit = input("请输入你想要找到的水果\n") if fruit == "exit": break while poi<len(list1): item = list1[poi] if item == fruit: count = count+1 if item in count_keyvalue: print(item,"已经找到了两次,应该结束") exit() else: count_keyvalue[item] = 1 print("找到了,位置是:",poi,"找到了",count,"次") poi = poi+1 ``` **分析:** 比如前面找到了4次分别是:西瓜,荔枝,哈密瓜,桃子 就会形成一个这样的键值对: xx = {"西瓜":1,"荔枝":1,"哈密瓜":1,"桃子":1} key在这个键值对存在的情况只有第一次已经找到过一次才会成立,所以只要key存在于这个键值对那一定前面已经找到过一次,直接exit()结束程序即可。 ### Python元组 tn2>元组是有序且不可更改的集合 基本和list类似,里边的内容不能修改,不能删除这些。要定义一些需要不变元素的一组数据可以使用元组。理解记忆,一个元字,记忆成不变 ``` xx = ("西瓜","香蕉","桃子") print(xx) ## 获取值 print(xx[1]) ## for遍历 for item in xx: print(item) xx[1] = "香蕉2" print("--------------------------------------") i = 0 while i< len(xx) : print(xx[i]) i = i + 1 ``` #### 更改元组值 创建元组后,您将无法更改其值。元组是不可变的,或者也称为恒定的。 但是有一种解决方法。您可以将元组转换为列表,更改列表,然后将列表转换回元组。 实例 把元组转换为列表即可进行更改: ``` x = ("apple", "banana", "cherry") y = list(x) y[1] = "kiwi" x = tuple(y) print(x) ``` ### Python生成器表达式 和列表推导式很类似。仅仅是将列表推导式中的[]替换为(),但是两者差别挺大,生成器表达式可以说组合了迭代功能和列表解析功能。可以延加载需要调用next才能访问里边的内容。 列表推导式是直接返回一个列表,生成器表达式是一个跌倒对象,不会直接生成一个列表,而是真正需要用到这些数据的时候才返回。 ``` b = (x*x for x in range(1,3)) ## 直接输出生成器表达式 print(b) ## 可以使用next逐一来访问 print(next(b)) print(next(b)) ## 使用for循环遍历,它会自动调用next方法 for item in b: print(item) ## 求和 print(sum(b)) ## 生成器表达式转换成list print(list(b)) ## 生成器表达式转换成元组 # print(tuple(b)) ``` 注意有些测试的时候要把有些注释掉,比如测试求和的时候要把 ### Python键值对 ``` tinydict = {'name': 'runoob','likes': 123, 'url': 'www.runoob.com'} print(tinydict["likes"]) ## 如果key不存在就是添加 tinydict["likes"]="修改过后的123" print(tinydict) ## 删除字典 del tinydict["Name"] print(tinydict) ## 清空字典 tinydict.clear() print(tinydict) if 'url22' in tinydict: print('在') else: print("不在") ## 定义方法查找键是否存在 def findkey(key): ## 判断键值对里边的Key是否存在 if key in key_value: print(key,"存在于键值对") else: print(key,"不存在于键值对") findkey("age") rkeys = tinydict.keys() print(rkeys) ## 遍历key for item in rkeys: print(item) ## 遍历value for item in tinydict.values(): print(item) ## 遍历Key,Value 。方法1:遍历key,在通过key取值即可 for keys in tinydict.keys(): print(keys,tinydict[keys]) ``` #### 键值对练习-投票 ![](https://img.tnblog.net/arcimg/aojiancc2/ea975bb33d154d999cd1abe8e6df693d.png) ``` tinydict = {'黄焖鸡': 1,'水煮鱼': 1, '惊叫鸡': 1,'烫火锅': 1} def print_ticket(): for keys in tinydict.keys(): print(keys,tinydict[keys]) print_ticket() while True: print("请给你喜欢的食物投票,e退出投票:") tiket = input() if tiket=="e": break if tiket in tinydict: tinydict[tiket] = tinydict[tiket] +1 print_ticket() else: print("没有该食物") print("-------------------------------------------------------") ```