以Python 3.x版本为主
求城市平均值,综合运用前面学到的基础知识点
1、效果如下
2、知识点
编号
知识点
说明
1
import re
引入模块
2
list列表
保存多个值
3
for
for循环,遍历列表
4
split
re模块下可组合多个字符进行分隔方法,此处以多个空格进行分组
5
rstrip
删除右边空格方法
6
str
数据转换方法,str(key),将城市值转换为字符串,并作为字典的key
7
not in
判断运算符,key 是否不在字段中,true=不存,false=存在
8
update
字典动态添加键值对
2.1、re模块
python独有的匹配字符串的模块,提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,正则表达式对所有语言都是通用的
import re,表示引入这个模块函数库,即可调用模块下面定义好的方法
2.2、list列表
列表,和数组一样,在这里的概念就是列表、序列的意思,在实际项目中,序列会经常用到,列表数据的动态添加、删除、获取等等
2.3、for循环
同样for循环在实际场景中,也会经常用到,遍历各种数据,对数据进行筛选过滤等等处理操作,同时集合List列表一起使用
2.4、split分隔
由于内置分隔方法split,本身只针对字符或字符串而言,没有模糊匹配的概念,所以这里就引入一个re模块,可通过正则表达式的方式进行模糊匹配进行分隔,动态空格分隔
2.5、rstrip删除空格
对于左右两边的空格,在进行分组时,可能会多出一个空格的分组,所以,在分组前,先把左右两边的空格删除
2.6、str字符串数据转换方法
在特定情况,必须使用字符串,那么必须使用字符串数据转换的方法
2.7、not in操作符
可以使用not in方法判断某个键是否存在字典里,返回true和false,针对这两种情况进行逻辑操作
2.8、update更新字典数据
当某个键不存在字典里,即可通过update方法添加新的键值对
3、整体代码
温馨提示:这里用到一个sum变量和sum方法,其实这样子会把sum方法最后变成一个整数,从而导致sum方法失效,所以,在命名变量时,尽量不要和内置方法冲突了,可以加上个人特点的前缀之类的
#!/usr/bin/python# -*- coding: utf-8 -*-
import re
lines=[
'id date city temp wind',
'0 03/01/2016 BJ 8 5',
'1 17/01/2016 BJ 12 2',
'2 31/01/2016 BJ 19 2',
'3 14/02/2016 BJ -3 3',
'4 28/02/2016 BJ 19 2',
'5 13/03/2016 BJ 5 3',
'6 27/03/2016 SH -4 4',
'7 10/04/2016 SH 19 3',
'8 24/04/2016 SH 20 3',
'9 08/05/2016 SH 17 3',
'10 22/05/2016 SH 4 2',
'11 05/06/2016 SH -10 4',
'12 19/06/2016 SH 0 5',
'13 03/07/2016 SH -9 5',
'14 17/07/2016 GZ 10 2',
'15 31/07/2016 GZ -1 5',
'16 14/08/2016 GZ 1 5',
'17 28/08/2016 GZ 25 4',
'18 11/09/2016 SZ 20 1',
'19 25/09/2016 SZ -10 4'
]
# 求温度值
myDicTemp={}
for item in lines[1:]:
arr= re.split(r" +",item.rstrip())
key=arr[2]
value=arr[3]
if key not in myDicTemp:
myDicTemp.update({str(key):[]})
myDicTemp[str(key)].append(int(value))
else:
myDicTemp[str(key)].append(int(value))
print(myDicTemp)
print('\n')
myCity = input("请输入需要统计的城市值: ")
if myCity in myDicTemp:
length=len(myDicTemp[myCity])
sum=sum(myDicTemp[myCity])
avg=sum/length
print('城市%s的温度和温度平均值如下' % myCity)
print('{"%s":%s}'% (myCity,myDicTemp[myCity]))
print('{"%s":%s}'% (myCity,avg))
print('\n')
else:
print("输入的城市不存在,请重新输入")
4、改进功能
同时输出,一个城市的温度值和风力值,并读取txt文本进行统计
5、整体代码
#!/usr/bin/python# -*- coding: utf-8 -*-
import re
lines=[]
with open('data.txt', 'r') as f:
for line in f.readlines()[1:]:
lines.append(line)
# 求温度值
myDicTemp={}
for item in lines[1:]:
arr= re.split(r" +",item.rstrip())
key=arr[2]
value=arr[3]
value_wind=arr[3]
if key not in myDicTemp:
myDicTemp.update({str(key):[[],[]]})
myDicTemp[str(key)][0].append(int(value))
myDicTemp[str(key)][1].append(int(value_wind))
else:
myDicTemp[str(key)][0].append(int(value))
myDicTemp[str(key)][1].append(int(value_wind))
print(myDicTemp)
print('\n')
for key in myDicTemp:
myCity = key
length=len(myDicTemp[myCity][0])
total=sum(myDicTemp[myCity][0])
avg=total/length
length_wind=len(myDicTemp[myCity][1])
total_wind=sum(myDicTemp[myCity][1])
avg_wind=total_wind/length_wind
print('城市%s的温度和风力平均值如下' % myCity)
print('{"%s":[%s,%s]}'% (myCity,myDicTemp[myCity][0],myDicTemp[myCity][1]))
print('{"%s":[%s,%s]}'% (myCity,avg,avg_wind))
print('\n')