最近,将网上流传的C语言经典100例用python写了一遍,算是熟悉了一下python结构化编程,只当是将python作为更为好用的C,因没有太多的了解python,只是已有的python知识,加上C语言基础,总算是马马虎虎准完成(不过还有几个不知道如何写,暂时放一放,随着python的学习深入再将其完成)。现将写python过程中遇到的问题及感受做一下总结。


1.for关键字

功能:循环控制

C语言中的for语句极其灵活,如下:

for([i = start];[i < end]; [i += step]);

for(;;);                            //死循环

for(; i < end;i++);                 //次语句不用设置起始值

for(i = start;;i++);                //此语句不用设置终止值,死循环

for(i = start;i < end;);            //此语句不用设置步距值;还是死循环

for(i = start;i < end; i += 0.5);   //此语句设置步距值为0.5


Python语言for没有C语言那么的灵活,只是遍历对象,借助range实现循环,如下:

for i in range(start,end,step):

pass

start:可以省略,此时的值为0

end:必选,为最大值

step:可选,为步距值,默认值为1


range步距值控制使用range,缺点无法浮点步距值

for f in range(0.0,9.9,0.1):

pass

如果使用浮点步距值,这样使用:

for f in map(lambda x : 0.1 * x,range(0,9)):

pass


2.while循环输入

C语言可以这样书写

while( (a = getch()) != 0)

;

while (a = int(raw_input(‘input a number:\n'))) != 0:

pass

变通方法:

a = raw_input('input a number:\n')

while a != 0:

a = raw_input('input a number:\n')

pass

3.静态变量支持

C语言使用static关键字修饰变量两种用法:

修饰全局变量:防止非本文件访问此变量,控制变量的作用域。

修饰局部变量:延长变量的生命周期到程序结束。

本文不对修饰全局变量讨论,单看局部变量的static。C语言如下:

void f()

{

static int i = 0;

i++;

printf("%d\n",i);

}

每次调用f函数,i值增加1


python没有static变量,如下:

def f():

i = 0

i += 1

print i

i只是局部变量,每次开始其值复制0,所以i值一直为1

4.图形编程的支持

C语言有graphic库,Turbo C2.0下可以使用,简单的进行绘图,包含点(pixel)、线(line)、矩形(ranctangle)、椭圆(ellipse)等。Python没有直接使用这个库的模块(没有找到相应的模块支持),但可以使用UI图形库,如Tk


5.字符串的使用

C语言的字符串是以'\0'为结束标志,C语言的字符串称之为内存块更为确切,所有的字符串操作就是对内存的操作,也许是底层语言的优势吧。

C实现判断字符串是否结束:

if(p[i] == '\0');

python没有’\0‘,不能使用p[index] == '0'来进行判断,但python语言中的字符为一比较完美的数据类型,有自己的操作函数,与C语言字符串最大的不同是:python字符串不可修改。


6.预编译宏支持

C语言编写的程序需要编译,有预编译的概念,使用”宏“在编译时可以对代码进行生成。如:

定义常量:

#define __c__ 'c language'

定义"宏函数”

#define min((x),(y)) ((x) > (y) ? (y) : (x))


python为动态语言,不需要编译,要实现C语言的预处理功能,不可行。变通方法:

定义字符串:

__p__ = 'python language'

定义函数:

def min:

if x > y:

return y

else:

return x

7.指针的使用

可谓是C语言推崇的亮点,可谓C的杀手锏,灵活的使用指针,能够写出高效的代码,但C指针也是最容易出错,最难掌握的一个特性,稍有不慎,轻则结果莫名其妙,内存泄漏,重则程序直接崩溃。

Python则没有指针的概念,对于用C指针实现的数据结构,python实现起来倒是麻烦,所以直接使用python现有的数据结构了。如:C100例中的链表操作就直接使用python的list。

8.标准输出

C语言中的printf格式化输出,不带换行

python语言中的print格式化输出,带换行符,为了与C的printf输出,有时还得使用

sys.stdout.write来替换printk,如:例子中的图案打印

9.结构

C语言中的结构可以将数据结构化,便于数据的管理,python与之相对的为class,简单的实现也有其他方法,如使用list来模拟.C将数据结构写入文件,直接使用write,将要写入的数据地址传递给这个函数就可以了,python麻烦了,write的参数为string,直接写入list可以,要是写入个class能使什么数据?没有试过。


原文:http://blog.sina.com.cn/s/blog_7bad21ed0102we37.html