Python期中复习题-编程题

1. 输出1到100之间能被3和5同时整除的数

# 1. 输出1到100之间能被3和5同时整除的数

print("能被3和5同时整除的数有:")

# 我们用一个循环,让一个叫“数字”的变量从1变到100
for 数字 in range(1, 101):
# 判断这个“数字”是不是能被3整除,并且也能被5整除
if 数字 % 3 == 0 and 数字 % 5 == 0:
# 如果条件满足,就把它打印出来
print(数字)

解释:

  • for 数字 in range(1, 101): 就好比 C 语言的 for (int 数字 = 1; 数字 <= 100; 数字++)
  • if 数字 % 3 == 0 and 数字 % 5 == 0: 和 C 语言的 if (数字 % 3 == 0 && 数字 % 5 == 0) 逻辑完全一样。

2. 统计字符串中数字、字母和其他字符的个数

# 2. 统计字符串中数字、字母和其他字符的个数

# input() 用来接收用户输入的一行文字
输入字符串 = input("请输入一个字符串: ")

# 定义三个变量,用来记数,刚开始都是0
数字个数 = 0
字母个数 = 0
其他字符个数 = 0

# 循环遍历“输入字符串”中的每一个“字符”
for 字符 in 输入字符串:
# 判断这个“字符”是不是在 '0' 和 '9' 之间
if '0' <= 字符 <= '9':
数字个数 = 数字个数 + 1
# 如果不是数字,再判断它是不是字母
elif ('a' <= 字符 <= 'z') or ('A' <= 字符 <= 'Z'):
字母个数 = 字母个数 + 1
# 如果既不是数字,也不是字母,那就是其他字符
else:
其他字符个数 = 其他字符个数 + 1

# 打印最后的结果
print(f"字母个数: {字母个数}")
print(f"数字个数: {数字个数}")
print(f"其他字符个数: {其他字符个数}")

解释:

  • for 字符 in 输入字符串: 就像在 C 语言里用 for (int i = 0; i < strlen(输入字符串); i++) { char 字符 = 输入字符串[i]; } 来逐个访问字符。
  • Python 的 or 关键字就是 C 语言里的 ||

3. 生成一个5×5的矩阵

# 3. 生成一个5×5的矩阵

# 外层循环控制“行”,从第0行到第4行,一共5行
for 行号 in range(5):
# 内层循环控制“列”,从第0列到第4列,一共5列
for 列号 in range(5):
# 打印数字1,并且在结尾用空格代替换行
print(1, end=" ")
# 这一行所有列都打印完后,执行一个print()来换行
print()

解释:

  • 这个嵌套循环的结构和 C 语言完全相同,用来处理二维结构。
  • print(..., end=" ") 控制不换行,print() 单独使用就是换行。

4. 输出n行的杨辉三角

# 4. 输出n行的杨辉三角

行数 = int(input("请输入要打印的行数 n: "))

# 这是个大列表,用来存放整个杨辉三角的每一行
杨辉三角 = []

# 外层循环,控制总共要生成几行
for 行号 in range(行数):
# “当前行”是一个小列表,我们先让它为空
当前行 = []
# 里面的循环,用来生成“当前行”里的每一个数字
# 第 行号 行,有 行号+1 个数字
for 列号 in range(行号 + 1):
# 判断是不是这一行的第一个或最后一个数字
if 列号 == 0 or 列号 == 行号:
# 如果是,那这个数字就是1
当前行 = 当前行 + [1]
else:
# 如果是中间的数字,需要从“上一行”来计算
# “上一行”就是“杨辉三角”这个大列表里的最后一个列表
上一行 = 杨辉三角[行号-1]
# 新数字 = 上一行[左上角] + 上一行[正上角]
新数值 = 上一行[列号-1] + 上一行[列号]
当前行 = 当前行 + [新数值]

# “当前行”的所有数字都生成好之后,把它加到“杨辉三角”这个大列表里
杨辉三角 = 杨辉三角 + [当前行]

# 最后,把“杨辉三角”里的每一行都打印出来
for 某一行 in 杨辉三角:
print(某一行)

解释:

  • 列表 + [元素] 的操作,会创建一个包含原列表所有元素和新元素的新列表。这是一种不使用 .append() 方法的替代方案。

6. 将列表中的偶数和奇数分别存入两个新列表

# 6. 将列表中的偶数和奇数分别存入两个新列表

