当前位置: 首页 > news >正文

02 - Python入门 - 基础语法

Python 最突出的优势就是简洁高效。很多编程语言需要写大量繁琐的样板代码,而用 Python 往往几行就能实现同样功能。它无需编译,不用提前声明变量类型,甚至不必编写固定的main函数。 你可以直接打开文件编写代码,写完就能运行,上手极其轻便。

下面,我们就从最简单的程序开始入门。

01.Hello World 与程序结构

# 从第一行开始,从上往下逐行执行print("Hello, World!")print("第二行")print("第三行")

不需要import,不需要class,不需要main函数。Python 的执行方式很直觉:从文件的第一行开始,从上往下逐行执行,就这么简单。

还有一件事要提前说:Python 用缩进来表示代码块,而不是花括号{}。这意味着缩进并不是可选的美化,而是语法的一部分。后面讲到iffor的时候你就会看到,缩进错了程序会直接报错。

Python 的注释用#开头,#后面的内容会被忽略:

# 这是一行注释print("hello")# 这也是注释

02.输出

print() 基本用法

print()是 Python 中最常用的输出函数,把内容打印到控制台:

# 打印字符串print("Hello, World!")# 打印数字print(42)print(3.14)# 打印多个值,默认用空格分隔print("姓名:","Alice","年龄:",25)

print()可以接收多个参数,默认用空格隔开,打印完自动换行

sep 和 end 参数

如果你想改变分隔符或者取消自动换行,可以用sepend参数:

# sep:改变多个参数之间的分隔符# 输出:2025-03-18print(2025,"03",18,sep="-")# end:改变结尾字符(默认是换行 \n)# 下面两个 print 会打印在同一行print("Hello",end=" ")print("World")
f-string 格式化输出

在字符串前面加一个f,就可以在花括号{}里直接写变量名或表达式,Python 会自动把它们替换成对应的值。这叫 f-string,是 Python 中最常用的字符串格式化方式:

name="Alice"age=25# 在字符串中嵌入变量print(f"我叫{name},今年{age}岁")# 花括号里可以写表达式print(f"明年{age+1}岁")# 控制小数位数::.2f 表示保留 2 位小数pi=3.14159print(f"pi ={pi:.2f}")# 控制宽度和对齐foriinrange(1,4):# :>5 表示右对齐,占 5 个字符宽度print(f"第{i}行:{i*i:>5}")

f"{pi:.2f}"这种写法在算法题中经常用到,比如题目要求"保留两位小数输出"。冒号后面的.2f就是格式说明符,.2表示两位小数,f表示浮点数格式。

03.输入

input() 读取一行

input()从控制台读取一行输入,返回的永远是字符串。即使用户输入的是数字,拿到的也是字符串"123"而不是数字123,要读取数字就需要手动转换类型

# input() 读到的是字符串,用 int() 转成整数age=int(input())print(f"你今年{age}岁,明年{age+1}岁")print(type(age))# 如果不转换,+ 会变成字符串拼接而不是加法# age = input()# print(age + 1) # 报错!字符串和整数不能相加
一行读取多个值

很多算法题的输入是一行多个数字,用空格隔开。这时候用split()切分,再用map()批量转换类型:

# input() 读一行字符串 "3 5"# split() 按空格切分成列表 ["3", "5"]# map(int, ...) 把每个元素转成整数a,b=map(int,input().split())print(f"{a}+{b}={a+b}")

这个map(int, input().split())是 Python 算法题中的标准输入套路,建议记住。拆解一下:

  1. input()读取一行,比如"3 5"
  2. .split()按空格切分成列表["3", "5"]
  3. map(int, ...)对列表中每个元素调用int()转换
  4. a, b = ...把结果拆包赋值给两个变量

如果一行有很多数字需要存到列表里,可以这样:

nums=list(map(int,input().split()))print(nums)print(f"共{len(nums)}个数,总和 ={sum(nums)}")

04.变量与数据类型

Python 是动态类型语言,变量不需要声明类型,赋什么值就是什么类型,而且同一个变量可以随时改变类型:

x=42print(x,type(x))x=3.14print(x,type(x))x="hello"print(x,type(x))x=Trueprint(x,type(x))x=Noneprint(x,type(x))

type()函数可以查看任何值的类型。

Python 的int有一个很大的优势:没有大小限制,不管数字多大都能精确表示,不会溢出。这在处理大数运算的算法题时非常方便,比如2 ** 1000也能精确计算。

