结构控制

目录​​​​​​​

1.顺序结构

2.分支结构

2.1.单分支结构

2.2.二分支结构

2.3.多分支结构

2.4.嵌套分支结构

3.循环结构

3.1.while 循环结构

3.2.while...else 循环结构

PS:break 关键字

PS:pass 关键字

3.3.for 循环结构

PS:range 函数

3.4.嵌套循环


1.顺序结构

2.分支结构

2.1.单分支结构

流程图插件:

新建一个以.dio为后缀的文件:

缩进插件:

调试代码:

代码每一行左侧打断点,选 Debug Python File。

# 需求一:输入一个整数判断是否是偶数。
# 接受一个整数
n = int(input('请输入一个整数:'))
# 判断是否是偶数
if n % 2 == 0:
    print(f'{n}是偶数')

# 需求二:用户被要求输入一个数字。然后,程序会判断这个数字是正数、零还是负数,并相应地输出不同的消息。
# 接受一个数字
n = float(input('请输入一个数字:'))
# 判断是否是正数
if n > 0:
    print(f'{n}是正数')
# 判断是否是负数
if n < 0:
    print(f'{n}是负数')
# 判断是否是 0
if n == 0:
    print(f'{n}是零')

# 需求三:判断四位数的年份是否是闰年,如果是闰年输出是闰年。
# 接受一个四位数的年份
year = int(input('请输入一个四位数的年份:'))
# 判断是否是闰年
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print(f'{year}是闰年')
    pass
# 判断是否不是闰年
if not(year % 4 == 0 and year % 100 != 0 or year % 400 == 0):
    print(f'{year}是平年')
    pass

2.2.二分支结构

# 需求一:用户被要求输入考试分数,然后程序会根据分数是否大于等于 80 判断是否及格,并输出相应结果。
score = float(input('请输入一个考试成绩:'))
if score >= 80:
    print('考试成绩合格')
else:
    print('考试成绩不合格')

# 需求二:判断一个数是否为偶数。
n = int(input('请输入一个整数:'))
if(n % 2 == 0):
    print('是偶数')
else:
    print('是奇数')

# 需求三:判断一个年份是否为闰年。
year = int(input('请输入一个四位数的年份'))
if(year % 4 == 0 and year % 100 != 0 or year % 400 == 0): # and 与的优先级高于 or 或
    print(f'{year}是闰年')
else:
    print(f'{year}是平年')

Markdown PDF 插件:把 Markdown 格式文件转成 PDF 导出。

语法提示插件:

在 markdown 文件中右击,选择导出方式。

# 随机生成一个 5 位数,判断是否是回文(回文就是正序和逆序的结果都是一样的)

# 导入生成随机数的模块
import random

# 生成一个 5 位的随机数
n = random.randint(10000, 99999)

# 获取个位、十位、千位、万位
a, b, c, d = n % 10, n // 10 % 10, n // 1000 % 10, n // 10000

# 判断 if
if a == d and b == c:
    print(f'{n}是回文数字')
else:
    print(f'{n}不是回文数字')

2.3.多分支结构

不管几个条件成立只会执行第一个满足条件的代码。

# 需求一:用户被要求输入学生的分数,程序根据分数的范围给出相应的评级。
# 评级:A:90 - 100], , B:[80 - 90], C:60 - 80], D:0 - 60]
score = float(input('请输入一个成绩:'))
if 90 <= score <= 100: # 连等的比较方式只有 python 语言有,其他语言没有
    print('考试成绩等级 A')
elif 80 <= score < 90:
    print('考试成绩等级 B')
elif 60 <= score < 80:
    print('考试成绩等级 C')
elif 0 <= score < 60:
    print('考试成绩等级 D')
else:
    print('考试成绩有误')

# 需求二:用户被要求输入一个年龄,程序会根据年龄段给出相应的描述。
# 年龄段:[0 - 14], [14 - 18], [18 - 24], [24 - 35], [35 - 65], [65
# 描述:  少年,     青少年,     青年,      核动力驴,   牛马,     老牛马
age = int(input('请输入一个年龄:'))
if 0 <= age < 14:
    print('少年')
elif 14 <= age < 18:
    print('青少年')
