3394 字
17 分钟
Linux 基础 & Python 控制流

Linux 基础使用 & Python 控制流#

Linux 基础使用#

注意: 机房开启了保存电脑记录,所以请记住你的座位。

本节课开始我们初步开始使用Linux。Linux在全世界有广泛的使用,例如我们的安卓手机都基于Linux内核(Android/Linux),以及80%的线上服务都在Linux服务器上运行(GNU/Linux)。

本次我们使用NOI Linux 2.0(基于Ubuntu)进行学习活动。

  1. 如何打开编辑器。 点击左下角九个点的菜单标识可以打开应用菜单。选择VS Code,在插件栏下载中文及Python插件,重启VS Code即可开始编辑。

Linux 是当今计算领域中至关重要的操作系统。它不仅广泛应用于服务器领域(约80%的线上服务运行在基于GNU/Linux的服务器上),也是移动设备(Android基于Linux内核)、嵌入式系统、超级计算机等领域的核心技术基础。

本次课程我们将使用 NOI Linux 2.0(基于 Ubuntu 20.04 LTS)作为学习环境。这是一个专门为编程竞赛和学习设计的Linux发行版,预装了丰富的开发工具。


1. 开发环境配置指南#

1.1 编辑器安装与配置#

点击屏幕左下角的应用程序菜单图标(九宫格图标)即可打开应用程序菜单。

联网后,在终端(使用Alt+Ctrl+T打开)中输入

Terminal window
sudo apt update && sudo apt install vlc firefox -y

如果有时间可以使用

Terminal window
sudo apt upgrade -y

进行全局更新。 在搜索框中输入 “VS Code” 或浏览找到 Visual Studio Code: 首次启动 VS Code 后,需要进行以下基础配置:

- **语言包安装**:点击左侧活动栏的扩展图标(四个方块形状),搜索 "Chinese",安装 Microsoft 提供的中文语言包
- **Python 支持**:同样在扩展商店中搜索 "Python",安装 Microsoft 官方的 Python 扩展
- **重启生效**:安装完成后需要重启 VS Code 使配置生效

接下来重启浏览器,就可以enjoy BiliBili写代码了。

常用命令详解:

Terminal window
# 1. 更新软件包索引
sudo apt update
# - sudo: 以管理员权限执行命令
# - apt: Ubuntu/Debian系统的包管理工具
# - update: 从软件源服务器获取最新的软件包列表信息
# 2. 安装常用软件
sudo apt install vlc firefox -y
# - install: 安装指定软件包
# - vlc: 强大的多媒体播放器
# - firefox: 网页浏览器
# - -y: 自动确认安装,无需手动输入"y"
# 3. 升级已安装的软件(可选,时间充足时执行)
sudo apt upgrade -y
# - upgrade: 将所有已安装的软件升级到最新版本
# - 注意:此过程可能需要较长时间和网络带宽

1.3 基础命令扩展学习#

除了上述命令,以下基础命令也值得掌握:

Terminal window
# 查看当前目录
pwd
# 列出目录内容
ls
ls -la # 显示详细信息,包括隐藏文件
# 切换目录
cd Documents # 进入Documents目录
cd .. # 返回上一级目录
cd ~ # 返回用户主目录
# 创建目录和文件
mkdir python_projects # 创建新目录
touch hello.py # 创建空文件
# 查看文件内容
cat hello.py # 显示整个文件内容
less hello.py # 分页查看(按q退出)

Python 控制流#

我们之前写的程序,都是按顺序执行的。有些时候,我们需要重复执行一些相似的操作,或者在不同情况下执行不同的工作,这个时候就需要用到循环/分支结构控制程序流程了。

请以 写出一个输出1n中的所有质数的程序。其中n由输入给出。 为目标学习下方文档并上网查找资料。

分支结构#

例如我在天晴的时候会去骑自行车,下雨的时候我在家里看罗小黑,那么该写一个什么程序来猜测我的行程呢?

我们可以使用if语句

status = input("今天是晴天吗?请输入Yes或No: ")
if status == "Yes":
print("今天副社长石头要去骑车")
elif status == "No":
print("今天副社长石头回去看罗小黑哦!喵~")
else:
print("你输入的不是Yes或No吧?检查一下哦")

其中else意为否则,elifelse if的缩写。 在第一个if语句为否的情况下,就会执行下面的否则语句。elseelif的区别在于,elif还需要满足另一个条件。由此可知,else需放在最后,因为任何不满足第一条if语句的情况都满足else

循环结构#

有的时候我们需要重复进行某些事情,例如一年三百六十五天,我就要吃1095次饭。要是每一次都重新写一遍代码,那么将会无比麻烦。

于是就有了循环结构。循环结构有whilefor两种。


while 循环#

while 循环会在条件为真时重复执行一段代码。

count = 0
while count < 5:
print("这是第", count+1, "次循环")
count += 1

for 循环#

