ZhX589 发布的文章

这是翻阅了许多在线教程得出来的一个较为中和的方案。

首先关注设置Fcitx5,这是Fcitx5的一篇官方教程。

这里提到:

其他不太常见的设置

还有一些其他变量可能对某些应用程序有用。 SDL_IM_MODULE

将值设置为 fcitx。只有 SDL2 需要这个。SDL1 使用 XIM。 GLFW_IM_MODULE

这是仅由[1]使用的变量。您需要将其设置为“GLFW_IM_MODULE=ibus”。 Binary Qt application

由于 Qt 5 不支持 XIM,并且它仅捆绑 ibus im 模块,因此您可能需要为不使用系统 Qt 库的 Qt 应用程序设置“QT_IM_MODULE=ibus”。 (它可能仍然无法工作,因为某些 Qt 应用程序甚至没有捆绑任何 IM 模块)。

于是我们尝试在/etc/environment设置如下环境变量:

XIM=fcitx5
XIM_PROGRAM=fcitx5
GTK_IM_MODULE=fcitx5
XMODIFIERS=@im=fcitx5
SDL_IM_MODULE=fcitx5
GLFW_IM_MODULE=ibus
QT_IM_MODULE=ibus

重启之后测试发现QQ、微信都有效了。

但是Fcitx5提示不建议设置````并建议查看网址https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#KDE_Plasma获取更多信息:

KDE Plasma

Best setup:

KDE Plasma 5.27 or later Environment variables: Set XMODIFIERS=@im=fcitx for XWayland application Start fcitx5 by go to "System settings" -> "Virtual keyboard" -> Select Fcitx 5 Do not set GTK_IM_MODULE & QT_IM_MODULE & SDL_IM_MODULE . You could unset GTK_IM_MODULE & QT_IM_MODULE by runing im-config and then selecting do not set any IM from im-config and use desktop default" Run chromium/electron application with --enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime Caveats: Certain Gtk/Qt application that only works under X11 may still need to set GTK_IM_MODULE or QT_IM_MODULE for them individually. If you set GTK_IM_MODULE/QT_IM_MODULE globally, you will hit this issue Candidate window is blinking under wayland with Fcitx 5

Support Information:

App/Compositor supports text-input-v2 and text-input-v3. Comopositor/Application uses zwp_input_method_v1. 5.27 additionally supports text-input-v1. 5.24 usable zwp_input_method_v1 with fcitx5. Pre-5.24 there are lots of problems, always use fcitx im module instead. Use "Virtual keyboard" KCM to launch fcitx5. This is required to use text-input protocol. If you launch fcitx this way, make sure you do not use "restart" in the tray menu, since the socket passed from KWin can not be reused with the newly restarted fcitx.

但是实践中并未发现提到的问题。

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打开)中输入

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

如果有时间可以使用

sudo apt upgrade -y

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

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

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

常用命令详解:


# 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 基础命令扩展学习

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


# 查看当前目录
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:回文数判断

判断一个数是否为回文数

Python入门#2:变量、数据类型、基本运算

变量是什么?

我们需要让计算机完成一些事情对吧?那么计算机是不是需要记住一些什么呢?例如,我想让他向你问好,首先得知道并记住(哪怕只是暂时的)你的名字,对吧?这部分内容学会后,你将收获:

类型 内容
语法 变量的概念与使用
函数 input
语法 语句
语法 赋值操作与基本运算符
语法 数据类型

变量

变量(Variables),顾名思义,就是一个可以变化的量。你可以把变量理解成一个盒子,你需要的话就创建它,不需要的时候就销毁它(当然,销毁的操作是Python自动完成的。)

变量的创建:赋值时自动创建

赋值

在Python中,**赋值(assignment)**是一个重要的操作。赋值的意思就是,把箱子里的东西倒掉,在放进新的去。在Python中,赋值使用=来完成。这里的等于号你可以这样理解:我要让左边的变量存储的东西和右边的一样。例如:

>>> a = 1
>>> print(a)
1
>>> 某变量 = "hello, world"
>>> print(某变量)
hello, world

在交互式解释器中,直接输入变量名等,会返回其值。例如接着操作:

>>> a
1
>>> 某变量
'hello, world'

变量的类型

就像你认识现实生活中的各种事物,有吃的有看的,有概念上的(如数字)有具象的(如课本)等,变量也具有他们的类型。这里我将介绍Python内置的数据类型。

