python基础学习——第三天

1.函数

  1.eval函数:执行一段python的语句
  2.函数的定义:

def <functionName> (<parameter>):
    return variable

    深入理解:为什么python中不需要返回类型?
      python是动态语言,变量的类型是可变的,所以返回类型就无意义
  3.调用函数: functionName(parameter)
  4.python中的函数不仅可以返回一个值,也可以返回多个值

    若接收变量只有一个时,接收到的是个tuple
    接收变量与返回变量个数相同时,按位置进行对应赋值
  5.参数传递的模式

    1.值传递(拷贝):函数体中对形参进行操作不影响实参的值,如一个整数(不可变对象)
    2.地址的传递(引用):函数体中对形参的操作影响实参的值 ,如一个列表(可变对象)
  6.参数传递的方式

    1.位置传递(最常用):实参和形参根据位置一一对应
      弊端:不知道所传递的实参具体给了哪个形参,不能见名知意
   2.名称传递:实参中指定所要赋给的形参的名字,如在实参中test(name=”zoin”,score=99)
    3.位置+名称:一般根据位置的在前,名称的再后
  7.形参的默认值

    若没有传入对应的形参,则取对应形参的默认值

def testName(name="zoin"):
    return "hello "+name

def testName(name=”zoin”):
return “hello “+name

    如上述中未传入name形参的话,则name形参取默认值”zoin”
  8.递归函数

    思想是在知道上一个条件后,能否根据上一个条件求出下一个 条件

      效率一般较低
    递归的终止条件

2.练习

'''
1.要求用户输入一个英文句子,统计该英文句子中含有单词的数目以及词的种数。
提示,英文单词间可以认为都用英文空格进行分割。
'''
sentence=input("输入一段句子:")
words=sentence.split()
dic={}
for i in words:
    if i in dic.keys():
        dic[i]=dic[i]+1
    else:
        dic[i]=1
print(dic)
print(len(words))
'''
2.读取0119.txt文件中的内容(每行分别表示一个点的坐标(x,y),找出距离最远以及
距离最近的2个点并分别输出每种情况下这2个点的坐标以及它们的距离
(要求将求距离的写成一个函数,距离采用欧式距离,也就是d=sqrt((x2-x1)^2+(y2-y1)^2))
'''
import math
def dis(a,b):
    res=math.sqrt((a[0]-b[0])**2+(a[1]-b[1])**2)
    return res

path="D:\\winter_python"
file=path+"\\0119.txt"
input=open(file)
points=[]
for line in input.readlines():
    (a,b)=line.split()
    point=(float(a),float(b))
    points.append(point)
print(points)
min_dis=dis(points[0],points[1])
max_dis=min_dis

for i in points:
    partMin=min_dis
    partMax=max_dis
    for j in points:
        if i==j:
            continue
        res=dis(i,j)
        if res<partMin:
            partMin=res
            minPoint=[i,j]
        if res>partMax:
            partMax=res
            maxPoint=[i,j]
    if partMin<min_dis:
        min_dis=partMin
    if partMax>max_dis:
        max_dis=partMax
print(min_dis,minPoint)
print(max_dis,maxPoint)

input.close()
'''
3.从0119.csv文件中读取数据,求各个属性对应的熵,并且按降序进行排序
对于一个属性的熵我们定义为对于该属性中 每种可能的值的出现概率乘以 以2为底该概率
的对数,然后依次求和,最后添负号(sample:chinese属性中A出现3次,B出现3次,C出
现1次,所以对于chinese属性来说: -((3/7)*log2(3/7)+(3/7)*log2(3/7)+(1/7)*log2(1/7)))
'''
import csv
import math
def solve(x):
    return x*math.log(x,2)

def getEntropy(list):
    sum=len(list)
    dic={}
    for i in list:
        if i in dic.keys():
            dic[i]+=1
        else:
            dic[i]=1
    entropy=0
    for i in dic:
        entropy+=solve(dic[i]/sum)
    entropy=-entropy
    return entropy



with open('D:\\winter_python\\0119.csv') as f:
    f_csv=csv.DictReader(f)
    Chinese=[]
    Math=[]
    English=[]
    for row in f_csv:
        Chinese.append(row['chinese'])
        Math.append(row['math'])
        English.append(row['english'])
ChineseEntropy=getEntropy(Chinese)
MathEntropy=getEntropy(Math)
EnglishEntropy=getEntropy(English)
res=[ChineseEntropy,MathEntropy,EnglishEntropy]
res.sort(reverse=True)
print(res)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值