写在最前 ✍️
在上一篇博客 Python VS C(上篇)中,摊主从程序运行过程、模块导入、基本数据类型、变量、运算符、条件语句等角度对 C语言 和 Python 进行了对比。
那在这篇博客中,摊主将更进一步,从循环、函数定义、输入、输出等角度,对这两个语言进行对比,帮助掌握其中一门语言的小伙伴快速上手另一门语言。
本篇博客也是摊主的 CS50 课程学习笔记。
CS50 是哈佛大学的计算机导论公开课,也是摊主截止目前认为最棒的计算机导论课程。
授课的 David J. Malan 教授是摊主见过的对计算机教学最热情的老师,也是在计算机基础教学领域对摊主影响最大的一位老师。摊主也希望通过自己的努力,不断向 Malan 教授这样的大牛看齐。
有兴趣的小伙伴可以点击下面的链接,查看 CS50 课程的相关信息。
CS50 官方课程网站:https://cs50.harvard.edu/x/2023/
正文(下篇)
while循环
C语言
基本语法
while (条件) {
循环体
}
实例
int i = 0;
while (i < 10) {
printf("%d\n",i);
i++;
}
Python
基本语法
while 条件:
循环体
实例
i = 0
while i < 10:
print(i)
i+=1
不同点:
- C语言的条件表达式需要由括号
()
括起来,而 Python 的条件表达式无需添加()
(但是加了也没错) - C语言中,循环体需要使用 花括号
{}
括起来;而 Python 中,循环体是由 缩进 来表示的一段代码块,且需要在条件表达式后添加:
for循环
C语言
基本语法
for (初始化表达式; 条件表达式; 更新表达式) {
循环体
}
实例
for (int i = 1; i < 10; i++) {
printf("%d\n", i);
}
Python
在 Python 中,for 循环的变量是 迭代器(iterator),可以是任何可迭代的对象,例如列表、元组、字典、字符串等。
基本语法
for 变量 in 序列:
循环体
实例
for i in range(1,11):
print(i)
不同点:
- 在 C 语言中,for 循环使用一个 循环变量 来表示循环次数,可以使用
++
和--
运算符来递增或递减循环变量的值;而在 Python 中,for 循环使用一个 迭代器 来表示循环次数,循环变量是根据迭代器的值自动计算得到的。 - 在 C 语言中,循环范围是一个数值区间,通常使用循环变量的值来表示循环次数;而在 Python 中,循环范围是一个序列,可以是任何可迭代的对象,例如列表、元组、字典、字符串等。
do-while循环
C语言
和 while
循环不同, do-while
循环会 先执行一次循环体,然后再根据循环条件来决定是否继续执行循环。
基本语法
do {
循环体
} while (条件);
实例
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 10);
Python
Python 中 没有原生的 do-while 循环结构,但是可以通过 while
循环和 break
语句来实现类似于 do-while
循环的效果。
实例
i = 0
while True:
print(i)
i += 1
if i >= 10:
break
函数定义
C语言
基本语法
返回类型 函数名(参数列表) {
函数体
}
实例
// 计算1~n之和
int get_sum(int n) {
int res = 0;
for (int i = 1; i <= n; i++) {
res += i;
}
return res;
}
Python
基本语法
def 函数名(参数列表):
函数体
实例
# 计算1~n之和
def get_sum(n):
res = 0
for i in range(1, n):
res += i
return res
🍉 PS:C语言中,需要指定返回值类型(没有返回值,需要写 void
);而在 Python 中,就像无需指定变量类型一样,无需指定返回值类型。
输入
C语言
C语言使用scanf
语句进行输入,scanf
在读取不同类型的数据时,需要使用不同的格式读取。
int n;
float f;
double avg;
char c;
char str[20];
scanf("%d", &n); // 读入一个整数
scanf("%f", &f); // 读入一个单精度浮点数
scanf("%lf",&avg); // 读入一个双精度浮点数
scanf("%c", &c); // 读入一个字符
scanf("%s", str); // 读入一个字符串
Python
Python 使用 input()
语句进行输入,其返回值均为字符串。所以如果想要对输入值进行后续处理,需要进行数据类型的转换。
n = int(input("请输入一个整数:"))
f = float(input("请输入一个浮点数:"))
s = input("请输入一个字符串:")
🍉 PS:在转换用户输入的数据类型时,可能会出现一些异常情况,例如输入的数据格式不正确。为了避免这些异常情况导致程序崩溃,Python 使用 异常处理机制 对这些异常情况进行处理。
Python 使用 try-except
语句来捕获 ValueError 异常,如果发生这种异常,则输出提示信息。通过这种方式,可以保证程序在发生异常情况时不会崩溃,而是进行相应的处理。
try:
n = int(input("请输入一个整数:"))
except ValueError:
print("输入的数据不是整数,请重新输入!")
在 算法竞赛 中,C/C++ 和 Python 的输入也有不少差别。
由于算法竞赛中的输入类型较为繁多,摊主打算单独写一篇博客,列举算法竞赛中 C/C++ 和 Python 的输入对比,有兴趣的小伙伴们可以小小期待一下。
输出
C语言
C语言使用 printf
语句进行输出,且需要自行使用 \n
控制换行。
int n = 20;
float f = 3.14;
double avg = 3.1415926;
char c = 'a';
char str[] = "hello, world";
int *pn = &n;
printf("%d\n",n) // 输出一个整数
printf("%f\n",f) // 输出一个单精度浮点数
printf("%lf\n",avg) // 输出一个双精度浮点数
printf("%c\n",c) // 输出一个字符
printf("%s\n",str) // 输出一个字符串
printf("%p\n", pn); // 输出一个指针
Python
Python 使用 print
语句进行输出,且 print
语句默认在结尾补充一个 \n
进行换行。(可以通过设置 end
参数改变默认的 \n
值,见下文)
# 输出一个整数
n = int(input("请输入一个整数:"))
print("整数:", n)
# 输出一个浮点数
f = float(input("请输入一个浮点数:"))
print("浮点数:", f)
# 输出一个字符串
s = "Hello, world!"
print("字符串:", s)
🍉 补充1:在 Python 3 中,print
函数的用法发生了一些变化,可以通过设置 sep
和 end
参数来控制输出的格式:
sep
参数用于指定各个参数之间的分隔符,默认为一个空格;输入
n = 123 f = 3.14 s = "Hello, world!" print(n, f, s, sep=", ")
输出
123, 3.14, Hello, world!
end
参数用于指定输出结束时使用的字符,默认为一个换行符。输入
n = 123 f = 3.14 s = "Hello, world!" print(n, f, s, end="~")
输出
123 3.14 Hello, world!~
🍉 补充2:在 Python 3 中,print
函数还可以通过指定 格式化字符串 的方式来输出变量值。
通过在字符串前添加 f
代表 format 字符串,字符串内使用一对花括号 {变量名}
来输出变量的值。
实例1:字符串拼接
代码
name = "Ricky" hobby = "coding" print(f"Hello, {name}\nYour hobby is {hobby}")
输出结果
Hello, Ricky Your hobby is coding
实例2:字符串拼接其他类型变量
代码
name = "Ricky" age = 20 score = 99.99 print(f"Hello, {name}\nYour age is {age}\nYour score is {score}")
输出结果
Hello, Ricky Your age is 20 Your score is 99.99
实例3:指定浮点数精度为4位
代码
pi = 3.1415926 print(f"圆周率是:{pi:.4f}")
输出结果
圆周率是:3.1415
写在最后 ✍️
由于篇幅有限,博客中有不少语法细节没有展开,例如 Python print
输出的多种方式等,有兴趣的小伙伴可以自行探索。
而像 Python 中的一些可迭代对象(如列表、字典、集合、元组等)与 C++ 中各种 STL 容器的对比也没有在本篇博客中呈现,是因为这些数据类型的对比,每一个都值得写一整篇博客,所以没有匆忙的列入这篇博客中。
当然,摊主也会在后续的博客中不断完善相关内容,感兴趣的小伙伴们可以期待一波,我们下篇博客再见👋
参考资料 📚
Python官方教程:https://docs.python.org/3/tutorial/
CS50:https://cs50.harvard.edu/x/2023/
ChatGPT:https://openai.com/blog/chatgpt