Python随堂笔记 结构案例练习(一)

2022.3.30 下午

文章目录

    • 前言
    • 3.5 典型案例
      • 计算部分级数和
      • 使用选择结构计算员工工资
      • 用递推法求解实际问题
      • “试凑法”解方程
      • 计算机猜数
      • 模拟自动饮料机

前言

本文章是 【Python语言基础】 专栏的文章,主要是上课的随堂笔记与练习
Python专栏 传送门
提示:本文的环境配置是Python3的开发环境。目录顺序以当堂内容(教材)为准,所以并非“1、2、3”
本节主要内容:上节学习了程序设计结构,学习过C+、JAVA的小伙伴都知道,这部分学完当然要简单练习一下啦,下面的题嘞都是你们学习其它语言练习过的典型题,下一期再续一期水仙花、最大公约数、素数之类的

3.5 典型案例

计算部分级数和

1 + 1 1 ! + 1 2 ! + 1 3 ! + . . . + 1 n ! = 1 + ∑ 1 ∞ 1 i ! 1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+...+\frac{1}{n!}=1+\sum_{1 }^{\infty }\frac{1}{i!} 1+1!1+2!1+3!1+...+n!1=1+1i!1,最后一项精度为0.00001

while实现

i = 1; sum = 1; n = 1
while 1 / n >= 0.00001:
  sum = sum + 1 / n                   
  i = i + 1
  n = n * i                                    
print("sum =", sum)

for实现

sum = 1; n = 1
for i in range(1,10000):
  n = n * i                                     	
  if 1 / n >= 0.00001:
    sum = sum + 1 / n                         	
  else:
    break
print("sum =",sum)              

使用选择结构计算员工工资

某公司员工的工资计算方法为:

  1. 月工时数在120~180内,每小时按80元计算
  2. 月工时数超过180,超过部分加发20%
  3. 月工时数低于120,扣发10%
ygss = float(input("请输入月工时数: "))
if ygss > 180:
  ygz = 80 * ygss + (ygss - 180) * 80 * 0.2
elif ygss >= 120 and ygss <= 180:
  ygz = 80 * ygss
else:
  ygz = 80 * ygss * (1-0.1)
print("您这个月的工资为: %.2f元."%ygz)
'''
请输入月工时数: 200
您这个月的工资为: 16320.00元
'''

用递推法求解实际问题

猴子吃桃问题。一只猴子一天摘了若干个桃子。

第1天,猴子吃了一半多一个
第2天,猴子吃了剩下的一半多1个
以后每天吃了剩下的一半多1个
在第5天早上要吃时发现只剩下1个了
问:猴子最初摘了多少个桃子?

