Python数学建模:自行车蹬一圈能走多远?

问题的提出

同学们都骑过自行车,自行车的车轮有大的,也有小的,自行车蹬一圈能走多远呢?
有的人认为自行车蹬一圈,车轮就转一圈,蹬一圈走的路即是车轮一周的周长,你认为对吗?
这显然是不对的,因为自行车的前轮转一圈,后轮可不止转一圈。因此要求自行车蹬一圈的路程,先要求后齿轮转几圈,然后用后齿轮转数乘以车轮周长。

 

自行车是如何向前运动的?

自行车前进的动力来自齿轮传动机构,自行车的齿轮传动机构分为前齿轮和后齿轮,两个齿轮用链条连接。
人们用脚蹬来让前齿轮转动,前齿轮通过链条带动后齿轮转动,后齿轮会带动后轮转,后轮再推动前轮转。

 

建立数学模型

蹬一圈是指人们让自行车的前齿轮转动一圈。因此要求蹬一圈自行车能走多远,就要先求出自行车的前齿轮转一圈,后齿轮能转多少圈?
前齿轮转动一圈的长度就是链条的长度,后齿轮也要转动同样的长度。由此可得出下面的等式:

那么,前齿轮转动一圈,后齿轮转动多少圈呢?

自行车蹬一圈能走多远的数学模型为:

 

编写程序求解模型

数学模型需要用户输入自行车的前齿轮数、后齿轮数和后轮半径。

程序流程图如下:

(1)接收用户输入的模型数据;
(2)验证模型数据的正确性;
(3)用模型计算路程;
(4)输出路程;
(5)输出提示信息,提示信息为“输入N退出程序,其它继续”;
(6)等待用户的输入,如果用户输入N,程序结束,否则跳转到步骤(1)。

程序代码如下:

程序文件:main.py
功能描述:自行车蹬一圈能走多远?
'''
# 判断用户输入的是否是整数或小数
def isnumber(instr):
# 遍历instr
for ch in instr:
# ch是否是数字或小数点
if ch.isdigit() or ch == '.':
continue;
else:
# instr包含其它字符
return False
return True

# 程序入口
if __name__ == '__main__':

while(True):
# 接收用户输入的前齿轮数
front_gear = input("请输入前齿轮数(整数):")
back_gear = input("请输入后齿轮数(整数):")
r = input("请输入后轮半径(整数或小数):")
# 验证用户输入数据的正确性
if front_gear.isdigit() and back_gear.isdigit() and isnumber(r):
# 用模型计算路程
s = int(front_gear) / int(back_gear) * 2 * 3.14 * float(r)
print("自行车蹬一圈走的路程为:%.2f" % (s))
else:
print("数据输入错误")
# 程序继续或退出
temp = input("输入N退出程序,其它继续:")
# 判断temp的内容
if temp == "N":
break;

代码解读


代码定义了函数isnumber,用于验证用户输入自行车后轮半径数据的正确性。
主体代码要求用户分别输入自行车的前齿轮数、后齿轮数和后轮半径,并分别赋值给front_gear、back_gear和r。
然后使用if语句验证用户输入数据的正确性,在if语句中使用and逻辑运算符,对front_gear、back_gear和r的验证结果进行逻辑运算,当所有验证结果满足要求时,使用模型来计算路程。最后输出路程到Shell窗口。