Python数字编程 第一章练习 (下)

1.5.3 转换测量单位

我们从长度开始,在英国和美国,英寸和英里常用来表示长度,而其他大多数国家使用厘米和千米。

一英寸约等于2.54厘米,我们可以使用乘法运算转换成厘米,然后继而转换成米、千米。例如,我们可以将25.5英寸转换为:


 >>> (25.5 * 2.54) / 100 0.6476999999999999

另一方面,1英里大约是1.609千米,我们可以将650英里转换成650*1.609千米:


 >>> 650 * 1.609 1045.85

现在再来看一下温度转换——从华氏温度到摄氏温度,以及反向转换。使用以下公式将华氏温度转换为摄氏温度:


其中,C为华氏温度,F为摄氏温度,比如98.6华氏度是人体的正常温度,得到相应的摄氏温度,我们应该这样做:


 >>> F = 98.6 >>> (F - 32) * (5/9) 37.0

而若是想将摄氏温度转换为华氏温度,将上述公式变形即可

我们依然可以输入公式进行计算


 >>> C = 37 >>> C * (9/5) + 32 98.60000000000001

但是一次一次的输入公式是非常麻烦的,我们需要一个单位转换程序,该程序提供给用户一个菜单,用户可以选择要执行的转换,然后输出计算结果,程序如下:


 ''' Unit converter : Miles and Kilometers '''  def print_menu():     print('1. Kilometers to Miles')     print('2. Miles to Kilometers')  def km_to_miles():     km = float(input('Enter distance in kilometers : '))     miles = km / 1.609     print('Distance in miles: {0}'.format(miles))  def miles_to_km():     miles = float(input('Enter distance in Miles : '))     km = miles * 1.609     print('Distance in kilometers: {0}'.format(km))  if __name__ == '__main__':     print_menu()        # ①     choice = input('Which conversion would you like to do : ')      # ②     if choice == '1':         km_to_miles()     if choice == '2':         miles_to_km()

这个程序比较长,但是不用担心,还是比较简单的。①处,调用print_menu()函数,输出两个菜单选项,用户输入要进行的类型转化即可,然后在②处会记录用户的选择,进入相应的转换函数,转换函数会要求用户输入距离,然后使用相应的公式转换并显示结果。


 1. Kilometers to Miles 2. Miles to Kilometers Which conversion would you like to do : 1  # ① Enter distance in kilometers : 1000 Distance in miles: 621.5040397762585

可以看到我们选择了千米转换为英里这个函数,输入1000km然后输出了计算结果,大约622英里。

在这里,你可以扩展这个程序,实现厘米,分米,米这些单位与英里英寸的转换。

1.5.4 求二次方程的根

我们首先来回顾一下数学中二次方程的求根方法,对于ax^2 + bx + c = 0这样的二次方程,我们可以根据判定式来描述方程解的形式

  • 判定式 > 0,方程有两个根
  • 判定式 = 0,方程仅有一根
  • 判定式 < 0,方程无解

其中,判定式为b^2 -4ac

其次,给出方程的求根公式:

那么,我们就可以通过给定的一元二次方程的系数a,bc来进行求解


 >>> a = 1 >>> b = 2 >>> c = 1

求根公式中均包含,我们将其命名为A,B


 >>> A = - b / (2 * a) >>> B = (b ** 2 - 4 * a * c) ** 0.5 / (2 * a)

此时即可进行求解


 >>> x1 = A + B -1.0 >>> x2 = A - B -1.0

这个例子中,我们没有判定这个方程是否有解,实际中这样子是行不通的,这里只是给出了求根的一般步骤,下面,给出完整的求根函数


 ''' Quadration equation root calculator '''  def roots(a, b, c):     A = - b / (2 * a)     B = (b ** 2 - 4 * a * c) ** 0.5 / (2 * a)     x1 = A + B     x2 = A - B     print('x1 = {0}'.format(x1))     print('x2 = {0}'.format(x2))  if __name__ ==  '__main__':     a = float(input('Enter a : '))     b = float(input('Enter b : '))     c = float(input('Enter c : '))     if (b ** 2 - 4 * a * c) >= 0:         roots(a, b, c)     else:         print('Equation no roots!')

和刚刚一样,创建三个标签来接收键盘输入的常数a,b,c,如股票判定式大于等于0的话就调用roots()函数进行求解,否则输出方程无解。


 Enter a : 1 Enter b : 2 Enter c : 1 x1 = -1.0 x2 = -1.0

事实上,严格来讲,方程无根并不是很准确,判定式小于0的话我们一般认为存在复数根,上述代码稍作修改,即可进行求解,去掉main函数中的判断条件即可


 if __name__ ==  '__main__':     a = float(input('Enter a : '))     b = float(input('Enter b : '))     c = float(input('Enter c : '))     roots(a, b, c)

此时,我们输入一个无根方程,如X^2 + x + 1 = 0


 Enter a : 1 Enter b : 1 Enter c : 1 x1 = (-0.49999999999999994+0.8660254037844386j) x2 = (-0.5-0.8660254037844386j)

二次方程根求解完毕。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章