【Educoder作业】※ 绘制炸弹轨迹 V——绘制多条轨迹

学习了函数,相比于 C + + C++ C++来讲方便得多,因为返回的数据类型、返回几个变量、默认值的设置都好用的很。

T1 定义函数

写一个函数表示输出即可。

########## Begin ##########
def Pr() :
    print('Hello World!')
    print('----------')
Pr()
Pr()
Pr()
########## End ##########
  

T2 参数

关于默认值,要保证定义了默认值的右侧不再出现未定义的变量即可。而且函数里传参量,函数会认为是从左到右赋值

########## Begin ##########
def sumMtoN(m = 1, n = 100) :
    L = [i for i in range(m, n + 1)]
    print(sum(L))
########## End ##########
sumMtoN()        #从1加到100
sumMtoN(50)      #50赋给了m还是n?
sumMtoN(101, 200)#从101加到200

T3 返回值

注意一下 P y t h o n Python Python里的除法会自动把变量转换成 f l o a t float float,所以我们用 i n t ( ) int() int()函数把他转回整数

########## Begin ##########
def Sum(x, y) :
    return (x + y) * (y - x + 1) / 2
print(int(Sum(1, 10)) ** 2)
print(Sum(31, 50) / 20)
print(int(Sum(40, 89)) % 7)
########## End ##########
 

T4 使用函数

没啥好说的,定义一个算面积的函数就行

import math
########## Begin ##########
def Sq(a, b, c) :
    p = (a + b + c) / 2
    return math.sqrt(p * (p - a) * (p - b) * (p - c))
S = Sq(9.8, 9.3, 6.4) - Sq(2.9, 4.1, 4.7) + Sq(2.0, 1.4, 2.3)
########## End ##########
print('%.1f' % S)

T5 绘制四条轨迹

import numpy as np
import matplotlib.pyplot as plt
########## Begin ##########
g, n = 9.8, 30
def calBombTrace(h, v0):
    tmax = (2 * h / g) ** 0.5
    t = np.linspace(0, tmax, n)
    xt = v0 * t; yt = h - 0.5 * g * t ** 2
    return xt, yt
########## End ##########
xt, yt = calBombTrace(3000, 200) #计算第1种情况时n个点的坐标
plt.plot(xt,yt,'r-')             #绘制第1种情况对应的轨迹
xt, yt = calBombTrace(3000, 260) #计算第2种情况时n个点的坐标
plt.plot(xt,yt,'r-')             #绘制第2种情况对应的轨迹
xt, yt = calBombTrace(2000, 200) #计算第3种情况时n个点的坐标
plt.plot(xt,yt,'r-')             #绘制第3种情况对应的轨迹
xt, yt = calBombTrace(2000, 260) #计算第4种情况时n个点的坐标
plt.plot(xt,yt,'r-')             #绘制第4种情况对应的轨迹
plt.grid('on')
plt.axis([0, 6500, 0, 3000])
plt.show()
plt.savefig( 'src/step5/student/pic.png' )
plt.close()

T6 绘制更多条轨迹

跟上一个题一样,就是在循环里用函数

import numpy as np
import matplotlib.pyplot as plt
########## Begin ##########
H = [3000, 2000, 1000]
V0 = [200, 260, 230]
g, n = 9.8, 30
def Output(h, v0) :
    tmax = (2 * h / g) ** 0.5
    t = np.linspace(0, tmax, n)
    return v0 * t, h - 0.5 * g * t ** 2
for h in H :
    for v0 in V0 :
        xt, yt = Output(h, v0)
        plt.plot(xt, yt, 'r-')
plt.grid('on')
plt.axis([0, 6500, 0, 3000])
plt.show()
########## End ##########
plt.savefig( 'src/step6/student/pic.png' )
plt.close()
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