elif 18 <= age < 24:
    print('青年')
elif 24 <= age < 35:
    print('核动力驴')
elif 35 <= age < 65:
    print('牛马')
elif age >= 65:
    print('老牛马')
else:
    print('年龄输入有误')

# 需求三: 用户被要求输入一个月份。程序会根据月份判断所属的季节,并输出相应的季节和特定节日。
month = int(input('请输入月份:'))
if 3 <= month <= 5:
    print('春季')
    print('清明节、劳动节、妇女节')
elif 6 <= month <= 8:
    print('夏季')
    print('端午节、七夕节、中元节')
elif 9 <= month <= 11:
    print('秋季')
    print('国庆节、中秋节、重阳节、教师节')
elif month == 12 or 1 <= month <= 2:
    print('冬季')
    print('春节、元宵节、元旦、双十二')
else:
    print('月份输入有误')

2.4.嵌套分支结构

# 需求一 : 用户被要求输入一个分数。程序会根据分数给出相应的等级和评价。
score = float(input('请输入成绩:'))

# 约束正确的范围
if 0 <= score <= 100:
    if 90 <= score <= 100:
        print('A 级\n你很优秀继续加油!')
    elif 80 <= score < 90:
        print('B 级\n还是不错的继续加油!')
    elif 60 <= score < 80:
        print('C 级\n你已经过关了继续加油!')
    else:
        print('D 级\n你的态度不错继续加油!')
    pass # pass 关键字,没有任何含义,只是作为语法正确的占位符
else:
    print('成绩有误')
    pass


# 需求二:用户被要求输入一个年份和一个月份。程序会根据输入的年份和月份判断该月份有多少天。
year, month = int(input('请输入一个年份:')), int(input('请输入 一个月份:'))

if 1000 <= year <= 9999 and 1 <= month <= 12:
    # 定义一个变量保存天数
    days = 31
    if month == 4 or month == 6 or month == 9 or month == 11:
        days = 30
    elif month == 2:
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            days = 29
        else:
            days = 28
    print(f'{year}年{month}月,一共{days}天')
else:
    print('年份或月份输入有误')


# 需求三:用户被要求输入购买金额和会员等级。程序会根据购买金额和会员等级计算折扣后的支付金额。
# 如果会员等级是"普通会员" ,并且购买金额大于等于 1000 ,则折扣为 0.9 (九折优惠),否则不打折。
# 如果会员等级是"高级会员" ,并且购买金额大于等于 500 ,则折扣为 0.8 (八折优惠),否则不打折。
# 如果会员等级是"至尊会员" ,折扣为 0.7 (七折优惠)。
# 如果会员等级不属于上述情况,则不打折。
# 1、通过 input 函数输入购买金额和会员等级
money, level = float(input('请输入消费金额:')), input('请输入会员等级:')

# 定义一个标记
flag = True

# 2、判断会员等级
# python 3.10 开始支持定值判断(无法支持范围判断)的分支结构语法 match(类似于 java 中的 switch 语句,excel 中也有 switch 函数)。
match level:
    case '普通会员':
        if money >= 1000:
            money *= 0.9
        pass
    case '高级会员':
        if money >= 500:
            money *= 0.8
        pass
    case '至尊会员':
        money *= 0.7
        pass
    case _: # _ 表示前面 3 个都不满足,则执行此条
        flag = False
        print('您的会员等级不对')
        pass

# if flag:
#     print(f'您的会员等级是:{level}, 您最后需要支付的金额是:{money}')
# else:
#     print(f'您最后需要支付的金额是:{money}')

# 三目运算符(二分类问题的简写)
# 语法(只有 python 有):
# 条件成立的结果 if 条件 else 条件不成立的结果
print('-' * 30)
print(f'您的会员等级是:{level},' if flag else '', f'您最后需要支付的金额是:{money}', sep = '')

3.循环结构

3.1.while 循环结构

# 需求一: 打印 1 ~ 10 之间的整数。
# 使用 while 循环做循环次数固定的场景需要记住以下步骤:
# 1、定义循环变量并初始化(给一个值)
# 2、确定循环条件
# 3、确定循环体
# 4、循环变量改变
# control + c 强制停下程序
n = 1
while n <= 10:
    print(n)
    n += 1