None表示"什么都没有",判断一个变量是否为None推荐用is而不是==

result=NoneifresultisNone:print("还没有结果")

05.类型转换

Python 的类型转换都是用对应的类型名当函数来调用:

# int():转成整数print(int(3.99))# 3(直接截断,不是四舍五入)print(int("42"))# 42print(int(True))# 1print(int(False))# 0# float():转成浮点数print(float(42))# 42.0print(float("3.14"))# 3.14# str():转成字符串print(str(42))# "42"print(str(3.14))# "3.14"# bool():转成布尔值# 0、0.0、空字符串、None 是 False,其他都是 Trueprint(bool(0))# Falseprint(bool(""))# Falseprint(bool(42))# Trueprint(bool("hi"))# True

int()转换浮点数时是直接截断小数部分,不是四舍五入。想要四舍五入可以用round()函数。

06.运算符

a,b=17,5print(f"{a}+{b}={a+b}")# 22print(f"{a}-{b}={a-b}")# 12print(f"{a}*{b}={a*b}")# 85# / 真除法,结果是浮点数print(f"{a}/{b}={a/b}")# 3.4# // 整除(向下取整)print(f"{a}//{b}={a//b}")# 3# % 取余print(f"{a}%{b}={a%b}")# 2# ** 幂运算print(f"2 ** 10 ={2**10}")# 1024print(f"9 ** 0.5 ={9**0.5}")# 3.0(开平方)

这里有两个重点:

  1. /是真除法,17 / 5的结果是3.4,不是3。想要整除要用//
  2. **是幂运算,2 ** 10就是 2 的 10 次方。9 ** 0.5就是 9 的 0.5 次方,也就是开平方。
比较与逻辑运算符
a,b=10,20# 比较运算符print(a==b)# False(等于)print(a!=b)# True(不等于)print(a<b)# Trueprint(a>=b)# False# Python 支持链式比较,像数学表达式一样x=15print(1<x<20)# True(等价于 1 < x and x < 20)print(10<=x<=20)# True# 逻辑运算符用英文单词 and、or、not# and:两个都为真才是真print(a>5andb>15)# True# or:有一个为真就是真print(a>100orb>15)# True# not:取反print(not(a>100))# True

Python 的链式比较1 < x < 20很方便,写起来像数学一样自然。逻辑运算符用的是andornot这三个英文单词,而不是符号。

位运算

位运算在处理二进制相关问题时非常高效。

a=10# 二进制 1010b=12# 二进制 1100# & 按位与:两个都是 1 才是 1# 1010 & 1100 = 1000(十进制 8)print(f"{a}&{b}={a&b}")# | 按位或:有一个是 1 就是 1# 1010 | 1100 = 1110(十进制 14)print(f"{a}|{b}={a|b}")# ^ 按位异或:不同为 1,相同为 0# 1010 ^ 1100 = 0110(十进制 6)print(f"{a}^{b}={a^b}")# ~ 按位取反print(f"~{a}={~a}")# -11# << 左移(相当于乘以 2)print(f"{a}<< 1 ={a<<1}")# 20# >> 右移(相当于除以 2)print(f"{a}>> 1 ={a>>1}")# 5# 一个经典用法:判断奇偶n=7ifn&1==1:print(f"{n}是奇数")else:print(f"{n}是偶数")

07.控制流

if / elif / else

Python 用缩进来表示代码块,没有花括号。条件后面跟一个冒号:,下一行缩进(通常 4 个空格)就是条件成立时要执行的代码:

score=85ifscore>=90:print("优秀")elifscore>=60:print("及格")else:print("不及格")

几个关键点:

  • 条件后面一定要有冒号:
  • 代码块用缩进表示,同一个代码块的缩进必须一致
  • elif是 “else if” 的缩写
  • 条件不需要括号(加了也不报错,但 Python 风格不加)
for 循环

Python 的for循环用来遍历一个序列(列表、字符串、range 等),语法是for 变量 in 序列:

# range(n) 生成 0 到 n-1 的整数序列# 输出:0 1 2 3 4foriinrange(5):print(i,end=" ")print()# range(start, end) 生成 start 到 end-1# 输出:2 3 4 5 6foriinrange(2,7):print(i,end=" ")print()# range(start, end, step) 带步长# 输出:0 2 4 6 8foriinrange(0,10,2):print(i,end=" ")print()# 倒序遍历# 输出:5 4 3 2 1foriinrange(5,0,-1):print(i,end=" ")print()

