Crossin的编程教室

标题: 【Python 第53课】 数学运算 [打印本页]

作者: crossin先生    时间: 2013-9-4 13:33
标题: 【Python 第53课】 数学运算
今天从打飞机游戏里中断一下,说些python的基础。

在用计算机编程解决问题的过程中,数学运算是很常用的。python自带了一些基本的数学运算方法,这节课给大家介绍一二。

python的数学运算模块叫做math,再用之前,你需要
import math

math包里有两个常量:
math.pi
圆周率π:3.141592...

math.e
自然常数:2.718281...

数值运算:
math.ceil(x)
对x向上取整,比如x=1.2,返回2

math.floor(x)
对x向下取整,比如x=1.2,返回1

math.pow(x,y)
指数运算,得到x的y次方

math.log(x)
对数,默认基底为e。可以使用第二个参数,来改变对数的基底。比如math.log(100, 10)

math.sqrt(x)
平方根

math.fabs(x)
绝对值

三角函数:
math.sin(x)
math.cos(x)
math.tan(x)
math.asin(x)
math.acos(x)
math.atan(x)
注意:这里的x是以弧度为单位,所以计算角度的话,需要先换算

角度和弧度互换:
math.degrees(x)
弧度转角度

math.radians(x)
角度转弧度

以上是你平常可能会用到的函数。除此之外,还有一些,这里就不罗列,可以去
http://docs.python.org/2/library/math.html
查看官方的完整文档。

有了这些函数,可以更方便的实现程序中的计算。比如中学时代算了无数次的
(-b±√(b²-4ac))/2a
现在你就可以写一个函数,输入一元二次方程的a、b、c系数,直接给你数值解。好,这题就留作课后作业吧。

以后我还会不定期地介绍python中的模块,例如random(随机数)、re(正则表达式)、time(时间)、urllib2(网络请求)等等。

#==== Crossin的编程教室 ====#
微信ID:crossincode
论坛:http://crossin.me
QQ群:156630350

面向零基础初学者的编程课
每天5分钟,轻松学编程





作者: 笨熊    时间: 2013-9-4 17:04
math.log()中的例子>>> math.log(100, base=10)是不对的,应该改为math.log(100, 10)
作者: Victor    时间: 2013-9-4 20:20
笨熊 发表于 2013-9-4 17:04
math.log()中的例子>>> math.log(100, base=10)是不对的,应该改为math.log(100, 10)

顶一下,我试了也不对
作者: crossin先生    时间: 2013-9-5 19:47
笨熊 发表于 2013-9-4 17:04
math.log()中的例子>>> math.log(100, base=10)是不对的,应该改为math.log(100, 10)

谢指出,已改。

因为log是一个cpython函数,所以有些python的特性是不支持的。
作者: 笨熊    时间: 2013-9-5 20:26
crossin先生 发表于 2013-9-5 19:47
谢指出,已改。

因为log是一个cpython函数,所以有些python的特性是不支持的。 ...

哦~我是菜鸟,只是在练习的时候发现这个不对~谢谢crossin的系列教程,学习了很多~感谢!
作者: cyin15288    时间: 2013-9-5 20:56
什么时候能讲Python的数据库操作!
作者: piaoxu    时间: 2013-9-6 20:32
金币金币~~~~~
作者: fl0w    时间: 2013-9-24 12:51
课后作业

Screenshot.png (24.59 KB, 下载次数: 376)

math53

math53


作者: crossin先生    时间: 2013-9-24 18:22
fl0w 发表于 2013-9-24 12:51
课后作业



作者: michael    时间: 2013-10-2 00:51
学习了

作者: 脑子有音乐    时间: 2014-7-2 14:32
一直出错,原来负数不能开根号,价格if 就搞定了,虽然代码丑点!!!
作者: QQ_E29166    时间: 2014-7-31 20:00
课后作业
import math
def jieguo(a,b,c):
    e=math.pow(b,2)
     f=e-4*a*c
     g=math.sqrt(f)
    m=(-b+g)/(2*a)
     n=(-b-g)/(2*a)
     print '结果分别是:'
     return m,n
各位老师帮我看看,对不对,我带入数值试了,应该可以。
__________________________________鹰隼
作者: liu-pengfei    时间: 2014-9-27 00:10
random(随机数)、re(正则表达式)、time(时间)、urllib2(网络请求)等等。一个接着一个学习。
作者: 草办    时间: 2015-12-11 14:40
get
作者: fangweiren    时间: 2016-2-3 08:53
标题: 瞎写的
  1. # -*- coding: UTF-8 -*-
  2. import math

  3. def result(a,b,c):
  4.         derat = b**2-4*a*c
  5.         if a == 0:
  6.                 if b != 0:
  7.                         x = -c / b
  8.                         return x
  9.                 else:
  10.                         return '无解'
  11.                
  12.         else:
  13.                 if derat < 0:
  14.                         return '无实根 '
  15.                 elif derat == 0:
  16.                         x = (-b-math.sqrt(derat))/2*a
  17.                         return x
  18.                 else:
  19.                         xone = (-b+math.sqrt(derat))/2*a
  20.                         xtwo = (-b-math.sqrt(derat))/2*a
  21.                         return xone,xtwo
  22.                                                 
  23. print result(1,1,1)
  24. print result(1,2,1)
  25. print result(1,2,-3)
  26. print result(0,0,3)
