Rainyboy 发表于 2010-11-2 11:11

Python:一场从零开始的奇妙旅程

拜smtmobly赐教,从http://www.pythonxy.com/下载了pythonxy套件,开始了新的学习,我将在这个帖子里记录学习python的点点滴滴,包括转帖从别处得来的讯息。
    从零开始,学习新知!
    =================联动帖=====================
   关于OOP中若干特性的思考
   http://forum.vibunion.com/thread-97114-1-1.html

    ==============第一阶段:熟悉环境================


问题零:从哪里入门?
         简明Python教程
         http://woodpecker.org.cn/abyteofpython_cn/chinese/
   
问题一:在哪里编写和执行代码?
         暂时使用IDLE,因为有语法高亮,也且和MATLAB很像。既可以在解释器中输入单行命令,又何以编辑脚本文件整体运行。

问题二:在哪里获取帮助信息?
         Help()命令
   
问题三:Hello World程序
print 'Hello World'

问题四:求两个整数的最大公约数和最小公倍数
# -*- coding: cp936 -*-
#求两个整数的最大公约数和最小公倍数
#范雨,20101102
m = mi = int(raw_input(u'输入一个整数:'));
n = ni = int(raw_input(u'再输入一个整数:'));
#确保m>=n
if m < n:
    t = m;
    m = n;
    n = t;
#循环比较
while True:
    t = m%n;
    if t == 0:
      break;
    m = n;
    n = t;
#输出结果
print mi, '和', ni ,"的最大公约数为:",n
print mi, '和', ni ,"的最小公倍数为:",mi*ni/n


    这个例子可以练习IO输入、字符串的定义、条件和循环的使用,以及python特有的,以缩进表示代码块的特点。
    运行结果为

>>>
输入一个整数:24
再输入一个整数:100
24 和 100 的最大公约数为: 4
24 和 100 的最小公倍数为: 600
>>>   
问题五:如何使用函数?(将问题四的代码重构为函数)

# -*- coding: cp936 -*-
#求两个整数的最大公约数和最小公倍数
#范雨,20101102
def Calcu(m,n):
u'''计算两个整数的最大公约数和最小公倍数
这两个数必须是正整数!'''
#确保m>=n
if m < n:
    t = m;
    m = n;
    n = t;
#循环比较
while True:
    t = m%n;
    if t == 0:
      break;
    m = n;
    n = t;
#
return n;
mi = int(raw_input(u'输入一个整数:'));
ni = int(raw_input(u'再输入一个整数:'));
#输出结果
k = Calcu(mi,ni);
print mi, '和', ni ,"的最大公约数为:",k
print mi, '和', ni ,"的最小公倍数为:",mi*ni/k

    这个例子可以练习函数值的返回方式、局部变量、DocStrings、等特性
    问题六:如何定义和使用模块

# -*- coding: cp936 -*-
#求两个整数的最大公约数和最小公倍数
#范雨,20101102
def Calcu(m,n):
u'''计算两个整数的最大公约数和最小公倍数
这两个数必须是正整数!'''
#确保m>=n
if m < n:
    t = m;
    m = n;
    n = t;
#循环比较
while True:
    t = m%n;
    if t == 0:
      break;
    m = n;
    n = t;
#
return n;
if __name__ == '__main__':
mi = int(raw_input(u'输入一个整数:'));
ni = int(raw_input(u'再输入一个整数:'));
#输出结果
k = Calcu(mi,ni);
print mi, '和', ni ,"的最大公约数为:",k
print mi, '和', ni ,"的最小公倍数为:",mi*ni/k

version = '0.1'


    当这个模块作为程序入口点时将执行if __name__ == '__main__':之下的语句,而作为模块被导入其他模块时则不会执行,很方面的功能,我个人觉得使得单元测试进行得更方便了!
    问题七:如何使用“数组”
# -*- coding: cp936 -*-
from Num import Calcu
#列表的使用:定义两个列表,算出他们的最大公约数
NumListA = ;
NumListB = ;
NumListC = [];
for i in range(0,len(NumListA)):
    NumListC.append(Calcu(NumListA,NumListB));
print NumListC;


    同时也练习了模块间的调用。
    问题八:如何声明和使用“类”

# -*- coding: cp936 -*-
#求两个整数的最大公约数和最小公倍数
class NumBase:
def __init__(Self,m,n):
    #确保m>=n
    if m < n:
      t = m;
      m = n;
      n = t;
    Self.m = m;
    Self.n = n;
def __del__(Self):
    print "Calcu between %d and %d is over."%(Self.m,Self.n);
def Calcu(Self):
    m = Self.m;
    n = Self.n;
    #循环比较
    while True:
      t = m%n;
      if t == 0:
      break;
      m = n;
      n = t;
    return n;