分析:这是一个迭代问题。先由最后1天剩下的桃子数推出倒数第2天的桃子数,再从倒数第2天推出倒数第3天的桃子数……
{ x n = 1 2 x n − 1 − 1 x n − 1 = ( x n + 1 ) × 2 \begin{cases} x_{n}=\frac{1}{2}x_{n-1}-1 \\ x_{n-1}=(x_{n}+1)\times 2 \\ \end{cases} {xn=21xn11xn1=(xn+1)×2

x = 1                       #最后一天的桃子数.
print("第 5 天的桃子数: %d."%x)
for i in range(5,1,-1):     #循环次数为4.
  x = (x + 1) * 2           #计算前1天的桃子数.
  print("第 %d 天的桃子数: %d."%(i-1,x))	#输出每天的桃子数.
'''
第 5 天的桃子数: 1.
第 4 天的桃子数: 4.
第 3 天的桃子数: 10.
第 2 天的桃子数: 22.
第 1 天的桃子数: 46.
'''

“试凑法”解方程

古代数学中的百元百鸡问题。假定公鸡2元/只,母鸡3元/只,小鸡0.5元/只。现有100元,要求买100只鸡,编程列出所有可能的购鸡方案
分析:根据题意,设公鸡、母鸡和小鸡各为x只、y只和z只,列出方程组为:

{ x + y + z = 100 2 x + 3 y + 0.5 z = 100 \begin{cases} x + y + z=100 \\ 2x + 3y + 0.5z=100 \\ \end{cases} {x+y+z=1002x+3y+0.5z=100

for x in range(51): 		#x为公鸡数,100元最多买50只.
  for y in range(34):       #y为母鸡数,100元最多买33只.
    z = 100 - x - y			#z为小鸡数.
    if 2 * x + 3 * y + 0.5 * z == 100:
      print("公鸡 %d 只,母鸡 %d 只,小鸡 %d 只."%(x,y,z))
'''
公鸡 0 只,母鸡 20 只,小鸡 80 只.
公鸡 5 只,母鸡 17 只,小鸡 78 只.
公鸡 10 只,母鸡 14 只,小鸡 76 只.
公鸡 15 只,母鸡 11 只,小鸡 74 只.
公鸡 20 只,母鸡 8 只,小鸡 72 只.
公鸡 25 只,母鸡 5 只,小鸡 70 只.
公鸡 30 只,母鸡 2 只,小鸡 68 只.
'''

计算机猜数

利用计算机程序做猜数字游戏:计算机程序产生一个[1, 100]范 围的随机整数key;用户输入猜数x
计算机程序根据下列3种猜数情况做出提示:

  1. x > key:猜大了
  2. x < key:猜小了
  3. x == key:猜对了

在程序执行时,如果用户5次还没有猜中就结束游戏程序,并公布正确答案。
分析:计算机猜数是计算机二分查找算法的一种应用。基本方法是折半处理,即将要查找的范围每次缩小一半

import random

key = random.randint(1, 100)
print('------猜数字游戏开始!-----')
count = 0
x = int(input('请输入数字: '))
while True:
	count = count + 1
	if x > key:
		print('您猜的数字大了!')
	elif x < key:
		print('您猜的数字小了!')
	else:
		print('恭喜您,猜对了!')
		break
	if count >= 5:
		print('很遗憾,您没猜中!生成数字是: %d.' % key)
		break
	x = int(input('请输入数字: '))
print('----游戏结束,再见!^_^----')
'''
请输入数字: 50
您猜的数字大了!
请输入数字: 24
您猜的数字大了!
请输入数字: 12
您猜的数字小了!
请输入数字: 17
您猜的数字大了!
请输入数字: 14
您猜的数字小了!
很遗憾,您没猜中!生成数字是: 16.
----游戏结束,再见!^_^----
'''

模拟自动饮料机

编程实现模拟自动饮料机功能:

  1. 当输入数字0时,模拟自动饮料机停止运行
  2. 当输入数字1~5时,模拟自动饮料机给出对应的饮料
  3. 当输入其他数字时,模拟自动饮料机给出非法操作信息,并提示用户重新输入

分析:
正常情况下,模拟自动饮料机一直运行,输入不同的数字,对应不同的饮料
只有当出现故障或需要添加饮料时才停止运行
可以采用在while语句中嵌套if-elif-else多分支语句实现程序功能

投币 = int(input("请投币: "))
while True:
	
    if 投币 == 0:
      print("叮咚: 设备停止工作!")
      break;
    elif 投币 == 1:
      叮咚 = "冰露纯净水"
    elif 投币 == 2:
      叮咚 = "农夫山泉矿泉水"
    elif 投币 == 3:
      叮咚 = "冰红茶"
    elif 投币 == 4:
      叮咚 = "脉动"
    elif 投币==5:
      叮咚 = "红牛"
    else:
      叮咚 = "投币错误!已退回"
    print("叮咚:",叮咚)
    投币 = int(input("请投币: "))
'''
请投币: 1
叮咚: 冰露纯净水
请投币: 2
叮咚: 农夫山泉矿泉水
请投币: 3
叮咚: 冰红茶
请投币: 4
叮咚: 脉动
请投币: 5
叮咚: 红牛
请投币: 6
叮咚: 投币错误!已退回...
请投币: 0
叮咚: 设备停止工作!
'''

你可能感兴趣的:(Python语言基础,python,pycharm)