# 需求二:打印 1 ~ 10 之间的偶数。
n = 1
while n <= 10:
    if n % 2 == 0:
        print(n)
    n += 1
    pass


# 需求三: 用户被要求输入一个正整数。程序会使用 while 循环计算输入的正整数的阶乘。
n = int(input('请输入一个正整数:'))

if n >= 1:
    # 定义一个变量保存阶乘的结果
    jc = 1
    # 定义循环变量
    i = 2
    while i <= n:
        jc *= i
        i += 1

    print(f'{n}的阶乘是:{jc}')
    pass
else:
    print('您输入的不是正整数')
# 用户输入当前日期是星期几(1 - 7 的数字即可),如果是工作日(1 - 5),天气好就去谈业务,天气不好在公司整理资料;如果是周末温度超过 30 度去游泳,不超过去爬山。

# 1、输入星期
weekday = int(input('请输入今天是星期几(1 - 7)?'))

# 2、判断是否是工作日
if 1 <= weekday <= 5:
    tq = input('请输入今天天气怎么样(好/不好)')
    match tq:
        case '好':
            print('出去谈业务')
            pass
        case _:
            print('在公司整理资料')
    pass
elif 6 <= weekday <= 7:
    c = float(input('请输入当天的温度:'))
    if c > 30:
        print('游泳')
    else:
        print('爬山')
    pass
else:
    print('输入有误')

# 判断三角形类型并计算三角形面积。
# 要求:输入三角形的三条边长度,判断是等边三角形、等腰三角形还是一般三角形,若是三角形,则计算三角形的面积输出。

# 输入三角形的三条边
a, b, c = float(input('请输入三角形的第一条边:')), float(input('请输入三角形的第二条边:')), float(input('请输入三角形的第三条边:'))

# 判断是否能组成三角形
if a + b > c and a + c > b and b + c > a:
    # 判断是否是等边三角形、等腰三角形还是一般三角形
    if a == b and a == c:
        print('等边三角形')
    elif a == b or a == c or b == c:
        print('等腰三角形')
    else:
        print('一般三角形')
    
    # 海伦公式:已知三角形的三条边,求三角形的面积
    # 求半周长
    p = (a + b + c) / 2

    # 计算面积
    # S 作为变量,会变色和一般变量颜色不一致,改为 s
    s = (p * (p - a) * (p - b) * (p - c)) ** 0.5
    
    print(f'三角形的面积是:{s}')
    pass
else:
    print('无法组成三角形')
# 判断是否能购买特定商品。
# 要求:输入一个人的年龄和拥有的资金数额,若年龄大于等于 18 岁且资金大于等于 1000 元,输出“可以购买高端电子产品”;若年龄小于 18 岁且资金大于等于 500 元,输出“可以购买普通电子产品”;否则输出“无法购买电子产品”

# python 中没有 double, 只有 float

age, money = int(input('请输入年龄:')), float(input('请输入资金金额:'))

if age >= 18 and money >= 1000:
    print('可以购买高端电子产品')
elif 0 < age < 18 and money >= 500:
    print('可以购买普通电子产品')
else:
    print('无法购买电子产品')
# 判断用户输入的一个字符的字符串。
# 要求:用户输入一个字符,判读该字符是大写字母、小写字母、数字还是其他字符,分别输出对应的结果。

s = input('请输入一个字符:')

# ASCII 编码表
# 'a': 97
# 'z': 97 + 26 - 1 = 122
# 'A': 65
# 'Z': 65 + 26 - 1 = 90
# '0': 48
# ord(str): 把单个字符转为十进制数字
print(ord(s))

if 'a' <= s <= 'z':
    print('小写字母')
elif 'A' <= s <= 'Z':
    print('大写字母')
elif '0' <= s <= '9':
    print('数字')
else:
    print('其他')

3.2.while...else 循环结构

# 需求一:打印 1 ~ 10 之间的整数,条件不成立提示。
i = 1

while i <= 10:
    print(i)
    i += 1
else:
    print('循环结束')

PS:break 关键字

break 必须在循环里用,一般放在判断里。

