声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 10940|回复: 29

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

  [复制链接]
发表于 2010-11-2 11:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

    ==============第一阶段:熟悉环境================
2.jpg

问题零:从哪里入门?
         简明Python教程
         http://woodpecker.org.cn/abyteofpython_cn/chinese/
   
问题一:在哪里编写和执行代码?
         暂时使用IDLE,因为有语法高亮,也且和MATLAB很像。既可以在解释器中输入单行命令,又何以编辑脚本文件整体运行。
1.jpg
问题二:在哪里获取帮助信息?
         Help()命令
   
问题三:Hello World程序
  1. print 'Hello World'
复制代码


问题四:求两个整数的最大公约数和最小公倍数
  1. # -*- coding: cp936 -*-
  2. #求两个整数的最大公约数和最小公倍数
  3. #范雨,20101102
  4. m = mi = int(raw_input(u'输入一个整数:'));
  5. n = ni = int(raw_input(u'再输入一个整数:'));
  6. #确保m>=n
  7. if m < n:
  8.     t = m;
  9.     m = n;
  10.     n = t;
  11. #循环比较
  12. while True:
  13.     t = m%n;
  14.     if t == 0:
  15.         break;
  16.     m = n;
  17.     n = t;
  18. #输出结果
  19. print mi, '和', ni ,"的最大公约数为:",n
  20. print mi, '和', ni ,"的最小公倍数为:",mi*ni/n
复制代码


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

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

  1. # -*- coding: cp936 -*-
  2. #求两个整数的最大公约数和最小公倍数
  3. #范雨,20101102
  4. def Calcu(m,n):
  5.   u'''计算两个整数的最大公约数和最小公倍数
  6.   这两个数必须是正整数!'''
  7.   #确保m>=n
  8.   if m < n:
  9.     t = m;
  10.     m = n;
  11.     n = t;
  12.   #循环比较
  13.   while True:
  14.     t = m%n;
  15.     if t == 0:
  16.       break;
  17.     m = n;
  18.     n = t;
  19.   #
  20.   return n;
  21. mi = int(raw_input(u'输入一个整数:'));
  22. ni = int(raw_input(u'再输入一个整数:'));
  23. #输出结果
  24. k = Calcu(mi,ni);
  25. print mi, '和', ni ,"的最大公约数为:",k
  26. print mi, '和', ni ,"的最小公倍数为:",mi*ni/k
复制代码


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

  1. # -*- coding: cp936 -*-
  2. #求两个整数的最大公约数和最小公倍数
  3. #范雨,20101102
  4. def Calcu(m,n):
  5.   u'''计算两个整数的最大公约数和最小公倍数
  6.   这两个数必须是正整数!'''
  7.   #确保m>=n
  8.   if m < n:
  9.     t = m;
  10.     m = n;
  11.     n = t;
  12.   #循环比较
  13.   while True:
  14.     t = m%n;
  15.     if t == 0:
  16.       break;
  17.     m = n;
  18.     n = t;
  19.   #
  20.   return n;
  21. if __name__ == '__main__':
  22.   mi = int(raw_input(u'输入一个整数:'));
  23.   ni = int(raw_input(u'再输入一个整数:'));
  24.   #输出结果
  25.   k = Calcu(mi,ni);
  26.   print mi, '和', ni ,"的最大公约数为:",k
  27.   print mi, '和', ni ,"的最小公倍数为:",mi*ni/k

  28. version = '0.1'
复制代码


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


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

  1. # -*- coding: cp936 -*-
  2. #求两个整数的最大公约数和最小公倍数
  3. class NumBase:
  4.   def __init__(Self,m,n):
  5.     #确保m>=n
  6.     if m < n:
  7.       t = m;
  8.       m = n;
  9.       n = t;
  10.     Self.m = m;
  11.     Self.n = n;
  12.   def __del__(Self):
  13.     print "Calcu between %d and %d is over."%(Self.m,Self.n);
  14.   def Calcu(Self):
  15.     m = Self.m;
  16.     n = Self.n;
  17.     #循环比较
  18.     while True:
  19.       t = m%n;
  20.       if t == 0:
  21.         break;
  22.       m = n;
  23.       n = t;
  24.     return n;
  25. if __name__ == '__main__':
  26.   mi = int(raw_input(u'输入一个整数:'));
  27.   ni = int(raw_input(u'再输入一个整数:'));
  28.   #输出结果
  29.   NB = NumBase(mi,ni);
  30.   k = NB.Calcu();
  31.   print mi, '和', ni ,"的最大公约数为:",k
  32.   print mi, '和', ni ,"的最小公倍数为:",mi*ni/k
  33.   del NB;
  34. 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
    ===========================================================

