Python程序设计基础

一、编写Python基本程序

1.1Python的特点

(1)解释性语言:Python代码在运行时由Python解释器逐行解释执行,无需编译成机器码。

(2)面向对象:程序由数据和功能组合而成的对象构建起来的。

(3)简单:易于学习、易于维护、易于阅读。

(4)丰富的库:标准库庞大。

(5)跨平台:支持多种系统。

(6)开源免费:Python语言无需付费。

1.2Python基础语法

(1)创建Python类:所有Python文件都以.py为扩展名。

(2)行和缩进:使用缩进来写模块。

(3)Python引号:使用单引号(')双引号(")三引号('''或""")来表示字符串。

(4)Python注释:单行注释采用#开头,多行注释使用'''或"""

(5)Python标识符规则:

组成元素:标识符由字母(a-z,A-Z)、数字(0-9)、下划线(_)组成。且标识符不能以数字开头。

关键字限制:不能使用Python中的关键字作为标识符。

大小写敏感:Python中的大小写是十分敏感的。

下划线开头的标识符是有特殊意义的:

以单下划线开头代表不能直接访问的类属性;

以双划线开头的__foo代表类的私有成员;

以双划线开头和结尾的代表Python里特殊方法专用的标识;

1.3基本的编程语句

|-----------------|----------------------------|--------------------------|
| 你想实现的效果 | 解释 | 示例 |
| 变量等于数字包括小数和整数 | 变量=数字 | a=3 |
| 变量等于文字 | 变量='文字'或变量="文字" | a='文字'或a="文字" |
| 变量等于键盘输入的文字 | 变量=input("提示输入的文字") | a=input("请输入你名字") |
| 变量等于键盘输入的整数 | 变量=int(input("提示输入的文字")) | 变量=int(input("请输入整数")) |
| 变量等于键盘输入的小数 | 变量=float(input("提示输入的文字")) | 变量=float(input("请输入小数")) |
| 程序输出文字、变量或式子的结果 | print("文字") print(变量或式子) | print(a) |

1.4基本的数学运算

|-------|-------------|-------------------|
| 符号 | 解释 | 示例 |
| + | 加法 | c=a+b |
| - | 减法 | c=a-b |
| * | 乘法 | c=a*b |
| / | 除法 | c=a/b |
| // | 取整 | c=a//b |
| % | 取余 | c=a%b |
| ** | 幂运算符 | c=a**b |
| pow | 幂运算 | c=pow(a,b) |
| abs | 绝对值 | l=abs(-10) |
| round | 四舍五入 | c=round(3.1415,2) |
| max | 最大值 | c=max(a,b) |
| min | 最小值 | c=min(a,b) |
| int | 强制转换为int型 | c=int("2") |
| float | 强制转换为float型 | c=float("2") |

|---------------------------------------|--------------------------------------|
| 字符串操作 | 示例 |
| 截取字符串 | var1[0]取第一个字符 var2[1:5]取第2到第5个字符 |
| 字符串连接 | var1='你好' var2='有啥事' var3=var1+var2 |
| 成员运算符,如果字符串中包含给定的字符串,返回Ture,否则返回False | a="hello" "h"in a Ture |
| 计算字符串的长度 | a="hello" print(en(a)) 5 |

1.5输入输出操作

1.5.1输入语句input()

基本用法:用入从用户获取输入,用户输入完成后按回车键,input()函数会将输入内容作为字符串返回。

python 复制代码
user_input=input("请输入相关内容")
print("你输入的内容是:",user_input)

类型转换

python 复制代码
user_input=int(input("请输入一个整数"))
print("你输入的整数是:",user_input)

1.5.2输出语句print()

python 复制代码
name="Orchid"
age=18
print("姓名",name,"年龄",age)

格式化输出:

(1)%操作符

|------|---------------------------|
| 符号 | 解释 |
| %s | 格式化字符串 |
| %d | 格式化整数 |
| %f | 格式化浮点数(默认保留 6 位小数) |
| %.2f | 格式化浮点数并保留 2 位小数(可自定义小数位数) |

python 复制代码
name = "张三"
print("姓名:%s" % name)

age = 25
score = 98.7654
print("姓名:%s,年龄:%d,成绩:%.2f" % (name, age, score))

student_id = 12
print("学生编号:%04d" % student_id)

(2)str.format()方法

使用{}作为占位符,通过str.format()方法传入带格式化数据,灵活性比%操作符更强。

python 复制代码
# 基础用法:按位置匹配
name = "李四"
age = 23
print("姓名:{},年龄:{}".format(name, age))

# 进阶1:指定索引(可重复使用数据)
print("年龄:{1},姓名:{0},再次打印姓名:{0}".format(name, age))

# 进阶2:关键字匹配(推荐,可读性更高)
score = 92.345
print("姓名:{n},成绩:{s:.2f}".format(n=name, s=score))

# 进阶3:格式化字典数据(** 解包字典)
student_info = {"name": "王五", "age": 24, "score": 89.9}
print("姓名:{name},年龄:{age},成绩:{score:.1f}".format(** student_info))

(3)f-string

python 复制代码
# 基础用法:直接嵌入变量
name = "赵六"
age = 22
print(f"姓名:{name},年龄:{age}")

# 进阶1:嵌入表达式(直接运算,无需额外定义变量)
print(f"明年年龄:{age + 1},姓名长度:{len(name)}")

# 进阶2:数值格式化(保留小数、补零等,与format()兼容)
score = 78.5678
student_id = 9
print(f"成绩:{score:.2f},学生编号:{student_id:04d}")

# 进阶3:格式化日期(需导入datetime模块,体现灵活性)
import datetime
now = datetime.datetime.now()
print(f"当前时间:{now:%Y-%m-%d %H:%M:%S}")

1.6 原码,反码和补码

1.6.1原码,反码和补码详解

三者是计算机表示有符号整数的核心编码方式(计算机底层仅能识别二进制0和1,无法直接识别正负号),其中补码是现代计算机最终采用的存储和运算编码,原码和反码是补码的铺垫。

(1)原码

原码是最直观、最容易理解的编码方式,直接对应"符号位+绝对值二进制"

正数的原码:符号位为0,数值位为该绝对值的二进制表示;

负数的原码:符号位为1,数值位为该绝对值的二进制表示;

零的原码:两种表示形式。

正数示例

+0 → 0000 0000

+5 → 0000 0101

+127 → 0111 1111

负数示例

-0 → 1000 0000

-5 → 1000 0101

-127 → 1111 1111

优点:直观易懂,转换简单(与十进制的对应关系清晰);

缺点:无法直接进行减法运算,若直接用原码计算5+(-3),结果错误。

(2)反码

反码是为了解决原码减法运算的问题而引入的中间编码,分为正数反码和负数反码。

正数的反码:与原码完全相同(符号位为0,数值位不变);

负数的反码:符号位保持为1(不变),数值位按位取返(0变1,1变0);

零的反码:两种表示。

正数:反码 = 原码

+5 原码 → 0000 0101 → 反码 → 0000 0101

+127 原码 → 0111 1111 → 反码 → 0111 1111

负数:符号位不变,数值位取反

-5 原码 → 1000 0101 → 反码 → 1111 1010

-127 原码 → 1111 1111 → 反码 → 1000 0000

优点:可以实现减法运算

缺点:仍存在两个零的表示

(3)补码

补码是现代计算机唯一采用的有符号整数存储和运算编码,解决了原码和反码的所有缺陷,是三者中最重要的编码。

正数的补码:与原码和反码完全相同(符号位为0,数值位不变)

负数的补码:两种方式先求负数的原码->再求其反码->最后反码加一;

直接对负数的绝对值进行按位取反,再加一;

零的补码:只有唯一一种表示;

示例1:+5(正数,补码=原码=反码)

原码:0000 0101

反码:0000 0101

补码:0000 0101

示例2:-5(负数,原码→反码→加1)

步骤1:求原码 → 1000 0101(符号位1,数值位5的二进制)

步骤2:求反码 → 1111 1010(符号位不变,数值位取反)

步骤3:反码加1 → 1111 1011(这就是-5的补码)

示例3:-3(快捷方式:绝对值取反加1)

步骤1:绝对值3的二进制 → 0000 0011

步骤2:按位取反 → 1111 1100

步骤3:加1 → 1111 1101(-3的补码,与原码→反码→加1结果一致)

示例4:零的补码(唯一)

+0 和 -0 的补码均为 0000 0000

优点:

消除冗余0;减法转加法;运算无额外进位处理

运算示例

5+(-3)=2为例

5的补码:0000 0101

-3的补码:1111 1101

补码相加:0000 0101+1111 1101=1 0000 0010

结果:8位二进制仅保留8位,舍弃高位进位1,最终结果为0000 0010,对应十进制的2

1.6.2 8 位二进制补码的数值范围

正数范围:0000 0000 ~0111 1111->对应十进制0~127

负数范围:1000 0000~1111 1111->对应十进制-128~-1

整体范围:-128~127(共计256个值)

注:1000 0000是补码的特殊值,对应十进制-128,该值无对应原码和反码

二、条件语句

2.1条件语句的核心基础

2.1.1判断关键字与语法格式

Python条件语句的核心是根据条件表达式的布尔值(Ture/False)决定是否执行某段代码,核心关键字为if、elif、else,语法有严格要求

(1)条件表达式后必须加冒号:

(2)满足条件时要执行的代码(语句体)必须缩进(通常为一个制表符,Python通过缩进区分代码块归属)

(3)布尔值判断:非0字、非空字符串/列表等数据结构视为Ture,0、""、[]、None等视为False。

2.1.2基本比较与逻辑运算符

|-------|---------------|---------------------------|
| 类型 | 运算符 | 说明 |
| 比较运算符 | ==、!= | 等于、不等于 |
| 比较运算符 | >、<、>=、<= | 大于、小于、大于等于、小于等于 |
| 逻辑运算符 | and | 逻辑与(所有条件都为Ture,结果才为Ture) |
| 逻辑运算符 | or | 逻辑或(任意一个条件为Ture,结果就为Ture) |
| 逻辑运算符 | not | 逻辑非(反转条件的布尔值) |

2.2三种核心条件语句结构

2.2.1单分支结构:if语句

最基础的条件语句,仅当条件为Ture 时,执行对应的代码块,条件为False时直接跳过。

if 条件表达式:

满足条件时执行的代码块(缩进)

python 复制代码
# 示例1:基本数值判断
score = 85
if score >= 60:
    print("考试合格,顺利通过!")

# 示例2:字符串判断(结合逻辑运算符)
name = "张三"
if len(name) == 2 and name.startswith("张"):
    print("这是一个2字的张姓姓名!")

# 示例3:非空判断(非空列表视为True)
fruits = ["苹果", "香蕉", "橙子"]
if fruits:
    print(f"水果列表中有 {len(fruits)} 种水果")

2.2.2双分支结构:if-else语句

解决 "二选一" 的逻辑场景,条件为Ture时执行if代码块,为False时执行else代码块(二者必选其一)。

if 条件表达式:

满足条件时执行的代码块(缩进)

else: 不满足条件时

执行的代码块(缩进,与if代码块缩进一致)

python 复制代码
# 示例1:考试合格/不合格判断
score = 58
if score >= 60:
    print("考试合格,顺利通过!")
else:
    print("考试不合格,需要补考!")

# 示例2:判断奇偶性
num = 17
if num % 2 == 0:
    print(f"{num} 是偶数")
else:
    print(f"{num} 是奇数")

# 示例3:用户登录简单判断(固定密码)
input_pwd = "123456"
correct_pwd = "123456"
if input_pwd == correct_pwd:
    print("密码正确,登录成功!")
else:
    print("密码错误,登录失败!")

2.2.3多分支结构:if-elif-else语句

解决 "多选一" 的复杂逻辑场景,支持多个条件依次判断,elif可以有多个,else 可选(作为最终兜底)

if 条件表达式1:

满足条件1时执行的代码块

elif 条件表达式2:

不满足条件1,但满足条件2时执行的代码块

elif 条件表达式3:

不满足条件1、2,但满足条件3时执行的代码块

...(可添加更多elif)

else:

所有条件都不满足时执行的代码块(可选)

python 复制代码
# 示例1:成绩等级评定(典型多分支场景)
score = 92
if score >= 90:
    print("成绩等级:优秀")
elif score >= 80:
    print("成绩等级:良好")
elif score >= 70:
    print("成绩等级:中等")
elif score >= 60:
    print("成绩等级:及格")
else:
    print("成绩等级:不及格")

# 示例2:年龄阶段判断
age = 35
if age < 18:
    print("身份:未成年人")
elif 18 <= age < 60:
    print("身份:成年人(劳动年龄)")
else:
    print("身份:老年人")

三、循环结构

3.1两种循环结构

3.1.1for循环

for循环是 Python 中最常用的循环结构,主要用于遍历可迭代对象(依次取出对象中的每个元素),无需手动控制循环次数,简洁高效。

可迭代对象:Python中支持遍历的对象,常见有字符串、列表、元组、字典、range()等

for 变量名 in 可迭代对象:

每次循环要执行的代码块

(1)遍历字符串

python 复制代码
str1 = "Python"
for char in str1:
    print(char, end=" ")  # end=" " 表示输出后不换行,用空格分隔

(2)遍历列表/元组

python 复制代码
# 遍历列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
    print(f"我喜欢吃:{fruit}")

# 遍历元组
nums = (1, 3, 5, 7)
sum_num = 0
for num in nums:
    sum_num += num  # 累加元组中的所有元素
print(f"元组元素总和:{sum_num}")

(3)使用range()生成数字序列

python 复制代码
# 场景1:循环5次(打印0~4)
for i in range(5):
    print(f"循环第 {i+1} 次,当前i值:{i}")

# 场景2:指定起始和结束值(打印1~10)
for num in range(1, 11):
    if num % 2 == 0:
        print(f"{num} 是偶数")

# 场景3:指定步长(打印1~10的奇数,步长为2)
for odd in range(1, 11, 2):
    print(f"奇数:{odd}")

(4)遍历字典

python 复制代码
student_scores = {"张三": 90, "李四": 85, "王五": 95}

# 方式1:遍历字典的键(默认)
for name in student_scores:
    print(f"姓名:{name},成绩:{student_scores[name]}")

# 方式2:明确遍历键(keys()方法)
for name in student_scores.keys():
    print(f"姓名:{name}")

# 方式3:同时遍历键和值(items()方法,推荐)
for name, score in student_scores.items():
    print(f"姓名:{name},成绩:{score}")

3.1.2while循环

while循环只要表达式为Ture,就会重复执行代码块,直到条件表达式为Flase时终止循环,适合无法提前确定循环次数的场景。

注意:确保变量能够被更新,最终条件表达式变为False,否则会陷入死循环。

python 复制代码
# 初始化变量
sum_total = 0
i = 1

# while循环:只要i<=100,就继续循环
while i <= 100:
    sum_total += i
    i += 1  # 更新循环变量(i自增1),否则会无限循环

print(f"1~100的总和:{sum_total}")
python 复制代码
# 需求:让用户输入"python",直到输入正确才退出循环
correct_input = "python"
user_input = ""

while user_input != correct_input:
    user_input = input("请输入正确的字符串(提示:python):")
    if user_input != correct_input:
        print("输入错误,请重新尝试!")

print("输入正确,退出循环!")

3.2循环控制语句(break、continue)

在循环执行过程中,可通过break和continue手动干预循环流程,实现更灵活的逻辑控制。

3.2.1break语句:终止整个循环

break用于立即终止当前所有的循环(跳出整个循环),循环一旦被终止,后续的循环体代码和末遍历的元素都不再处理,直接退出循环。

python 复制代码
# 示例1:for循环中使用break(找到目标值后立即退出)
nums = [1, 3, 5, 7, 9, 10]
for num in nums:
    if num % 2 == 0:
        print(f"找到第一个偶数:{num}")
        break  # 终止整个for循环,后续元素不再遍历
    print(f"当前遍历:{num}")

# 示例2:while循环中使用break(输入"q"退出循环)
while True:  # 无限循环(条件永远为True)
    user_input = input("请输入内容(输入q退出):")
    if user_input.lower() == "q":  # lower() 转为小写,兼容大写Q
        print("退出循环!")
        break  # 终止无限循环
    print(f"你输入的内容是:{user_input}")

3.2.2continue语句:跳过当前次循环

continue用于跳过当前次循环的剩余代码,直接进入下一次循环(不会终止整个循环,仅跳过本次)。

python 复制代码
# 示例1:for循环中使用continue(跳过奇数,只打印偶数)
for num in range(1, 11):
    if num % 2 != 0:
        continue  # 跳过当前奇数,直接进入下一次循环
    print(f"偶数:{num}")

# 示例2:while循环中使用continue(跳过数字5)
i = 0
while i < 10:
    i += 1
    if i == 5:
        continue  # 跳过i=5,直接进入下一次循环
    print(f"当前i值:{i}")

3.2.3循环的else子句(扩展用法)

else子句的代码块,仅在循环正常结束时执行(即循环没有被break语句终止,遍历完所有元素 / 条件变为Flase),如果循环被breal语句终止,则else子句的代码块不会执行。

python 复制代码
# 示例1:for循环 + else(正常遍历结束,执行else)
nums = [1, 3, 5, 7, 9]
for num in nums:
    print(f"遍历元素:{num}")
else:
    print("循环正常结束(所有元素遍历完毕),执行else子句")

# 示例2:for循环 + break + else(被break终止,不执行else)
nums = [1, 3, 5, 7, 9, 10]
for num in nums:
    if num % 2 == 0:
        print(f"找到偶数:{num},终止循环")
        break
    print(f"遍历元素:{num}")
else:
    print("循环正常结束,执行else子句")  # 此句不会被执行

# 示例3:while循环 + else(正常结束,执行else)
i = 1
while i <= 5:
    print(f"循环第 {i} 次")
    i += 1
else:
    print("while循环正常结束,执行else子句")

3.2.4循环嵌套

在一个循环的循环体中,可以嵌套另一个完整的循环(for嵌套for、for嵌套while、while嵌套while),用于处理需要多层重复的逻辑(如打印九九乘法表、遍历二维列表)。

python 复制代码
# for循环嵌套(推荐,简洁清晰)
for i in range(1, 10):  # 外层循环:控制行数(1~9)
    for j in range(1, i+1):  # 内层循环:控制每行的列数(1~当前行数)
        print(f"{j} × {i} = {i*j}", end="\t")  # \t 制表符,对齐格式
    print()  # 换行,打印下一行
相关推荐
zh_xuan2 小时前
kotlin对集合数据的操作
开发语言·kotlin
企业对冲系统官2 小时前
大宗商品风险对冲系统统计分析功能的技术实现
运维·python·算法·区块链·github·pygame
ValhallaCoder2 小时前
Day48-单调栈
数据结构·python·算法·单调栈
a程序小傲2 小时前
京东Java面试被问:多活数据中心的流量调度和数据同步
java·开发语言·面试·职场和发展·golang·边缘计算
智算菩萨2 小时前
【Python小游戏】深度解析Pygame实现2048游戏的完整开发流程(有代码实现)
python·游戏程序·pygame
88号技师2 小时前
2026年1月一区SCI-最优或最劣优化器Farthest better or nearest worse optimizer-附Matlab免费代码
开发语言·数学建模·matlab·启发式算法·优化算法
feifeigo1232 小时前
基于嵌套阵列的DOA估计Matlab仿真例程
开发语言·matlab
三金121382 小时前
Java定时任务Schedule详解及Cron表达式实践
java·开发语言
嘉嘉嘉7172 小时前
【day 52】神经网络调参指南
python·深度学习·机器学习