名称 示例
整型 int a = 1
浮点型(小数) float a = 1.5
b = 1.3e10($1.3 \times 10^{10}$)
复数(少用,仅介绍) complex a = 10 + 8j
即$a = 10 + 8i$.注意到使用的是j而不是i
字符串 str(全称string) a = "hello, world"
布尔值(逻辑值,即True or Falsebool a = True
等价于
a = 1

a = False
等价于
a = 0
None(或说) NoneType a = None
数据结构等(后期会专门学习) a = [1,2,3,"hello, world", [12, 2], (12, 23)]
其他内置数据类型

基本运算

算数运算符

运算符 含义 示例
+ 加法(数值)或串联(序列) 3 + 5 == 8'a' + 'b' == 'ab'
- 减法 10 - 3 == 7
* 乘法或序列复制 2 * 4 == 8'ha' * 3 == 'hahaha'
/ 除法(始终返回 float 7 / 2 == 3.5
// 地板除(返回结果的向下取整,但是数据类型仍为int 7 // 2 == 3
10.3 // 2 == 5.0
-10.3 // 2 = -6.0
% 取模(余数) 7 % 3 == 1
** 幂运算 2 ** 5 == 32

地板除需注意:结果向下取整,例如10.3 // 1的结果为10, -10.3 // 1的结果为-11

取余得到的余数即小学学的带余除法得到的余数部分。例如:

$$ 13 \div 5 = 2 \text{ 余 } 3 $$ 在Python中:
>>> print(13 % 5)
3

在数论中,这个叫做模除: $$ 3 \equiv 13 \pmod 5 $$ 这个式子的意思为,在除以5的情况下3与12同余。$\equiv$是同余符号。

同余即余数相同。

或者可以这样写: $$ 13 \mod 5 = 3 $$ 这种写法的意思为,13 除以 5 的余数为 3

逻辑运算符

运算符 含义 示例
and 与(短路求值) True and False == False
or 或(短路求值) True or False == True
not not True == False

逻辑运算符(Boolean operators),顾名思义(顾英文名),就是针对布尔值的运算。一般用于逻辑判断。

例如,我用我出门骑自行车表示我是否会出门骑自行车,用今天下雨表示今天是否会下雨,用今天刮风表示今天是否刮风,那么如果我只在不刮风也不下雨的时候骑自行车(要求好高啊)可以这样表示:

我出门骑自行车 = (not 今天下雨) and (not 今天刮风)

这里是各个逻辑运算的所有结果(用1|0表示法):

运算 结果
1 and 1 1
1 and 0 0
0 and 0 0
1 or 1 1
1 or 0 1
0 or 0 0
not 1 0
not 0 1

位运算符

注意到计算机以2进制(bin)存储数据。因此学习一些关于(二进制)位的运算是有必要的。在一定程度上,恰当地使用位运算可以简化算法。

进制是什么呢?寻常我们数数,是不是数到10就进一位啦?

比如: $$ 9 + 1 = 10 $$ 从一位数变成了两位数。

而其他进制就不一样了。例如

二进制中,是逢2进1: $$ 1_2 + 1_2 = 10_2 \ 10_2 = 2_{10} \ 10_2 + 1_2 = 11_2 \ 11_2 = 3_{10} \ 111_2 + 11_2 = 1010_2 \ 1010_2 = 10 $$ 从1位变成了2位.

八进制同理: $$ 3_8 + 7_8 = 12_8 \ 12_8 = 10_{10} $$ 十进制以上进制则大于十的用字母补齐(因为只有九个数字)。

例如十六进制中: $$ 9_{16} + 5_{16} = \text{e}{16} \ \text{f}{16} + 1 = 10_{16} \ 15_{16} + 14_{16} = \text{1d}{16} \ \text{e}{16} = 14_{10} \ \text{10}{16} = 16{10} \ \text{1d}{16} = 29{10} $$

二进制、八进制数是int的子集,其中:

二进制(bin)用0b开头:

>>> bin(12)
'0b1100'

八进制(oct)用0o开头:

>>> oct(12)
'0o14'

十六进制(hex)使用0x开头:

>>> hex(12)
'0xc'
运算符 示例
&(按位与) 0b1100 & 0b1010 == 0b1000
` `(按位或)
~(按位非) ~0b1100 == -0b1101(注意变成了负数)
~0b-1 == 0
^(按位异或) 0b1100 ^ 0b1010 == 0b0110

异或(XOR)的规律:同则为0, 异则为1:

操作 结果
$1 XOR 1$ $0$
$1 XOR 0$ $1$
$0 XOR 1$ $1$
$0 XOR 0$ $0$

位运算可以理解成按位进行的逻辑运算。

比较运算符

运算符 含义 示例
== 等于 5 == 5
!= 不等于 5 != 3
<, <=, >, >= 大小比较 3 < 45 >= 5
is 对象身份比较(同一对象) a is b
is not 对象身份不等 a is not b

为什么等于号是两个等号呢?因为一个等号已经被那个叫做赋值的坏家伙占用了(

身份运算符

运算符 含义 示例
is 检查两个对象是否是同一实例 a is b
is not 检查两个对象是否不是同一实例 a is not b

例如:

>>> "hello" in "hello, world"
True

测验:

请在计算一下运算的结果并在交互式解释器中验证:(带*的为选做,进度快的同学可以自行上网查找资料进行完成)

  1. 1 + 89089

  2. "hello" + ", " + "world"

  3. "hello," " world"

  4. a = 6
    b = -7
    print(a + b)
    print(a - b)
    print(a * b)
    print(a / b)
    print(a // b)
    print(a % b % 2)
    print(a ** b)
    print(b ** a)
    print(a and b)
    print((not a) or b)
    print(not b)
    print(a ^ b)
    print(a | b)
    print(~a)
    print(~b)
    print(~a ^ b)
    print(bin(a))
    print(hex(a))
    print(oct(b-a))
    print(type(bin(a)))
    print(type(hex(a)))
    print(type(oct(b-a)))
    print(type(type(12 + 29 ** 23)))
    
  5. * 编写一个程序,使得你能够告诉它你的名字,然后它向你问好。

项目5示例代码:

# 入门2-5方言版
name = input("泥脚什么名字呀?")
print(name, ', '+name, ', ' "泥豪泥豪")

运行结果示例:

泥脚什么名字呀?ZhX589
ZhX589 , ZhX589 , 泥豪泥豪

基于AI,仅供参考

1. 课程整体框架

周次 课堂主题 目标(45 min) 课堂活动 课后作业 / 练习
1 Python 基础环境 & 第一个脚本 熟悉运行环境(Anaconda/venv),写出 print("Hello, world!") 现场装配开发环境(IDE 推荐 VS Code + Python 扩展),演示 REPL 完成 环境搭建检查清单,提交截图
2 变量、数据类型、基本运算 能正确使用整数、浮点、字符串、布尔值 课堂小测(填空/选择)+ 现场写 5 条小算式 练习题:calculator.py(实现四则运算)
3 控制流(if / for / while) 能用条件、循环解决简单问题 “猜数字” 现场编程(分组协作) 完成 猜数字 变体:加入计数器、提示功能
4 函数 & 参数 能定义、调用函数,理解作用域 编写 阶乘斐波那契 两个函数,现场调试 作业:实现一个 BMI 计算函数,写出 单元测试(unittest)
5 常用内置数据结构(list、tuple、dict、set) 能选用合适的数据结构存储/查询数据 现场做 学生信息管理 小程序(增删改查) 完成 购物车 小练习:使用 dict 实现商品添加/删除
6 文件 I/O & 异常处理 能读写文本文件,捕获常见异常 读取 CSV 学生成绩文件并统计平均分 作业:编写 日志记录器(写入文件 + 异常捕获)
7 模块化 & 第三方库(requests、json) 能使用 import,了解 pip 安装 调用 GitHub API 获取仓库信息并打印 完成 天气查询 小程序(使用 requests 调接口)
8 面向对象基础(class、属性、方法) 能设计简单类并实例化 现场实现 学生类(属性:姓名、学号、成绩;方法:计算平均) 作业:实现 银行账户 类(存取款、记录历史)
9 单元测试 & 调试技巧 能编写 unittest,使用 assert 为前几节代码编写测试用例,现场运行 完成 测试覆盖率 小任务(使用 coverage
10 简单项目规划(需求分析、拆解任务) 能把需求拆解为可实现的子任务 “图书管理系统” 为例,现场绘制 UML(类图、时序图) 小组讨论:确定本学期项目主题(提交需求文档)
11 项目实现 I(搭建框架、基本功能) 完成项目的 入口文件、基本 CLI 界面 小组现场编码:实现 登录/注册数据持久化(JSON) 完成 登录/注册 功能的单元测试
12 项目实现 II(功能完善、演示、反馈) 完成项目的 核心业务,能完整演示 每组 5 min 项目 Demo + 现场 Q&A 项目提交(GitHub 仓库),撰写 技术总结(200 字)

注意:如果实际课时更少,可将 第 9–12 节 合并为 项目冲刺,将前面内容的练习作为课后自学(提供视频/文档)。


2. 高效利用 45 分钟课堂的技巧

方法 具体做法 目的
翻转课堂 课前把阅读材料、短视频(5‑10 min)放在学习平台,要求学生提前观看并在课堂开始前完成 思考题(使用 Google Form 或纸质) 把讲解时间压缩到 15‑20 min,剩余时间用于实战
即时编码(Live Coding) 副社长现场写代码,边写边解释,学生同步在自己的电脑上敲代码;遇到错误时让学生一起找原因 让学生感受真实的调试过程,提升动手能力
配对编程(Pair Programming) 两人一组轮流 Driver / Navigator,交替敲代码并讨论实现思路(自行安排,直接找社长可能更合适) 提高参与度,帮助弱势学生跟上进度
代码走查(Code Review) 每节课抽取 1‑2 份学生提交的代码现场走查,指出改进点 培养代码审查习惯,强化质量意识
微项目(Micro‑Project) 每 2‑3 节课结束后布置一个 ≤30 行 的小项目,课堂上进行展示 让学习成果可视化,增强成就感

3. 课后自学资源(推荐)

主题 资源 备注
Python 基础教程 https://www.runoob.com/python3/python3-tutorial.html 中文,适合快速查阅
交互式练习平台 https://www.codewars.com/ https://www.leetcode.com/ 挑选 Easy 级别题目
视频讲解(B 站) https://www.bilibili.com/video/BV1xK4y1C7Jp/ “Python 入门(45 分钟)”系列
在线 IDE(免装) https://replit.com/ 课堂现场快速演示
项目管理模板 https://github.com/karan/Projects 可直接 fork 用于项目任务拆分

4. 评估与反馈

  1. 每两节课一次小测(选择题+简答,10 分钟),帮助把握学生掌握情况。
  2. 项目里程碑检查:第 10、11、12 节分别提交 需求文档、代码框架、完整演示,并给出 10%/30%/60% 的进度评分。
  3. 学期结束调查:收集学生对 课堂节奏、作业难度、资源可用性 的反馈,以便下学期改进。

5. 关键提示

  • 把“练习”搬进课堂:即使学生课后时间有限,也能在课堂上完成大部分代码实现,只留下概念性思考做作业。
  • 提供“一键运行”环境:提前准备好一个 Docker 镜像Conda 环境environment.yml),让学生只需 conda env create -f environment.yml 即可开始编程,降低环境配置的门槛。
  • 鼓励代码共享:使用 GitHub Classroom(或 Gitee)统一收集作业,便于快速检查,也让学生养成版本控制的习惯。

小结

  • 前 8 节打好 语言基础(语法、数据结构、函数、文件、模块、面向对象)。
  • 第 9‑12 节转向 项目实战,通过需求拆解、迭代实现,让学生在有限时间内感受到完整的开发流程。
  • 通过 翻转课堂 + 现场编码 + 配对编程 的教学模式,把课后练习的负担压到课堂里,同时提供丰富的自学资源供有余力的同学自行提升。

祝你们的课程顺利开展,学生们在学期结束后都能自信地踏上 Python 项目开发的道路!如果还有细节需要进一步细化(比如作业模板、评估细则等),随时告诉我。

第一个程序

注意: 不一定所有内容都能看得懂,实践最重要。所以遇到不懂得可以先跳过(或者直接问),写的代码多了就懂了。

如何打开IDE呢?下载好Python安装后可以在桌面上发现一个名叫IDLE的快捷方式(如果在安装时选择了创建快捷方式),点击即可打开。由于机房电脑一些奇奇怪怪的错误,学校机房的桌面快捷方式死了,所以请按下Win键(或点击左下角Windows图标)打开开始菜单查找Python->IDLE打开。建议选择白色的。

IDE: IDE是集成开发环境的缩写,可以大致理解为用于进行开发活动的全套软件。

交互式解释器介绍

刚打开IDLE时,你会发现一个白色的窗口,其中有如下字样:

Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 

最后一行前的>>> 标志这是交互式解释器。交互式就意味输入一行解释器就会执行一行。例如:

>>> 12+13
25
>>> 135465457654357654357356**10
2081065193176208652493570136210529355534687343561794797850624650869897720865652351060577643074271139111678336606170815459838610973844137190397334937575949673593026866575900058843430712604593435740147956665499607587584231896358322176

其中,你若输入一个表达式,他就会返回表达式的值;反若是语句等,则输出结果。例如print是一个函数:

>>> print
<built-in function print>

直接输入(即当做表达式输入)返回的是其类型(即值):内建函数print

表达式: 蕴含值的一个式子(大致可如此理解)。 例如,1+1是一个表达式,1234*4537也是一个表达式

print函数: print函数用于把参数向控制台输出。例如:

>>> print(12)
12

实践

打开IDLE,使用交互式解释器在控制台输出hello, world!

在文件中写代码

点击窗口左上角的File,选择New File,就可以打开一个名叫untitled的文件编辑窗口。你可以在这里写代码保存到文件并执行。

例如,输入:

print(1+1)

Ctrl+S保存,输入你想取的名字,保存在合适位置。

接着,点击Run,选择Run model,即可在刚才打开的交互式解释器查看运行结果。 例如刚才的文件的运行结果是:

>>> ================================ RESTART ================================
>>> 
2

实践

创建一个名叫helloworld.py(需要把显示拓展名打开)的文件,编辑合适的代码,使得这个文件能够向控制台输出hello, world