任何语言学习的必修课,在C中是这样的:
#include <stdio.h>
main()
{
printf("hello, world!/n");
}
到了C++中推荐这样:
#include <iostream>
int main()
{
std::cout<<"Hello, world!"<<std::endl;
return 0;
}
在Python中,是这样
例2.0
print "Hello, World!/n"
仅有一句,没有main,也没有括号,print就是Python的输出函数,此程序运行方式有两种,一种是即时的交互模式,一种是脚本方式。需要说明的是,Python是一种脚本语言,所以运行不需要编译。这点的确还是比较方便的。我以前接触过的脚本语言matlab和Python倒有些类似。交互方式下,直接输入就可以了。脚本方式你可以用任何你喜欢的文本编辑工具输入以上文字,保存为后缀py的文件,并在Python中打开并Run就好了。以下例子均为在脚本方式调试,你可以尝试在交互模式输入,注意缩进。在Python中,很多语法是通过缩进来控制的,不可思议,但对于减少输入的确效果明显。也就是说Python里面空格可能是有意义的!这样不仅大量减少了括号,还省略了C++中每行必须的分号。
首先看The C Programming Language中第4面例子的Python版:
例2.1
lower = 0; #温度表的下限
upper = 300; #温度表的上限
step = 20; #步长
fahr = lower;
while fahr <= upper:
celsius = 5 * (fahr-32) /9
print "%d/t%d/n" % (fahr,celsius)
fahr += step
1,Python使用自定义变量前不用声明,这是因为Python是动态语言,使得Python方便了很多,当然,不谈效率,这很好。
2,Python 也有while语句,不过也不要括号,以“:”冒号开始,按缩进标识,下面都是循环内容。你可以尝试去改变缩进,看看效果。
3,print语句也接收一个字符串,并与C语言格式类似,不过,中间以%分格,如此形式:print “%x %x” % (x,x),%后字符与C语言一样,不过都可以用%s,因为,Python会自动转化为字符串。
另外,Python的注释符是#,相当于C++中的//。不过多解释了。
以上程序输出一个华氏温度与摄氏温度对照表。学过C语言应该能看懂吧。有一点需要习惯的是,python对浮点数到整数的转换为四舍五入,
而不是C/C++中的截断。对此一下。
例2.2
lower = 0.0; #温度表的下限
upper = 300.0; #温度表的上限
step = 20; #步长
fahr = lower;
while fahr <= upper:
celsius = 5 * (fahr-32) /9
print "% 5.1f /t% 5.1f /n" % (fahr,celsius)
fahr += step
如上方式,就可以浮点方式输出。和C/C++类似。
另外,在Python中似乎没有符号常量,Dive Into Python说这一点满足 Python的核心原则之一:坏的行为应该被克服而不是被取缔。这似乎有点像C++中很多特性的原则:要相信程序员永远不会犯错误。但其实又有那么多特性就是为了减少程序员的错误而设计的,还有很多特性就是为了尽量在程序员犯错误时能更早(在编译时)发现错误而设计的。这一点我一直觉得很矛盾,而事实上,那些相信程序员的特性往往成为C++程序错误百出,被人垢病之处。我宁愿有个语言设计原则是永远不要相信程序员。
说完了输出,接下来看看输入:
例2.3
x = raw_input("Please enter a integer")
print x+x
Python中,输入可以像上面这样,用raw_input命令。并且可以以一个字符串为参数做为提示语,Python将为你打开一个对话框来接收输入。输入一个整数调试一下,你算到结果了吗?因为Python不知道你输入的类型,所以都保存为字符串。要改变类型,可以像C++一样函数似强制转换。应该来说,如int,float等在Python中就是一个转换类型的函数而已,因为它们不用来指定类型啊。如下例所示可得想要的结果:
例2.4
x = int(raw_input("Please enter: "))
print x+x
另外,这里有个很愉快的地方,你可以尝试输入一个超大的数字试试,就知道我在说什么了。Python会为你自动指定一个无限大的整数,天哪,我一直在尝试用C++实现一个无限长整数,你能想象要提供足够多的可用操作并效率高有多难吗?远远超出了我的数学水平!而标准C++中只能处理2的32次方这么小的数,用做数学运算仅够尾数。
Python也支持if条件判断语句。如下:
例2.5
x = raw_input("Please enter: ")
if x:
x = int(x)
print x+x
else:
print "No input"
这样,当没有输入的时候,会提示No input,在例2.4中,这种情况会因为用int转换空的x而引发异常。格式上与while语句类似。
在Python中,条件判断也是用“==”,赋值用“=”,不过条件判断时不可以赋值,这样的确少了一些错误,但很明显,如C语言中的while(*d++=*s++)类似语句是不能写出来了。哦,我忘了,Python中就根本没有++,--这样的东西……,郁闷中。
Python中不仅支持if else语句,还用了新的语句,if elif。以此来替代C++中的switch,就我使用感觉不错。Python同样也支持break,continue,并且与C++中意义完全一样。见下例:
while True:
x=raw_input("Please input a input")
if x =="":
continue
elif x =="!":
break
elif x =="1":
print "single"
elif x =="2":
print "double"
else:
print "more"
意义很明显,不多说了,要提到的是, Python中的布尔值是True,False,第一个字母大写的。
字符串在Python中与C++中很类似,有专门的数据结构来表示。当然,同样的,因为Python不那么注重(或者说作为目标在上层应用程序的Python不需要那么死抠效率),所以,所有的字符串都用高层抽象的类型来表示。突然想起C++中如入了 STL,其中有string类型,也可以达到同样的效果。不过即便是可选的STL都被人诟病不已,只能说,C++为底层开发背负的担子实在太重了。另外,Python大胆如此,在Python中用的最多的聚合结构是C++中的list........也就是链表。。。。。其使用方式可以和C++的数组类似。也以0为第1个成员。
Python字符串不能改写。按字符串索引赋值会产生错误。这点我估计是因为效率原因。所以,Python提供了一种简单的切片方式制做新的字符串。具体的细则可以参考Python的手册。我并不是想做一个教程,没那个能力,只是想提供一些例子,并发表点意见罢了。
像字符串一样,Python的链表也以零开始,可以被切片,联接。不过更夸张的是,作为动态类型语言,Python的链表可以同时存储不同类型的成员。它也可以嵌套链表。。。。我无语了,用法是夸张,不过我还不见有什么用。
看了很多Python的语法的东西,最后发现还是难以习惯,连最后的分号都总是不记得去掉,这样讲好像不对,应该是,连最后不要加分号都记不住。。。。更不提思维了。慢慢来吧。
for语句 Python中也有,不过是以一个链表作为循环条件的,这点比较奇怪,与C++中的for相差不是一点远。本来想重写TCPL中的单词统计程序,不过发现自己没有办法用Python写出来,没有办法。。。。。。。。。郁闷了,不知道这里该写什么了。