评分

3

查看全部评分

回复
分享到:

使用道具 举报

发表于 2010-11-2 17:24 | 显示全部楼层
pythonxy里有一个更像matlab的就是spyder。你可以打开看一下,非常的方便。
 楼主| 发表于 2010-11-2 17:34 | 显示全部楼层
回复 smtmobly 的帖子

谢谢,安装的时候把能选的都选上了,装完了眼花缭乱的,刚开始用eclipse新建了一个模块,一上来就写:
if __name__ == '__main__':
看得我一头雾水(当然现在貌似是明白了。。。),所以决定从零开始认真捋一遍……
发表于 2010-11-2 20:28 | 显示全部楼层
调试用的,你可以用ipython。cd 到你的文件夹,run test.py 就可以运行程序。
慢慢玩吧!祝你玩的快乐呵呵
发表于 2010-11-3 16:40 | 显示全部楼层
fy,你到底是在干嘛的啊?感觉你就像个程序员了。。。。什么都那么懂
发表于 2010-11-3 16:48 | 显示全部楼层

点评

赞成: 5.0
赞成: 5
说的是smtmobly吧  发表于 2010-11-3 19:47
发表于 2010-11-3 16:54 | 显示全部楼层
本帖最后由 fxuestc 于 2010-11-3 16:55 编辑

回复 FtpAdmin 的帖子

计算数学
发表于 2010-11-3 21:54 | 显示全部楼层
呵呵,说我??你高估我了,我其实都是每个都是皮毛,兴趣广泛而已。
呵呵。不知道怎么搞的ubuntu的输入法用的很 不顺手,郁闷的很 。
这两 天一直想用sympy把那个四届偏微分方程解出来,还是没搞定,
还想在这写一个例子呢,结果没成功,还是手算靠谱点。
 楼主| 发表于 2010-11-3 22:05 | 显示全部楼层
回复 smtmobly 的帖子

加油加油
等我把第二阶段过了打算把以前用MATLAB写的一个分流体网格的程序用Python重写,也是反解偏微分方程(Laplace),呵呵
发表于 2010-11-3 22:08 | 显示全部楼层
你用laplace变换写流体力学的计算程序?

点评

没有,分网格而已,小玩意儿,过两天贴出来你就知道啦  发表于 2010-11-3 22:09
 楼主| 发表于 2010-11-3 22:11 | 显示全部楼层
回复 smtmobly 的帖子

还有,Python分区雪缘帮我们分出来了,呵呵
发表于 2010-11-3 22:12 | 显示全部楼层
哦!呵呵,我说呢,以前我也用拉票laplace逆运算计算演化方程,但是只能计算线性的。有兴趣可以看看我的论文。不过我的毕业论文不知道去哪了,只有发表的论文,也许对你有用

点评

赞成: 5.0
赞成: 5
谢谢!要不你另开一贴给分享出来?我怕贴在回帖里埋没了……已经发表了的话应该没有版权问题吧?  发表于 2010-11-3 22:14
发表于 2010-11-3 22:16 | 显示全部楼层
呵呵,没啥,都是些已经成熟的问题,是我的论文,我发给你
发表于 2010-11-11 00:14 | 显示全部楼层
呵呵,看到大家让我都很有动力深化我的编程能力了……加油呵……

点评

赞成: 5.0
赞成: 5
苟日新,日日新嘛,学习过程中有体验和困惑欢迎来这边探讨!  发表于 2010-11-11 09:38
发表于 2010-11-11 11:06 | 显示全部楼层
回复 14 # captain114 的帖子

呵呵,说的是。貌似你也是北航的,我现在也是在北航,遇到同窗了呵……以后还要多向大家学习……
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-16 17:29 , Processed in 0.070978 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表