Python结构化编程
时间:2007-09-22 来源:jcodeer
C语言经典100例(python版本)的一点儿想法
---Python结构化编程
最近,将网上流传的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能使什么数据?没有试过。
---Python结构化编程
最近,将网上流传的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能使什么数据?没有试过。
相关阅读 更多 +