由C语言转Python

由C语言转Python 引言在学习 Python 之前我主要接触的是 C 语言。从大学电子设计相关项目开始C 语言一直是我进行嵌入式开发的主要工具。无论是单片机外设驱动、传感器数据采集还是控制算法实现C 语言带给我的更多是对底层硬件和程序执行过程的理解。然而在接触数学建模后我发现 Python 在数据处理、科学计算以及算法验证方面具有非常高的效率。相比 C 语言需要更多底层实现Python 可以通过丰富的第三方库快速完成数据分析、矩阵运算、可视化以及模型建立。因此我开始尝试从 C 语言开发者的角度学习 Python。这篇文章并不是一篇传统的 Python 入门教程而是一份记录自己从 C 语言思维迁移到 Python 思维的学习笔记。文章主要关注C 与 Python 在语法和编程思想上的区别C 语言中的变量、数组、循环、函数如何对应到 PythonPython 中常用的数据结构和数据处理方式为后续数学建模学习打下基础。在学习过程中我会尽量使用 C 语言进行对比因为对于已经掌握 C 的学习者来说Python 并不是一门完全陌生的语言而是一种更加灵活、高效的数据处理工具。希望这份笔记不仅记录自己的学习过程也能够帮助有 C 语言基础、希望快速转向 Python 的同学。第一章基础1.强制类型转化Python作用int(x)转整数float(x)转浮点数str(x)转字符串2.注释#或者选定行快捷键ctrl/3.基本语法python默认会换行a 10b 20print(a , a, b , b)或者a 10b 20print(fa {a}, b {b})把变量的值直接放进字符串。Ca 是一个 int 类型的“盒子”┌─────────┐│ 10 │└─────────┘↑aPythona 是一个名字↓10后来a↓A可以改变类型4.input()a input()用户输入10但是此时a实际上是10也就是str5.运算符功能Python加减-乘*除/整除//取余%幂**加等于减等于-乘等于*除等于/自增 1自减- 16.比较运算符含义CPython大于小于大于等于小于等于等于不等于!!真为True假为Falsebool类型数据可以直接写10a207.逻辑运算符含义CPython与and或||or非!not例如第二章各种语句1.ifPython 使用冒号: 缩进表示代码块if a 10:print(大于10)Python 不要混用缩进C语言是if else改pythonif a 10:print(大于10)else:print(小于等于10)Celse ifPythonelif2.for在C语言中最典型for (int i 0; i 10; i){printf(%d\n, i);}初始化 → 判断 → 执行 → i → 判断 → ...0 1 2 3 4 5 6 7 8 9在Python写成for i in range(10):print(i)实际就是range010是不包括最后一位的也就是range(开始, 结束, 步长)倒着循环步长为3.while在C语言中int i 0;while (i 5){printf(%d\n, i);i;}相应的在Pythoni 0while i 5:print(i)i 1简单来说就是while 条件:代码不靠括号靠缩进来判断是否在循环内4.循环总结break和continue和C语言完全一样的用法对比C Pythonfor (...) for ... in range(...):while (...) while ...:i i 1break breakcontinue continue5.自定义函数5.1基本概念在C语言int add(int a, int b) 返回类型int{ 函数名addreturn a b; 参数类型int} 参数名a、b调用为int result add(10, 20);在Python中def add(a, b): def → 定义函数return a b add → 函数名a, b → 参数: → 开始函数代码块调用为result add(10, 20)5.2参数类型理解和基本类型是一样的自己知道是什么类型就可以是可变的这里和C语言需要区分第三章Python进阶一.列表list1.1基本迁移为Cint a[5] {10,20,30,40,50};Pythona [10,20,30,40,50]但是python的限制少了很多不用管数据类型甚至为a [10, 20, 3.14, hello]都是可以的1.2下标问题下标从0开始这是不变的但是多了a[-1] → 最后一个a[-2] → 倒数第二个a[-3] → 倒数第三个1.3数组可以动态增加1.31在末尾追加append例如a [10, 20, 30]a.append(40)a.append(50)即为a [10,20,30,40,50]append()就是在列表末尾添加一个元素。即为列表.append(元素)1.32在中间插入insert例如a [1,2,3,4,5]a.insert(0,100)print(a)格式为a.insert(位置, 数据)1.33删除指定值remove例如a [10,20,30,40]a.remove(30)print(a)注意它删除的是值不是下标。删除30这个值1.34删除指定位置pop例如a [10,20,30,40]a.pop(2)print(a)删除的都是下标a.pop()没有参数默认删除最后一个。1.4获取长度在C语言int a[5];sizeof(a) / sizeof(a[0])在pythona [10, 20, 30, 40, 50]print(len(a))打印整个数组1.5排序sort例如a [5,2,8,1,3]a.sort()print(a)输出为[1,2,3,5,8]降序a.sort(reverseTrue)2.切片问题2.1理解切片C里面int a[5]{10,20,30,40,50};如果想取第2个到第4个通常写循环。Python直接a[1:4]格式为a[start:end]⚠️不包含 enda[2:]指从第二个到最后一个a[:5]指从第一个到第五个a[:]常用来复制数组如b a[:]2.2步长step例如a [1,2,3,4,5,6]print(a[::2])运行结果为[1,3,5]格式为a[start:end:step]意味每隔step取一个。都是指下标二.字典dict1.基本含义相当于C语言的结构体格式为字典 {键:值,键:值}例如data {name:Alice,age:20,score:95}访问数据print(data[name]) 输出为Alice修改数据data[score] 100添加数据data[height] 170直接赋值删除数据del data[age]2.dict的遍历2.1遍历keystudent {name:Tom,age:20,math:95}for key in student:print(key)输出为nameagemath2.2获取valuestudent {name:Tom,age:20,math:95}for key in student:print(student[key])输出为Tom2095key → 键student[key] → 值2.3同时获取key和valuefor key,value in student.items():print(key,value)理解items()就是把字典拆成一对一对的数据。类似(name,Tom)(age,20)(math,95)三.listdict1.基本概念外层 list存很多个对象内层 dict描述每一个对象结构students(list)↓第0个元素(dict){name:Tomscore:90}第1个元素(dict){name:Jackscore:95}2.创建数据students [{name:Tom,score:90},{name:Jack,score:95},{name:Alice,score:100}]最外层用:[ ]说明为list里面用{ }说明元素为dict3.访问数据访问第一个学生print(students[0])输出为{name:Tom,score:90}访问第一个学生的名字students[0][name]4.遍历所有学生for student in students:print(student)这里第一次student {name:Tom,score:90}依次类推如果只想打印名字for student in students:print(student[name])输出TomJackAlice名字成绩for student in students:print(student[name],student[score])总结list[下标][字典键]第四章字符串string一.概念s Python其中s[ ]类似于数组的索引也可以用数组的切片二.字符串常用操作1.字符串拼接a hellob worldc a bprint(c)直接相加如果想加上空格则c a b2.len( )和 list 一样表示字符数量3.split()字符拆分字符串例如s 2026-08-23data s.split(-)print(data)结果[2026, 08, 23]理解原来[2026, 08, 23]按照-切开。变成[2026,08,23]字符串.split(字符)按字符切开带冒号4.replace()替换字符串例如s hello pythons s.replace(python,C)print(s)结果为hello C字符串.replace(a,b) 用替换a5.strip()去除两边空格例如s hello print(s.strip())结果hello字符串.strip()6.大小写转换s Python变大写print(s.upper())变小写print(s.lower())或者重点理解int(i),在分开之后每个还是字符串带“ ”需要强制类型转换第五章文件读写1.打开文件最简单为f open(test.txt,r)这里r表示读取例如假设有data.txt里面hello pyhton代码f open(data.txt,r) content f.read() print(content) f.close()输出hello python2.with open写法with open(data.txt,r) as f:content f.read()print(content)优点不用手动f.close()python会自动关掉3.写文件with open(result.txt,w) as f:f.write(hello)运行后生成result.txt内容为hello4.读取多行例如文件9095100读取with open(score.txt,r) as f:lines f.readlines()print(lines)得到[90\n,95\n,100\n]注意\n代表换行。5.结合字符串处理文件9095100读取with open(data.txt,r) as f:data f.read()data data.split(,)print(data)结果[90,95,100]这就是文件读取 → 字符串处理 → 数据处理第六章import模块1.简单理解别人已经写好的 Python 文件直接拿过来用例如数学计算import math引入数学模块。然后math.sqrt(16)计算平方根。2.import 的基本形式直接导入import math使用math.sqrt(25)为什么要math.因为要告诉 Python我要使用 math 模块里面的 sqrt 函数优点清楚知道函数来自哪里不容易名字冲突模块名.函数名3.给模块取别名例如import numpy as np意思是以后不用写numpy.array()写np.array()4.从模块里面导入某个函数例如from math import sqrt之后不用math.sqrt()直接sqrt(16)例如from math import sqrt print(sqrt(16))缺点如果很多模块都有同名函数可能冲突。例如from A import testfrom B import test后面的会覆盖前面的结语C语言让我理解计算机如何执行Python让我学会如何快速处理问题。两者不是替代关系而是不同层次的工具。