学Python——第十课 植树问题

一、一维植树问题

    甲地到乙地距离a米,每隔b米种一棵树,问需要种多少棵树?

分析:

每段长b米,可以把a米的距离分为a/b段,(1)两端都不种,中间点数比段数小1,树的数量=a/b-1;(2)一端种,另一端不种,树的数量=a/b;(3)两端都种,树的数量=a/b+1。

编写程序:

#一维植树问题

#输入数据

a = int(input("甲乙两地距离(单位:米):"))

b = int(input("植树的间隔(单位:米):"))

c = int(input("端点情况(两端都不种:0,一端种另一端不种:1,两端都种:2):"))

#计算

num = a//b

#打印结果 语法请看附录1

if c==0:

    print("共要植树%d棵。" % (num-1))

elif c==1:

    print("共要植树%d棵。" % num)

else:

    print("共要植树%d棵。" % (num+1))

验证程序:

二、平面植树问题

    在长a米宽b米的地上植树,树的横竖间隔都是c米,问共要植多少棵树?注:a和b都可以被c整除,横和竖方向都有三种情况。

分析:

根据一维植树,长方向可分a/c段,端点情况d是-1、0、1中一种;宽方向可分b/c段,端点情况e是-1、0、1中一种。可得长上有a/c+d点,宽上有b/c+e点,就是说一行a/c+d棵,有b/c+e行,因此树的棵数是(a/c+d)*(b/c+e)棵。

编写程序:

#平面植树问题

#输入数据

a = int(input("矩形地块长(单位:米):"))

b = int(input("矩形地块宽(单位:米):"))

c = int(input("植树的间隔(单位:米):"))

type_a = int(input("长方向端点情况(两端都不种:0,一端种另一端不种:1,两端都种:2):"))

type_b = int(input("宽方向端点情况(两端都不种:0,一端种另一端不种:1,两端都种:2):"))

#计算

num_a = a//c

num_b = b//c

if type_a==0:

    d = -1

elif type_a==1:

    d = 0

else:

    d = 1    

if type_b==0:

    e = -1

elif type_b==1:

    e = 0

else:    e = 1

num = (num_a + d) * (num_b + e)    

#打印结果

print("共要植树%d棵。" % num)

程序验证:

三、练习题——立体植树问题

    在长a米宽b米高c米的长方体空间内挂上灯笼,灯笼间距或最边灯笼与长方体的界面距离都是d米。问一共要挂多少盏灯笼?注:a、b、c都可以被d整除,三方向都要分3种情况。

附录1:条件转移语句

    条件转移语句有四种模式:

1)单关键字(if)模式:

if  逻辑值  :

   语句 

2)双关键字一(if、else):

if  逻辑值  :

    语句1

else  :

    语句2

3)双关键字二(if、elif):

if 逻辑值1  :

    语句1

elif  逻辑值2 :

    语句2

4)三关键字(if、elif、else):

if 逻辑值1  :

    语句1

elif  逻辑值2 :

    语句2

else :

    语句3

注:比较运算(>、<、>=、<=、==、!=)或逻辑运算(not、and、or、^)的值都是逻辑值,如果使用逻辑真(True),则一定执行后续语句;如果使用逻辑假(False),则一定不执行后续的语句。