# 给出换购的提示语句
# 三引号里的内容是注释,但若前面用变量接收了,其就是一个变量(文本/字符串)。
# 三引号里的内容有回车换行,其变量展示也是有回车换行;而单引号和双引号要展示换行则需要用 \n。
msg = '''是否参加优惠换购活动:
1、满 50 元,加 2 元换购百事可乐饮料 1 瓶
2、满 100 元,加 3 元换购 500 ml 可乐 1 瓶
3、满 100 元,加 10 元换购 5 公斤面粉
4、满 200 元,加 10 元换购 1 个苏泊尔炒菜锅 1 个
5、满 200 元,加 20 元换购欧莱雅爽肤水 1 瓶
0、不换购
-1、退出
请选择:'''

while 1:
    # 接收选择
    key = int(input(msg)) # 写变量不能加引号,不然就是文本了
    if key == -1:
        break

    # 通过 input 函数输入消费金额
    money = float(input('请输入消费金额:'))

    # 定义一个是否换购成功的字符串
    s = ''

    match key:
        case 1:
            if money >= 50:
                money += 2
                s = '成功换购:百事可乐饮料 1 瓶'
            pass
        case 2:
            if money >= 100:
                money += 3
                s = '成功换购:500 ml 可乐 1 瓶'
            pass
        case 3:
            if money >= 100:
                money += 10
                s = '成功换购:5 公斤面粉'
            pass
        case 4:
            if money >= 200:
                money += 10
                s = '成功换购:1 个苏泊尔炒菜锅 1 个'
            pass
        case 5:
            if money >= 200:
                money += 20
                s = '成功换购:欧莱雅爽肤水 1 瓶'
            pass
        case 0:
            pass
        case _:
            print('没有这项换购')

    print(f'您本次消费金额是:{money} RMB')
    print(s if s else '您本次消费未达到换购标准')

# 输入赵本山的考试成绩,显示所获奖励
# 成绩 == 100 分,爸爸给他买辆车
# 成绩 >= 90 分,妈妈给他买 MP4
# 90 分 > 成绩 >= 60 分,妈妈给他买本参考书
# 成绩 < 60 分,什么都不买

# 接收赵本山的成绩
score = float(input('请输入赵本山的成绩:'))

if 0 <= score <= 100:
    if score == 100:
        print('爸爸给他买辆车')
    elif score >= 90:
        print('妈妈给他买 MP4')  
    elif 90 > score >= 60:
        print('妈妈给他买本参考书')
    else:
        print('什么都不买') 
    pass
else:
    print('成绩有误')

# 计算 100 以内偶数之和,编程实现:计算 100 以内(包括 100)的偶数之和

# 定义循环变量并初始化为 2
i = 2

# 定义变量保存偶数和
sum_ = 0 # sum 是关键字,所以定义变量需要加 _,一般加下划线

while i <= 100:
    sum_ += i
    i += 2

print(f'100 以内偶数和是:{sum_}')

PS:pass 关键字

没有任何实际意义只是作为占位符使用。主要就是为了保证语法不出错误。

3.3.for 循环结构

如果循环次数固定,那么首先选 for 循环;如果循环次数不固定,那么首先选 while 循环。

循环条件不能是数字,数字是不可迭代分割的。

PS:range 函数

若 range 给 2 个值,是 start 和 end,若要改 step,则 range 要给 3 个值。

range(start, end, step) 是左闭右开,包含左边 start,不包含右边 end。

⚠️在绝大多数情况下,只要涉及到范围,默认都是左闭右开的区间。

diff:生成随机数目前是左闭右闭。看源码会发现其本质还是左闭右开。

# 需求一: 打印 1~100 之间的偶数
# 定义变量保存偶数和
sum_ = 0
for 循环变量 in range(2, 101, 2):
    sum_ += 循环变量
    pass
print(sum_)


# 需求二:如果一个数等于它的每一位数的立方和, 则称为水仙花数(一定是个三位数), 如 153 = 1 + 125 + 27 求 100 - 999 之间的全部水仙花数
# 153,370,371,407
for i in range(100, 1000):
    a, b, c = i % 10, i // 10 % 10, i // 100
    if a ** 3 + b ** 3 + c ** 3 == i:
        print(i)
    pass

