函数的递归
# 递归: 函数自身调用自身
#分治思想
#  N的阶乘
"""
9!=1*2*3*4*5*6*7*8*9
9!=8!*9

n!=(n-1)!*n
"""


# 1、递归出口
# def jiecheng(n):
#     #递归出口
#     if n==1:
#         return 1
#     else:
#         return jiecheng(n-1)*n
#
#
#
# a = jiecheng(4)
# print(a)


# 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。
# 你有多少种不同的方法可以爬到楼顶?
#
# 基础要求
# 编写一个递归函数 climb_stairs(n),计算爬到第 n 阶楼梯的不同方法数。

# n<=1    return 1


# 2     11   2                         2
#3      111 12  21                      3
#4   1111 121 211 112 22                  5
#5   11111 2111 1211 1121 1112 221 212 122     8
# n   n-1 + n-2

# def climb_stairs(n):
#     if n<=1:
#         return 1
#     else:
#         return climb_stairs(n-1)+climb_stairs(n-2)

"""

题目:学生成绩管理系统
编写一个完整的学生成绩管理系统,要求使用函数、条件判断、循环和容器来实现以下功能:
功能要求
学生信息管理
添加学生(学号、姓名)
删除学生
显示所有学生
成绩管理
录入/修改学生成绩(数学、语文、英语)
计算每个学生的平均分和总分
统计各科目平均分
查询分析
按学号查询学生信息和成绩

找出各科目最高分和最低分
数据结构要求

# 使用字典嵌套结构
students = {
    "001": {
        "name": "张三",
        "scores": {
            "math": 85,
            "chinese": 92,
            "english": 78
        }
    }
}

"""


students = {
    "001": {
        "name": "张三",
        "scores": {
            "math": 85,
            "chinese": 92,
            "english": 78
        }
    }
}
# print("001" in students)
def show_menu():
    """显示主菜单"""
    print("\n" + "=" * 30)
    print("    学生成绩管理系统")
    print("=" * 30)
    print("1. 添加学生")
    print("2. 删除学生")
    print("3. 录入/修改成绩")
    print("4. 查询学生信息")
    print("5. 显示所有学生")
    print("6. 统计科目信息")
    print("7. 计算学生平均分")
    print("0. 退出系统")
    print("="*50)

def add_student(students, student_id, name):
    if student_id in students:
        print(f"{student_id}已经存在,无法创建")
        return
    else:
        students[student_id]= {
        "name": name,
        "scores": {
            "math": 0,
            "chinese": 0,
            "english": 0
        }
        }
        print(f"用户{name}添加成功!!!")
        return True


def delete_student(students, student_id):
    """删除学生"""
    if student_id in students:
        name = students[student_id]["name"]
        del students[student_id]
        print(f"{name}用户已经成功删除")
        return True

    else:
        print(f"{student_id}学生不存在")
        return False

# delete_student(students,"001")
def input_scores(students, student_id, ):
    """输入成绩"""
    if student_id in students:
        print(f"请输入用户{students[student_id]["name"]}的数学、语文、英语成绩:")
        math = int(input("math:"))
        chinese = int(input("chinese:"))
        e = int(input("e:"))
        if 0<=math<=120 and 0<=chinese<=120 and 0<=e<=120:
            students[student_id]["scores"]["math"]=math
            students[student_id]["scores"]["english"]=e
            students[student_id]["scores"]["chinese"]=chinese
            print("成绩输入成功")
            return True
        else:
            print("您输入的成绩不正确")
            return False


    else:
        print(f"{student_id}用户不存在")
        return False

def calculate_student_avg(students, student_id):
    """计算学生平均分"""
    if student_id in students:
        total=students[student_id]["scores"]["math"]+students[student_id]["scores"]["chinese"]+students[student_id]["scores"]["english"]
        avg = total/3
        print(f"用户{students[student_id]["name"]}的平均分是{avg}")
        return avg
    else:
        print(f"{student_id}用户不存在")
        return False

calculate_student_avg(students,"001")

def calculate_subject_avg(students, subject):
    """计算科目平均分"""
    pass


def search_student(students, student_id):
    """查询学生信息"""

def main():
    pass

变量:局部变量和全局变量
#全局变量:再函数外部定义的变量全部是全局变量.作用范围是整个程序
#局部变量:函数内部声明的变量,作用域在本函数内部生效
# num1 = 21
#函数内部只有访问全部变量的权限,没有修改的权限
# def a():
#     num1 += 20
#     print(num1)

# 统计函数调用的次数
# a()
num1 = 0
def a():
    global num1   #声明我要修改的是全局变量num1
    num1+=1
    print(num1)
a()
a()
a()
a()
 

#传递的是正数12的内存地址,但是由于整数时不可变的数据类型,所以,函数内部的更改,实际上是开辟了新的内存空间,改变了局部变量中num1的指向而已
#
def fn(num1):
    num1+=12
    print(num1)  #24


num1 = 12
fn(num1)
print(num1) #12

# 12   24


def fx(list1):
    list1.append("666")
    print(list1)   #[1,2,3,"666"]

list1=[1,2,3]
fx(list1)
print(list1)   #[1,2,3]


#不可变的数据类型:整数、字符串、元组
#可变数据类型:列表、集合、字典

#如果函数内部对可变数据类型的参数进行了重新赋值,外部的原对象数据就不会更改
def reassign_list(lst):
    lst = [10, 20, 30]  # 让 lst 指向新列表(原列表不受影响)
    print("函数内的 lst:", lst)

my_list = [1, 2, 3]
reassign_list(my_list)
print("函数外的 my_list:", my_list)  #[1, 2, 3]
 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