今日任务:1.完成一个用二分法查找的程序;2.学习元组,完成前面钓鱼程序的分类统计。
一、完成一个用二分法查找的程序:
二分法查找:指在一个有序集合里,对集合下标范围内通过取中位法获取对应的元素值,进行叠代查找比较,直到找到所需要的元素。如Set1[1...n],(1...n为元素集合下标顺序值)先取一个下标的中位值K1=(1+n)/2,获取Set[K1]值与查找对象M进行比较。若Set[K1]等于M,则查找成功,返回查找位置;若Set[K1]小于M,则在[K+1,n]区间里再取中位值,进行查找比较;若Set[K1]大于M,则在[1,K-1]区间里再取中位值,进行查找比较。通过不断缩小查找区间范围,可以快速获取所需要查找的值。
程序6.1代码如下:
one=[1,2,3,5,6,7,12,18]
low=0 #范围下界
high=len(one)-1 #范围上界
find_value=7 #要寻找的值
find_ok=False #是否找到的标志,True为找到
i=1
while low<=high:
middle=int((low+high)/2)
if find_value==one[middle]:
find_ok=True
break
elif find_value>one[middle]:
low=middle+1
elif find_value
low=middle-1
i+=1
if find_ok:
print('%d在列表下标%d处,找了%d次'%(find_value,middle,i))
else:
print('%d在列表没有,找了%d次'%(find_value,i))
程序6.1运行结果如下:程序6.1运行结果
二、元组学习
元组类似列表,与列表的主要区别有以下两点。
(1)元组不能对其元素进行变动,而列表允许。
(2)元组用小括号表示(()),而列表用中括号([])表示。
元组和列表可以相互转换。
程序6.2完成钓鱼程序的分类统计
代码如下:
fish_tuple=('鲫鱼','鲤鱼','鲢鱼','草鱼','黑鱼','乌龟')
fish_sum=[0,0,0,0,0,0,0,0,0,0,0,0] #记录每种鱼的销售额和数量,双数为数量,单数为销售额,从0开始记
fish_records=['1月1日','鲫鱼',18,10.5,'1月1日','鲤鱼',8,6.2,'1月1日','鲢鱼',7,4.7,'1月2日','草鱼',2,7.2,'1月2日','鲫鱼',3,12,'1月2日','黑鱼',6,15,'1月3日','乌龟',1,71,'1月3日','鲫鱼',1,9.8]
fish_records[2]-=1 #被野猫叼走了一只
#修改黑鱼的价格
i=1
fish_len=len(fish_records)
while i
if fish_records[i]=='黑鱼':
fish_records[i+2]*=1.1
i+=4
#统计每种水产品的数量和金额
i=0
while i
if fish_tuple[0]==fish_records[i+1]:
fish_sum[0]+=fish_records[i+2]
fish_sum[1]+=fish_records[i+2]*fish_records[i+3]
elif fish_tuple[1]==fish_records[i+1]:
fish_sum[2]+=fish_records[i+2]
fish_sum[3]+=fish_records[i+2]*fish_records[i+3]
elif fish_tuple[2]==fish_records[i+1]:
fish_sum[4]+=fish_records[i+2]
fish_sum[5]+=fish_records[i+2]*fish_records[i+3]
elif fish_tuple[3]==fish_records[i+1]:
fish_sum[6]+=fish_records[i+2]
fish_sum[7]+=fish_records[i+2]*fish_records[i+3]
elif fish_tuple[4]==fish_records[i+1]:
fish_sum[8]+=fish_records[i+2]
fish_sum[9]+=fish_records[i+2]*fish_records[i+3]
elif fish_tuple[5]==fish_records[i+1]:
fish_sum[10]+=fish_records[i+2]
fish_sum[11]+=fish_records[i+2]*fish_records[i+3]
i+=4
j=0
amount=0 #销售额初始化赋值
total_nums=0 #总数量初始化赋值
while j
if j%2==0:
total_nums+=fish_sum[j]
else:
amount+=fish_sum[j]
j+=1
#算成本,求纯利润
cost=180+20+1+amount*0.05 #求成本 三天 吃饭180 鱼饵20 工具1 交税5%
profit=amount-cost #求纯利润
#输出
i=0
while i
print('%s总数是%d,金额是%.2f'%(fish_tuple[i],fish_sum[i*2],fish_sum[i*2+1]))
i+=1
print('-'*30)
print("三酷猫总共钓上%d条水产品\n预计销售额为%.2f元\n成本为%.2f元\n纯利润为%.2f元"%(total_nums,amount,cost,profit))
程序6.2运行的结果如下:程序6.2运行结果