if __name__ == '__main__':
mi = int(raw_input(u'输入一个整数:'));
ni = int(raw_input(u'再输入一个整数:'));
#输出结果
NB = NumBase(mi,ni);
k = NB.Calcu();
print mi, '和', ni ,"的最大公约数为:",k
print mi, '和', ni ,"的最小公倍数为:",mi*ni/k
del NB;
version = '0.1'

   对象的成员变量(相当于C++里的非static变量)不需要声明,,只有类成员变量(相当于C++里static变量)才需要声明。__init__相当于C++里的构造函数,__del__相当于C++里的析构函数,成员函数的声明必须在第一项为指向自身的Self引用留出位置(这一点于C++很不相同)。
    正是由于如此,类成员变量的访问都要加上Self.来实现,意义更加明显。

    用了一天的时间通读了《python简明教程》,很多东西都是对面对对象语言的另一种实现,老实说并不难。
    我想,接下来要做的是了解更多的库类用法,了解更多的语言细节吧,再接再厉!

    PS,这一阶段遗留的问题:
    1-1,如果对象的成员变量不需要“声明”,那么如何表示这个成员变量的访问属性(private,public)呢?
    1-2,关于类函数接口的访问属性是如何设置的呢?如果子类出现于父类同名的函数,如何体现继承覆盖和多态(abstract,interface)的区别呢?
    1-3,常用的绘图库类有哪些,怎么用?
    1-4,常用的数学库类有哪些,怎么用?

==============第二阶段:利用更多的资源进阶================
   这一阶段我打算主要学习:http://www.diveintopython.org/(深入解析Python),期待能从中得到更精彩的内容吧!   这一阶段内容比较发散,见帖子:
   用TTM方法生成翼型网格(Python & MATLAB)      
   http://forum.vibunion.com/thread-98121-1-1.html

   Scipy库中哪个函数可以求解一元函数的根?
   http://forum.vibunion.com/thread-98104-1-1.html


   关于OOP中若干特性的思考
   http://forum.vibunion.com/thread-97114-1-1.html
   
    ==============更多库类及参考资料=======================
   SciPy,参考资料见:            
       http://docs.scipy.org/doc/numpy/numpy-ref.pdf
   Numpy,参考资料见:   
       http://docs.scipy.org/doc/scipy/scipy-ref.pdf                                          
       http://docs.scipy.org/doc/numpy/numpy-user.pdf   
    matplotlib,参考资料见:
       http://matplotlib.sf.net/Matplotlib.pdf
    ===========================================================

smtmobly 发表于 2010-11-2 17:24

pythonxy里有一个更像matlab的就是spyder。你可以打开看一下,非常的方便。

Rainyboy 发表于 2010-11-2 17:34

回复 smtmobly 的帖子

谢谢,安装的时候把能选的都选上了,装完了眼花缭乱的,刚开始用eclipse新建了一个模块,一上来就写:
if __name__ == '__main__':
看得我一头雾水(当然现在貌似是明白了。。。),所以决定从零开始认真捋一遍……

smtmobly 发表于 2010-11-2 20:28

调试用的,你可以用ipython。cd 到你的文件夹,run test.py 就可以运行程序。
慢慢玩吧!祝你玩的快乐呵呵

fxuestc 发表于 2010-11-3 16:40

fy,你到底是在干嘛的啊?感觉你就像个程序员了。。。。什么都那么懂{:{13}:}

FtpAdmin 发表于 2010-11-3 16:48

fxuestc 发表于 2010-11-3 16:40 static/image/common/back.gif
fy,你到底是在干嘛的啊?感觉你就像个程序员了。。。。什么都那么懂

搞计算数学的老师{:{02}:}

fxuestc 发表于 2010-11-3 16:54

本帖最后由 fxuestc 于 2010-11-3 16:55 编辑

回复 FtpAdmin 的帖子

计算数学{:{28}:}

smtmobly 发表于 2010-11-3 21:54

呵呵,说我??你高估我了,我其实都是每个都是皮毛,兴趣广泛而已。
呵呵。不知道怎么搞的ubuntu的输入法用的很 不顺手,郁闷的很 。
这两 天一直想用sympy把那个四届偏微分方程解出来,还是没搞定,
还想在这写一个例子呢,结果没成功,还是手算靠谱点。

Rainyboy 发表于 2010-11-3 22:05

回复 smtmobly 的帖子

加油加油{:{35}:}
等我把第二阶段过了打算把以前用MATLAB写的一个分流体网格的程序用Python重写,也是反解偏微分方程(Laplace),呵呵

smtmobly 发表于 2010-11-3 22:08

你用laplace变换写流体力学的计算程序?

Rainyboy 发表于 2010-11-3 22:11

回复 smtmobly 的帖子

还有,Python分区雪缘帮我们分出来了,呵呵

smtmobly 发表于 2010-11-3 22:12

哦!呵呵,我说呢,以前我也用拉票laplace逆运算计算演化方程,但是只能计算线性的。有兴趣可以看看我的论文。不过我的毕业论文不知道去哪了,只有发表的论文,也许对你有用

smtmobly 发表于 2010-11-3 22:16

呵呵,没啥,都是些已经成熟的问题,是我的论文,我发给你

captain114 发表于 2010-11-11 00:14

呵呵,看到大家让我都很有动力深化我的编程能力了……加油呵……

captain114 发表于 2010-11-11 11:06

回复 14 # captain114 的帖子

呵呵,说的是。貌似你也是北航的,我现在也是在北航,遇到同窗了呵……以后还要多向大家学习……
页: [1] 2
查看完整版本: Python:一场从零开始的奇妙旅程