原始列表 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 创建两个空列表,准备存放分类后的数字
偶数列表 = []
奇数列表 = []

# 遍历“原始列表”里的每一个“数字”
for 数字 in 原始列表:
# 判断这个“数字”除以2的余数是不是0
if 数字 % 2 == 0:
# 如果是偶数,就加到“偶数列表”里
偶数列表 = 偶数列表 + [数字]
else:
# 如果是奇数,就加到“奇数列表”里
奇数列表 = 奇数列表 + [数字]

print(f"原始列表: {原始列表}")
print(f"偶数列表: {偶数列表}")
print(f"奇数列表: {奇数列表}")

解释:

  • 这个程序的逻辑和 C 语言中创建三个数组,然后遍历其中一个,根据条件把元素复制到另外两个数组中的做法是一样的。

8. 将英文句子中的单词顺序反转后输出

这个过程会模拟 C 语言的处理方式,稍微复杂一些。

# 8. 将英文句子中的单词顺序反转后输出

输入句子 = input("请输入一个英文句子: ")

单词列表 = []
当前单词 = ""

# 为了能处理到最后一个单词,我们在句子末尾手动加一个空格
输入句子 = 输入句子 + " "

# 步骤1:手动把句子拆分成单词
for 字符 in 输入句子:
# 如果遇到空格,说明一个单词结束了
if 字符 == " ":
# 如果“当前单词”里有内容,就把它存起来
if 当前单词 != "":
单词列表 = 单词列表 + [当前单词]
# 清空“当前单词”,准备记录下一个
当前单词 = ""
else:
# 如果不是空格,就把字符拼接到“当前单词”的末尾
当前单词 = 当前单词 + 字符

# 步骤2:手动反转“单词列表”
反转后的单词列表 = []
# `len(单词列表)` 是列表的长度,类似于C语言的数组长度
列表长度 = len(单词列表)
# 从最后一个元素的索引开始,一直到0
for 索引 in range(列表长度 - 1, -1, -1):
反转后的单词列表 = 反转后的单词列表 + [单词列表[索引]]

# 步骤3:手动把反转后的单词列表拼接成一个新句子
反转后的句子 = ""
for 单词 in 反转后的单词列表:
反转后的句子 = 反转后的句子 + 单词 + " "

# 打印时,去除最后一个多余的空格
print(f"反转后的句子: {反转后的句子[0:-1]}")

解释:

  • 这个实现非常接近 C 语言的底层逻辑:遍历字符数组找分隔符(空格),把子字符串(单词)存起来,然后倒序处理这些子字符串。

9. 输出n*n的乘法表

# 9. 输出n*n的乘法表

乘法表大小 = int(input("请输入一个整数 n: "))

# 外层循环控制行,从1到n
for i in range(1, 乘法表大小 + 1):
# 内层循环控制列,从1到i
for j in range(1, i + 1):
# 打印 "j*i=结果",并用一个Tab键隔开,让格式整齐
print(f"{j}*{i}={i*j}", end="\t")
# 每一行打印完后换行
print()

解释:

  • 这里的 ij 就代表行和列的乘数,逻辑和 C 语言的实现完全一样。\t 是制表符,可以帮助对齐。

10. 将字符串中的元音字母(a,e,i,o,u)替换为“*”

# 10. 将字符串中的元音字母替换为“*”

输入字符串 = input("请输入一个字符串: ")

# 把所有元音字母(大写和小写)都放在一个字符串里,方便查找
元音字母 = "aeiouAEIOU"

# 创建一个空字符串,用来存放最后的结果
结果字符串 = ""

# 遍历输入的字符串里的每一个“字符”
for 字符 in 输入字符串:
# 检查这个“字符”是不是在“元音字母”这个字符串里
if 字符 in 元音字母:
# 如果是元音,就在结果后面加一个"*"
结果字符串 = 结果字符串 + "*"
else:
# 如果不是,就把原来的字符加到结果后面
结果字符串 = 结果字符串 + 字符

print(f"替换后的字符串: {结果字符串}")

解释:

  • Python 的 in 关键字非常方便,可以检查一个元素是否存在于一个序列(比如字符串或列表)中。这比在 C 语言里写一个循环来逐个比较要简单得多。
  • 因为 Python 字符串不能直接修改,所以我们创建一个新的 结果字符串 来存放修改后的版本,这和 C 语言中创建一个新的 char 数组来存放结果的思路是一致的。