1. 案例【三酷猫列表记账】
操作需求:
(1)用列表对象记录三酷猫每天钓鱼的种类和数量
(2)统计三酷猫所钓水产品的总数量和预计收获金额
(3)打印财务报表一张。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#三酷猫列表记账
nums = 0 #统计数量变量
amount = 0 #统计金额数量
i = 0 #循环控制变量
fish_record = [ '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 ]
print ( '钓鱼日期名称数量单价(元)' )
print ( '-' * 30 )
while i< len (fish_record):
nums = nums + fish_record[i + 2 ] #累计数量
amount = amount + fish_record[i + 2 ] * fish_record[i + 3 ] #累计金额
print ( '%s,%s,%.2f,%.2f' % (fish_record[i],fish_record[i + 1 ],fish_record[i + 2 ],fish_record[i + 3 ]))
i + = 4 #循环控制
print ( '-' * 30 )
print ( ' 总数:%d,总金额%.2f元' % (nums,amount))
|
结果:
2. 案例【三酷猫冒泡法排序】
冒泡排序:通过不断调整排序元素的次序,实现集合元素从小到大的排序过程。
** 冒泡排序过程**
(1)取左边第一个元素,然后与后面的元素进行比较,若发现后面的元素比第一个元素小,则交换位置,继续往后比较,一直比较调整到最后一个元素,该元素为最大的元素。
(2)再取第一个元素,根据第一步一次比较、调整,直到倒数第二个停止;其他元素都依次循环比较、调整,每次循环多减一次,n-m(n为集合长度,m为每循环一次,增加一次,m从0 开始)。
(3)所有元素比较、调整完毕,完成集合元素增序排序。
冒泡法排序示意图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
fish_records = [ 18 , 8 , 7 , 2 , 3 , 6 , 1 , 1 ]
i = 0 #循环控制变量
compare = 0 #比较元素初始值
fish_len = len (fish_records) #获取列表长度
while i<fish_len:
j = 1 #循环控制变量
while j<fish_len - i: #循环一遍,长度减1
if fish_records[j - 1 ]>fish_records[j]: #比较前后两个元素的大小
compare = fish_records[j - 1 ] #前一个大的放到临时比较变量里
fish_records[j - 1 ] = fish_records[j] #把小的元素放到前面
fish_records[j] = compare #把临时变量里的大元素放到后面
j + = 1 #内循环控制变量+1
i + = 1 #外循环控制变量+1
print (fish_records)
|
结果:
3. 案例【三酷猫二分法查找】
二分法查找:指在有序集合里,对集合下标范围通过取中位法获取对应的元素值,进行叠代查找比较,直至找到所需要的元素。如set1[1…n],(1…n为集合元素下标顺序值)先取一个下标中位值k1= (1+n)/2,获取set1[k1]值与查找对象m进行比较。若set1[k1]等于m,则查找成功,返回查找位置;若set1[k1]小于m,则在[k+1,n]区间里再取中位值,进行查找比较;若set1[k1]大于m,则在[1,k-1]区间里再取中位值,进行查找比较。通过不断缩小查找区间范围,可以快速获取所需要查找的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
fish_records = [ 1 , 1 , 2 , 3 , 6 , 7 , 8 , 18 ]
low = 0 #查找范围下界
high = len (fish_records) - 1 #查找范围上界
find_value = 7 #要寻找的值
find_ok = false #是否找到标志,true为找到
i = 1
while low< = high:
middle = int ((low + high) / 2 ) #用int取整数,避免浮点数问题的发生
if find_value = = fish_records[middle]: #找到时
find_ok = true #设置标志为true
break
elif find_value>fish_records[middle]: #没有找到,要找的值范围大于中位值时
low = middle + 1 #范围在middle+1和high之间
elif find_value<fish_records[middle]: #没有找到,要找的值范围小于中间值时
high = middle - 1 #范围在low和middle-1之间
i + = 1
if find_ok:
print ( '%d在列表下标%d处,找了%d次。' % (find_value,middle,i))
else :
print ( '要找的数%d没有!找了%d次。' % (find_value,i))
|
结果:
代码运算示意图:
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/m0_55697123/article/details/119088129