163
社区成员




本实验将编写Python程序解决2道应用题:猴子吃桃和数字千分位。
1、猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?
2、数字千分位
千位分隔符,其实就是数字中的逗号。依西方的习惯,人们在数字中加进一个符号,以免因数字位数太多而难以看出它的值。所以人们在数字中,每隔三位数加进一个逗号,也就是千位分隔符,以便更加容易认出数值。
处理财务数据时,经常会和千分位符号打交道。经常看数字时,如果位数很多,往往要一位位的数,才知道具体的金额。如果有千分位符,那么一眼就知道金额的具体大小。目前千分位符在手机银行和计算器中较常见。
现编写2个函数,1个函数输入带千分位符的字符串(带千分位符就不再是数字了)输出数字,另1个函数输入数字(如果数字是小数则只保留小数点后2位)输出带千分位符的字符串。
1.1 解题思路
第一天的桃子数量,等于第二天的桃子数量加1然后乘以2
第二天的桃子数量,等于第三天的桃子数量加1然后乘以2
第三天的桃子数量,等于第四天的桃子数量加1然后乘以2
第四天的桃子数量,等于第五天的桃子数量加1然后乘以2
第五天的桃子数量,等于第六天的桃子数量加1然后乘以2
第六天的桃子数量,等于第七天的桃子数量加1然后乘以2
第七天的桃子数量,等于第八天的桃子数量加1然后乘以2
第八天的桃子数量,等于第九天的桃子数量加1然后乘以2
第九天的桃子数量,等于第十天的桃子数量加1然后乘以2
第十天桃子的数量为1个
很明显,前一天的桃子数量等于后一天的数量加1然后乘以2
1.2编程实现:
def compute_eat_peach(day):
peaches=1 #设置桃子数量的指数,并初始化为1
for i in range(day): #for循环day次
print("第"+str(day-i)+"天有"+str(peaches)+"个桃子") #输出第几天有几个桃子
peaches=2*(peaches+1) #计算前一天的桃子数量
compute_eat_peach(10)
1.3输出结果:
3.2.1 解题思路
1、去掉千分位
遍历字符串将逗号删除,最后将字符串转换为整数/小数并输出结果。
2、添加千分位
由于小数点后面只保留2位小数,则我们把重点放在整数部分。
千分位符是从右边开始,每隔3位数添加一个英文逗号,那么先把数字左右倒转(如23456->65432),然后遍历字符串每隔3个字符添加一个英文逗号,然后再次将字符串左右倒转,最后输出结果。
如果输入的数字是整数,流程如上。
如果输入的数字是小数,首先将小数拆分为整数部分和小数部分,最后将处理后的整数部分和原始的小数部分拼接起来作为结果输出。
1.2编程实现:
#去掉千分位
def remove_thousand_symbol(num_str):
for i in num_str:
if i==',':
continue
print(i,end="")
remove_thousand_symbol("12,345.67")
#增加千分位
def add_thousand_symbol(number):
num_str=str(number)
num_str_list=num_str.split('.')
num_int=num_str_list[0]
if len(num_str_list)==1:
num_float=None
else:
num_float = num_str_list[1]
reversed_num_int=num_int[::-1]
t = []
for i in range(len(reversed_num_int)):
if i>0 and i%3==0:
t.append(',')
t.append(reversed_num_int[i])
else:
t.append(reversed_num_int[i])
t_str=''.join(t)
new_num_int=t_str[::-1]
if num_float:
print(new_num_int+'.'+num_float)
else:
print(new_num_int)
add_thousand_symbol(123456789.12)
1.3输出结果:
4.心得体会
一开始做的时候还有些不懂,在老师给的代码和同学的帮助下逐渐找到感觉,自己慢慢也有些理解