for 循环常用于遍历序列(如列表、元组、字符串)或范围。

for i in range(5):
print("这是第", i+1, "次循环")

Python 学习任务:输出 1 到 n 中的所有质数#

任务分析#

质数(素数)是指大于1且只能被1和自身整除的自然数。我们需要:

  1. 获取用户输入的整数 n
  2. 从 2 到 n 依次判断每个数是否为质数
  3. 输出所有质数

实现步骤#

  1. 使用 input 获取用户输入的 n,并转换为整数
  2. 使用外层循环遍历从 2 到 n 的每个数
  3. 对内层循环判断当前数是否为质数:
    • 质数判断:从 2 到该数的平方根,判断是否能整除
  4. 如果是质数,则输出

示例代码#

n = int(input("请输入一个整数 n:"))
print(f"1 到 {n} 中的所有质数为:")
for num in range(2, n + 1):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(num, end=" ")

代码解释#

  • int(input(...)):获取用户输入并转换为整数
  • range(2, n + 1):生成从 2 到 n 的整数序列
  • num ** 0.5:计算 num 的平方根,用于优化质数判断
  • break:一旦发现能被整除,立即跳出内层循环
  • end=" ":使输出在同一行以空格分隔

优化建议#

  1. 可以只判断奇数(除了2以外)
  2. 使用埃拉托斯特尼筛法(Sieve of Eratosthenes)能更高效地找出质数

扩展练习#

  1. 尝试使用 while 循环实现质数判断
  2. 尝试使用函数封装质数判断逻辑
  3. 尝试输出 n 以内的所有合数(非质数)

AI 生成的详解#

Python 控制流详解#

一、分支结构深入#

1.1 条件表达式#

Python 使用布尔值(True/False)作为判断条件:

# 比较运算符
a = 10
b = 5
print(a > b) # True
print(a == b) # False
print(a != b) # True

1.2 if 语句的完整结构#

# 完整的 if-elif-else 结构
score = int(input("请输入你的分数:"))
if score >= 90:
grade = "A"
print("优秀!")
elif score >= 80:
grade = "B"
print("良好!")
elif score >= 70:
grade = "C"
print("中等!")
elif score >= 60:
grade = "D"
print("及格!")
else:
grade = "F"
print("不及格,需要努力!")
print(f"你的等级是:{grade}")

1.3 嵌套 if 语句#

age = int(input("请输入你的年龄:"))
has_license = input("你有驾照吗?(yes/no): ").lower()
if age >= 18:
if has_license == "yes":
print("你可以开车上路!")
else:
print("你需要先考取驾照!")
else:
print("你还未成年,不能开车!")

1.4 逻辑运算符#

# and(与)、or(或)、not(非)
age = 20
is_student = True
has_ticket = False
if age >= 18 and is_student:
print("可以享受学生优惠!")
if has_ticket or age < 12:
print("可以进入!")
if not has_ticket:
print("需要购票!")

二、循环结构深入#

2.1 while 循环详解#

# 基本 while 循环
count = 1
while count <= 5:
print(f"这是第 {count} 次循环")
count += 1 # 重要:不要忘记改变条件变量!
# 无限循环与 break
total = 0
while True: # 无限循环
num = input("请输入数字(输入'q'退出):")
if num == 'q':
break # 跳出循环
total += int(num)
print(f"总和为:{total}")
# continue 的使用
num = 0
while num < 10:
num += 1
if num % 2 == 0:
continue # 跳过偶数
print(num)

2.2 for 循环详解#

# 遍历列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 遍历字符串
message = "Hello Python"
for char in message:
print(char)
# range() 函数详解
print("range(5):", list(range(5))) # [0, 1, 2, 3, 4]
print("range(2, 7):", list(range(2, 7))) # [2, 3, 4, 5, 6]
print("range(1, 10, 2):", list(range(1, 10, 2))) # [1, 3, 5, 7, 9]
# 反向遍历
for i in range(10, 0, -1):
print(i, end=" ") # 10 9 8 7 6 5 4 3 2 1

2.3 循环的 else 子句#

# for-else:当循环正常完成(未被break中断)时执行else
for i in range(5):
if i == 10: # 这个条件永远不会满足
break
print(i)
else:
print("循环正常完成!")
# while-else 类似
count = 0
while count < 5:
print(count)
count += 1
else:
print("while循环正常结束")

2.4 嵌套循环#

# 打印乘法表
print("九九乘法表:")
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j:2d}", end=" ")
print() # 换行

三、质数判断程序的优化与扩展#

3.1 优化版本 - 使用函数封装#

def is_prime(num):
"""判断一个数是否为质数"""
if num <= 1:
return False
if num == 2:
return True
if num % 2 == 0:
return False
# 只检查奇数因子
for i in range(3, int(num ** 0.5) + 1, 2):
if num % i == 0:
return False
return True
def find_primes(n):
"""找出1到n中的所有质数"""
primes = []
if n >= 2:
primes.append(2)
# 只检查奇数
for num in range(3, n + 1, 2):
if is_prime(num):
primes.append(num)
return primes
# 主程序
n = int(input("请输入一个整数 n:"))
primes = find_primes(n)
print(f"1 到 {n} 中的所有质数:{primes}")
print(f"共有 {len(primes)} 个质数")

