加载中...

Python VS C(下篇)


写在最前 ✍️

在上一篇博客 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 函数的用法发生了一些变化,可以通过设置 sepend 参数来控制输出的格式:

  • 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


文章作者: Rickyの水果摊
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Rickyの水果摊 !
  目录