range(n)生成的序列是左闭右开的,从0n-1。这和数组下标的范围完全一致,用起来非常自然。

遍历列表和 enumerate

for也可以直接遍历列表、字符串等。如果遍历的同时还需要知道下标,用enumerate()

# 直接遍历列表fruits=["苹果","香蕉","橘子"]forfruitinfruits:print(fruit)print("---")# enumerate 同时返回下标和元素fori,fruitinenumerate(fruits):print(f"第{i}个:{fruit}")print("---")# 遍历字符串(逐个字符)forchin"Hello":print(ch,end=" ")print()

enumerate()返回的是 (下标, 元素) 的配对,用起来比手动维护一个计数器变量方便多了。

while 循环

while循环在条件为真时重复执行:

# 计算 1 + 2 + ... + 100total=0i=1whilei<=100:total+=i i+=1print(f"1 到 100 的和 ={total}")

注意 Python 没有do-while循环,也没有i++的写法,自增只能写i += 1

break 和 continue

break立刻跳出整个循环,continue跳过当前这一轮、进入下一轮:

# break:找到第一个能被 7 整除的数就停止foriinrange(1,101):ifi%7==0:print(f"第一个能被 7 整除的数:{i}")break# continue:跳过偶数,只打印奇数# 输出:1 3 5 7 9foriinrange(1,11):ifi%2==0:continueprint(i,end=" ")print()
http://www.jsqmd.com/news/609557/

相关文章:

  • Aras Innovator二次开发入门:从AML语法到IOM调用的实战指南
  • 从零到精通:我的泛微Ecology9二次开发实战笔记(含JS开发避坑指南)
  • Unity Input System实战:从零构建单指旋转与双指缩放的手势交互系统
  • 频谱仪矢量网络分析仪射频模拟信号发生器 | 5G终端MIMO波束赋形测试
  • 8 年面试实战派导师陈晨:用精准教学,帮你叩开公职上岸之门
  • 机器人运动学控制,simulink仿真模型,基于滑膜边结构控制,学习滑膜控制的不二法门
  • 从零到一搞定12nm芯片后端:我用Innovus+UPF做车规级安全岛设计的避坑实录
  • 抽卡【牛客tracker 每日一题】
  • 从源码到实践:iproute2编译安装全攻略
  • P3705 [SDOI2017] 新生舞会 - Link
  • 剪流AI智能手机对自媒体创作者的具体帮助:实现降本增效的全面解析
  • YOLOv11 改进 - 主干网络 SwinTransformer 移位窗口层次化视觉变换器:层次化特征提取增强多尺度目标感知,优化复杂场景检测
  • 2025届必备的六大降AI率神器推荐
  • Qt源码中的EQ曲线升级版:精细编码与详尽注释
  • Ostrakon-VL-8B模型API接口详解:参数配置与性能调优
  • CKKS 同态加密数学基础推导质
  • YOLOv11 改进 - 主干网络 FasterNet (基于PConv部分卷积的神经网络):轻量级设计优化内存访问效率,实现精度与速度双重提升
  • 部署一次D365程序,最快也得2小时,怎么快速更新数据?以前AX写个Job就好了
  • 基于光伏MMC并网系统的两级式交流故障穿越策略研究
  • 基于IPC标准的离子污染度检测:原理、方法与判据
  • Qwen2.5-VL-7B-Instruct多模态推理避坑指南:解决Batch推理中的addCriterion字符和输出截断问题
  • 自动驾驶模仿学习避坑指南:为什么你的多模态融合模型总在十字路口“翻车”?
  • 从Linux到单片机:嵌入式分层设计的底层逻辑与简化实践
  • P4559 [JSOI2018] 列队 - Link
  • 智能仓储搬运机器人市场预测:14.3亿美元规模的技术迭代
  • 告别虚拟机!在Windows 11上零配置搭建Masm汇编实验环境(附保姆级图文教程)
  • MATLAB-Simulink主动均衡电路模型(动力锂电池模组16节电芯): 模糊控制及多种比...
  • C# 13主构造函数调试实战:3分钟定位null引用异常根源,附可复用的DiagnosticSource注入模板
  • 微信聊天记录安全备份完整指南:使用WeChatExporter开源工具保护数字记忆
  • Python+PyQt5打造局域网电脑唤醒工具:从UI设计到一键唤醒全流程