3.2 高级版本 - 埃拉托斯特尼筛法#

def sieve_of_eratosthenes(n):
"""使用筛法找出所有质数"""
if n < 2:
return []
# 创建标记数组,初始假设所有数都是质数
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
# 将i的倍数标记为非质数
for j in range(i * i, n + 1, i):
is_prime[j] = False
# 收集所有质数
primes = [i for i in range(2, n + 1) if is_prime[i]]
return primes
# 测试筛法
n = int(input("请输入一个整数 n:"))
primes = sieve_of_eratosthenes(n)
print(f"1 到 {n} 中的所有质数:")
for i, prime in enumerate(primes, 1):
print(f"{prime:4d}", end=" ")
if i % 10 == 0: # 每行显示10个
print()

3.3 扩展练习 - 质数分解#

def prime_factors(num):
"""分解质因数"""
factors = []
divisor = 2
while divisor * divisor <= num:
if num % divisor == 0:
factors.append(divisor)
num //= divisor
else:
divisor += 1 if divisor == 2 else 2 # 跳过偶数
if num > 1:
factors.append(num)
return factors
# 测试质因数分解
number = int(input("请输入一个正整数:"))
factors = prime_factors(number)
print(f"{number} = ", end="")
print(" × ".join(map(str, factors)))

四、综合练习#

4.1 猜数字游戏#

import random
def guess_number():
"""猜数字游戏"""
secret = random.randint(1, 100)
attempts = 0
max_attempts = 10
print("猜数字游戏开始!我有一个1-100之间的秘密数字。")
while attempts < max_attempts:
try:
guess = int(input(f"第{attempts+1}次尝试,请输入你的猜测:"))
except ValueError:
print("请输入有效的数字!")
continue
attempts += 1
if guess < secret:
print("太小了!")
elif guess > secret:
print("太大了!")
else:
print(f"恭喜!你在{attempts}次内猜对了!")
break
if attempts >= max_attempts:
print(f"游戏结束!正确答案是:{secret}")
# 运行游戏
guess_number()

4.2 计算器程序#

def calculator():
"""简单的计算器"""
print("简单计算器")
print("支持的操作:+ - * / % **")
print("输入 'quit' 退出")
while True:
expression = input("\n请输入表达式:").strip()
if expression.lower() == 'quit':
print("再见!")
break
try:
result = eval(expression) # 注意:eval有安全风险,这里仅用于示例
print(f"结果:{result}")
except ZeroDivisionError:
print("错误:不能除以零!")
except:
print("错误:无效的表达式!")
# 更安全的版本
def safe_calculator():
"""更安全的计算器版本"""
while True:
print("\n1. 加法")
print("2. 减法")
print("3. 乘法")
print("4. 除法")
print("5. 退出")
choice = input("请选择操作:")
if choice == '5':
break
if choice not in ['1', '2', '3', '4']:
print("无效的选择!")
continue
try:
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
if choice == '1':
result = num1 + num2
operator = "+"
elif choice == '2':
result = num1 - num2
operator = "-"
elif choice == '3':
result = num1 * num2
operator = "*"
elif choice == '4':
if num2 == 0:
print("错误:除数不能为零!")
continue
result = num1 / num2
operator = "/"
print(f"{num1} {operator} {num2} = {result}")
except ValueError:
print("请输入有效的数字!")

五、学习建议#

5.1 调试技巧#

  1. 使用 print 调试:在关键位置打印变量值
  2. 使用断点:在 VS Code 中设置断点
  3. 异常处理:使用 try-except 捕获错误

5.2 编程习惯#

  1. 变量命名:使用有意义的变量名
  2. 注释:为复杂逻辑添加注释
  3. 函数封装:将重复代码封装成函数
  4. 测试:为代码编写测试用例

5.3 进阶学习#

  1. 列表推导式:简化循环创建列表
  2. 生成器:处理大数据时节省内存
  3. 装饰器:扩展函数功能
  4. 面向对象编程:类和对象的概念

六、实践任务#

完成以下编程任务来巩固学习:

任务1:斐波那契数列#

编写程序输出前 n 个斐波那契数列

任务2:闰年判断#

输入年份,判断是否为闰年

任务3:最大公约数和最小公倍数#

输入两个数,计算它们的最大公约数和最小公倍数

任务4:回文数判断#

判断一个数是否为回文数

Linux 基础 & Python 控制流
https://www.zhx-blog.top/posts/2025-12-08-linux_基础_amp_python_控制流/
作者
小石头·小石崽
发布于
2025-12-08
许可协议
CC BY-NC-SA 4.0