3.4.嵌套循环

一般不会超过 3 层嵌套循环,会有优化方案。

多一个 %,解决方法:

# # 需求一: 打印九九乘法表

# # # 第一行
# # a = 1
# # b = 1
# # print(f'{a} * {b} = {a * b}')

# # 第一行优化
# b = 1
# for a in range(1, b + 1):
#     print(f'{a} * {b} = {a * b}', end = '\t')
# print()

# # # 第二行
# # b += 1
# # print(f'{a} * {b} = {a * b}', end = '\t') # end = '\t' 不让其换行
# # a += 1
# # print(f'{a} * {b} = {a * b}')

# # 第二行优化
# b = 2
# for a in range(1, b + 1):
#     print(f'{a} * {b} = {a * b}', end = '\t')
# print()


# # # 第三行
# # b += 1
# # a = 1
# # print(f'{a} * {b} = {a * b}', end = '\t') 
# # a += 1
# # print(f'{a} * {b} = {a * b}', end = '\t')
# # a += 1
# # print(f'{a} * {b} = {a * b}')

# # 第三行优化
# b = 3
# for a in range(1, b + 1):
#     print(f'{a} * {b} = {a * b}', end = '\t')
# print()

# 整体优化
for b in range(1, 10):
    for a in range(1, b + 1):
        print(f'{a} * {b} = {a * b}', end = '\t')
    print()

# 不用 \t,用空格
for b in range(1, 10):
    for a in range(1, b + 1):
        print(f'{a} * {b} = {a * b}', end = '  ' if a * b >= 10 else '   ')
    print()

# # 多条件嵌套,一般套不明白,不建议使用
# 4 if a >= 100 else 3 if a >= 10 else ''

# 需求二: 三位数有多少种不同的组合 (要求三位数每一位都不同)
ct = 0

for a in range(1, 10):
    for b in range(0, 10):
        for c in range(0, 10):
            if a != b and b != c and a != c:
                ct += 1

print(ct)

# 需求三: 百钱百鸡是一个经典的数学问题,它的目标是找出给定金额下,购买一百只鸡的不同买法。
# 假设有公鸡每只 5 元,母鸡每只 3 元,小鸡 1 元 3 只。
# 每种类型的鸡都得有,且要求一百元正好购买一百只鸡。

# 🐔:20,公鸡最多有 100 / 5 = 20 只
# 🐓:33,母鸡最多有 100 / 3 = 33 只
# 🐤:100 - 🐔 - 🐓

for a in range(1, 20): # a 公鸡个数
    for b in range(1, 33): # b 母鸡个数
        c = 100 - a * 5 - b * 3 # c 是小鸡钱数
        if a + b + (c * 3) == 100:
            print(f'🐔:{a}, 🐓:{b}, 🐤:{c * 3}')

# 用户登录验证,验证次数最多 3 次

# 定义正确的用户名和密码
username = password = 'admin'

# 使用 for 循环来模拟次数
for a in range(2, -1, -1):
    # 接收输入的用户名和密码
    user = input('请输入用户名:')
    pwd = input('请输入密码:')

    if user == username and pwd == password:
        print(f'{user} 登录成功')
        break
    print(f'您还有 {a} 次机会' if a != 0 else '')
else:
    print('请联系管理员')

# 一辆以固定速度行驶的汽车,清晨司机看到里程表上从左到右的读数和从右到左的读数是一样的,这个数是 95859,2 小时后里程表上又出现一个新的对称数,问此车的时速是多少?新的对称数是什么?设里程表为 5 位数。
for i in range(95860, 100000):
    a, b, c, d = i % 10, i // 10 % 10, i // 1000 % 10, i // 10000
    if a == d and b == c:
        print(f'新的对称数是:{i},车速是:{(i - 95859) / 2} km/h')
        break

# 求 n!,n 由键盘输入,范围要求 3 - 15 之间,如果用户输入的数不满足条件,则提示重新输入,直到输入了正确的 n,计算阶乘并输出结果。

while 1:
    n = int(input('请输入一个 3 - 15 之间的整数:'))
    if 3 <= n <= 15:
        break
    pass

jc = 1
for a in range(2, n + 1):
    jc *= a