复制代码

作者: Kunz    时间: 2016-2-28 14:53
import math

def result(a,b,c):
    derta=(b*b-4*a*c)
    if a==0:
        if b!=0:
            r=-c/b
            print('只有一个解:%f'% (r))
        else:
            print('No result!')
    else:
        if derta<0:
            print('无实根')
        elif derta==0:
            r1=(-b)/(2*a)
            print('只有一个解:%f'% (r1))
        else:
            r1=((-b)+math.sqrt(derta))/(2*a)
            r2=((-b)-math.sqrt(derta))/(2*a)
            print('解一:%f'% (r1))
            print('解二:%f'% (r2))

result(1,5,1)
作者: 妙舞汉宫人    时间: 2016-7-29 18:50
crossin先生 发表于 2013-9-5 19:47
谢指出,已改。

因为log是一个cpython函数,所以有些python的特性是不支持的。 ...

我试了一下这个例子,可以使用,不报错
  1. import math
  2. print math.log(100, 10)
复制代码

作者: 妙舞汉宫人    时间: 2016-8-5 10:01
课后作业中if __name__=="__main__":
     print(root(1,2,1))
     print(root(1,1,1))
中if __name__=="__main__":是什么意思啊?
作者: 妙舞汉宫人    时间: 2016-8-5 10:17
15楼程序运行出来是
(-1.0, -1.0)
无实根
-1
鏃犺В
请问最后一个为什么会出现这种情况
作者: crossin先生    时间: 2016-8-5 11:19
妙舞汉宫人 发表于 2016-8-5 10:17
15楼程序运行出来是
(-1.0, -1.0)
无实根

他代码里写的编码是utf8,如果你是windows,换成gbk
作者: 妙舞汉宫人    时间: 2016-8-5 12:44
好的,谢谢
作者: jinbohuan    时间: 2018-4-2 17:22
crossin先生 发表于 2013-9-24 18:22

数学不好的,是不是干不了编程。
作者: loveting0jie    时间: 2018-5-30 15:48
crossin先生 发表于 2013-9-24 18:22

这次练习里面,我看好多人都写了a=0,b!=0返回-c/b这一段,这里不太懂,(-b±√(b²-4ac))/2a这个计算式里面a应该不能等于0吧,等于0的话不应该都是无解吗?
作者: crossin先生    时间: 2018-5-31 00:22
loveting0jie 发表于 2018-5-30 15:48
这次练习里面,我看好多人都写了a=0,b!=0返回-c/b这一段,这里不太懂,(-b±√(b²-4ac))/2a这个计算式里 ...

所以a=0要特别处理
a=0就是一次方程啊
作者: suiersoda    时间: 2018-6-11 16:51
  1. import math
  2. def result(a,b,c):
  3.     derat=b*b-4*a*c
  4.     if a==0:
  5.         return('a不能为0')
  6.     if derat==0:
  7.         x=-b/2*a
  8.         return x

  9.     elif derat>0:
  10.         x1=(-b+math.sqrt(derat))/2*a
  11.         x2=(-b-math.sqrt(derat))/2*a
  12.         return x1,x2
  13.     else:
  14.         return('无实根')



  15. while True:
  16.     a=int(input("请输入a的值:"))
  17.     b=int(input('请输入b的值:'))
  18.     c=int(input('请输入c的值:'))
  19.     if a == 0:
  20.         print('请重新输入:')
  21.     else:
  22.         break
  23. print(result(a,b,c))
复制代码
想让a=0的时候不用重新执行代码,可以直接重新输入,只有这个break能成功,用之前的bingo==False的方法就结束不了循环,不知道为什么
作者: suiersoda    时间: 2018-6-11 16:54
suiersoda 发表于 2018-6-11 16:51
想让a=0的时候不用重新执行代码,可以直接重新输入,只有这个break能成功,用之前的bingo==False的方法就结 ...
  1. bingo=False
  2. while bingo==False:
  3.     a=int(input("请输入a的值:"))
  4.     b=int(input('请输入b的值:'))
  5.     c=int(input('请输入c的值:'))
  6.     if a == 0:
  7.         print('请重新输入:')
  8.     else:
  9.         bingo==True
  10. print(result(a,b,c))
复制代码
这样结束不了这个循环
作者: crossin先生    时间: 2018-6-11 21:31
suiersoda 发表于 2018-6-11 16:54
这样结束不了这个循环

bingo=True,不是bingo==True
作者: suiersoda    时间: 2018-6-12 10:28
crossin先生 发表于 2018-6-11 21:31
bingo=True,不是bingo==True

啊,明白了!感谢先生每次这么晚还帮忙解答问题!




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5