题主是大一学生,刚刚开始学习python,但是题主有一定的c语言基础,在这里以两者对比的形式做一些学习笔记
#循环语句的命名
在python和c语言中,都有两个循环语句,关键字都是while/for,看似都是大同小异,但是其实笔者在这里窥到了一些小玄机。
##while
在c语言里,我们把它称呼为while、do while循环结构;而在python里面,他有一个专门的名字---条件循环
##for
同样的,在c语言里,我们把它称呼为for循环结构;而在python里面,他也有一个专门的名字---遍历循环。
相关的结构在后面详细解释,这里主要讨论命名上的一些趣事
---------------------------------------------------------分割线---------------------------------------------------------------
我们都知道,c语言可以说是元老级的编程语言而python是20世纪末被创造,近几年才开始兴起的一门编程语言。同时它们最大的区别是c语言是面向过程的语言而python是面向对象的语言。
设想作为语言的创造者,创造一门编程语言肯定要能继承原来的功能。而作为“面向对象的语言”,它也会创造很多便利性。
对于同一个功能来说,如果我们给它取一个新名字,(比如把循环的名字改成重复等等)这无疑是增大开发者和学习者的无效工作量——开发者要花时间给它取新名字、学习者要记住它的新名字。那无异于脱裤放屁,更改它的名字肯定是出于一些目的。
举个例子,各种数据类型在python和c语言的称呼几乎是一样的,只有“字符型”改了名字:从char变成了str。这可能就是因为,python把“字符串”作为最基础的数据类型(这会提供很大的便利),单个字符是长度为1的字符串罢了;而在c语言中,根本不存在字符串的类型,所谓字符串其实是一个字符的数组——也就是多个字符的连续。也就是:c语言是以单个字符(character)为基础,而python是以字符串(string)为基础,这里的更名的原因就显而易见了。
有趣的就是,在循环里相似的循环标识符被取了不同的名字,那来看看这里的原因是什么。
#c语言的这两个循环
##while循环
while循环的基本结构为:
while(条件)
{
执行内容
}
只要满足条件就执行。
do……while 循环放在文章末尾介绍,因为其实笔者认为它不能和while算作一类
##for循环
for循环的基本结构是:
for(语句1;语句2;语句3){执行内容}
这里的三个语句一般对同一个变量操作,一般是有计数或者按顺序查找、使用的需要就可以使用for循环。
语句1是初始条件,语句二是循环的条件,语句三是操作。
其实for循环是对while循环的一种在特殊情况下的简化。
#include<stdio.h>
int main()
{
int i = 0;
int total = 0;
while(i<=10)
{
total += i;
i++;
}
printf("%d",total);
}
#include<stdio.h>
int main()
{
int total = 0;
for(int i = 0;i<=10;i++)
{
total+=i;
}
printf("%d",total);
}
因为有一个“i”作为1~10的逐个使用,这里就可以把i用在for循环内,更加简洁。尤其是把i作为数组下标进行数组的遍历很方便,大多数人的编程习惯都是for循环遍历数组。
当然for循环和while循环可以快乐地互相转化。
#python的这两个循环
##python中的条件循环基本结构是:
while 条件:
操作
##python中的遍历循环基本结构是:
for 参数 in range(首(默认0),尾(不取到),step(默认1)):
操作
或者for 参数 in <列表、元组、集合、字典等>(!!):
操作
这里使用他把缩进来区分循环内外的操作
从名字可以看出来,for循环从适合遍历的循环变为了专门用来遍历的循环,它不仅仅是把初始条件、判断条件和参数操作写在了同一个括号里,而是把(i = 0;i<10;i++)直接写成for i in range(10),变成了一种极其便利的循环方式。
我们诚然可以用for循环来代替while循环,只要把range里面的范围设置的足够大,再在合适的位置使用break就可以实现条件循环,但是这很麻烦很没有必要。
用for替换while仅仅是麻烦,用while替换for可以说是不可行。
在python里有集合与字典这2种变量集,它们有一个特性,就是它们在内存中不是顺序存放的,也就是说,我们不能以一号元素、二号元素……的方式遍历它。
而for循环提供了一个遍历方法:管你是不是连续,对你所有的元素都进行这个操作。这在while循环里是难以实现的,因为这种遍历方法避开了顺序查找。
因此python在什么时候用条件循环什么时候用遍历循环是规定的比较严格的,
换句话说,在c语言里for/while循环的选用是编程习惯,在python里是编程要求。
python牺牲了一定的编程自由度换来的是编程的便利性(以后我们会发现引入集合和字典会多方便)和语句的规范性,这和python以tab来作为循环语句和分支语句的区分符号 是相似的,通过一些强制的语法要求,牺牲一定编程自由度换取更加简洁规范便利的代码。
#补充do while 循环
这是c语言独有的循环,它是一种特别的循环。
c语言把循环语句分为两类:当型循环和直到型循环,最大的区别是条件和操作的先后关系。for与while都是当型循环,而do while是直到型循环,下图是它们的区别:
它的语句是:
do{操作}while(条件)
也就是说,无论如何至少会进入一次循环。
#小结
笔者发现python 有趣的一点就是牺牲了一些编程自由度和计算机层面的逻辑型达到更高效的编程和更适宜的代码可读性。在实用性上有很大帮助。