print(f'{n}的阶乘是:{jc}')

# 任意输入 5 个数,找出最小数

#定义一个变量保存最小值
min_ = -1 # 一般认为 -1 要不是错误,要不是没有

for i in range(1, 6):
    n = float(input(f'请输入第 {i} 个数字:'))
    if i == 1:
        min_ = n
    elif n < min_:
        min_ = n

print(f'5 个数字的最小值是:{min_}')

# 任意输入 n 个数,当输入 -1 时结束,找出其中最大数和最小数

# 定义保存最大值和最小值的变量
max_ = min_ = -1

while 1:
    n = float(input('请输入数字(输入 -1 结束):'))
    if n == -1:
        break
    elif max_ == -1:
        max_ = min_ = n
    else:
        if n > max_:
            max_ = n
        elif n < min_:
            min_ = n
    pass

print(f'最大值:{max_}\n最小值:{min_}' if max_ != -1 else '没有最大值和最小值')

# 猴子摘来一些桃,吃掉全部的一半,又吃了一只;第二天、第三天以后也是如此。第十天猴子一看,只剩一只桃,问猴子第一天共摘了多少只桃?

# 第十天:1
# 第九天:4
# 第八天:10
# 第七天:22

n = 1

for i in range(9, 0, -1):
    n = (n + 1) * 2
    pass

print(f'小猴子第一天摘了:{n} 个桃')

# 出 1 - 10000 之间的全部同构数,同构数指一个数出现在它的平方的右端
# 如 5 的平方是 25,5 是 25 右端的数,5 和 25 就是一对同构数

# 定义一个取余的变量
n = 10

for i in range(1, 10001):
    if n == i: # 进位
        n *= 10
    a = i ** 2
    if i == a % n:
        print(f'{i}\t{a}')

# 输出 3 - 100 之间的全部素数
ct = 0
for a in range(3, 101, 2):
    for i in range(2, a // 2 + 1):
        ct += 1
        if a % i == 0:
            break
    else:
        print(a, end = ', ') # end = ', ' 让其不要换行,在一行用, 分割
print('\n', ct)

print('*' * 80)

# 优化
ct = 0
for a in range(3, 101, 2):
    ct += 1
    if a > 7 and (a % 3 == 0 or a % 5 == 0 or a % 7 == 0 or a % 9 == 0):
        pass
    else:
        print(a, end = ', ') # end = ', ' 让其不要换行,在一行用, 分割     
print('\n', ct)

# 计算 1 + 3!+ 5!+ ... + (2n - 1)! 前 10 项和

# 定义变量保存阶乘的和
jc_sum = 0

for i in range(1, 2 * 10, 2):
    # 定义变量保存阶乘结果
    jc = 1
    for j in range(2, i + 1):
        jc *= j
    jc_sum += jc

print(jc_sum)

# 计算 s = 1 + (1 + 2) + (1 + 2 + 3) + ... + (1 + 2 + 3 + ... + n)
n = int(input('请输入一个数字:'))
sum_ = 0

# for i in range(1, n + 1):
#     for j in range(1, i + 1):
#         sum_ += j
# print(sum_)

# 优化
s = 0
for i in range(1, n + 1):
    sum_ += i
    s += sum_
print(s)

# 雨淋湿了本子上一道题,8 个数字只能看清 3 个,第 1 个数字虽然看不清,但可看出不是 1:[方框 *(方框 3 + 方框)] ^ 2 = 8 方框 方框 9,确定方框是什么数
for a in range(2, 10): # a 是第一个方框
    for b in range(1, 10): # b 是第二个方框
        for c in range(0, 10): # c 是第三个方框
            n = (a * (b * 10 + 3 + c)) ** 2
            d, e = n % 10, n // 1000
            if d == 9 and e == 8 and n <= 9999:
                print(f'[{a} x ({b}3 + {c})] ^ 2 = {n}')

# 求 100 之内的所有完备数,完备数是其各因子之和等于其本身的正数。如 6,其因子是 1,2,3,各因子之和是 6 本身。
for i in range(2, 101):
    a = 1
    for j in range(2, i // 2 + 1):
        if i % j == 0:
            a += j
    if a == i:
        print(i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值