python创建numpy数组,进行索引

创建两个 numpy 数组,其中 arr 1 中存储学生姓名,arr2 中存储学生数学、语文、英语的
成绩,使用索引输出第二个学生的英语成绩和第四个学生三门课程的平均分。

望采纳,谢谢,代码:

import numpy as np

studenttype = np.dtype({'names': ['name', 'math', 'chinese','english'],
                           'formats': ['S32', 'int', 'int', 'int']})
students = np.array([('zhangsan', 21, 78, 79), ('lisi', 19, 90, 79),
                    ('wangwu', 22, 98, 70),('zhaoliu', 50, 100, 70)],
                    dtype=studenttype)

print(f"第二个学生的姓名是{students[1]['name']}")
print(f"第四个同学的全部成绩平均分是{np.mean((students[3]['math'],students[3]['chinese'],students[3]['english']))}")

因为要用numpy数组,所以要import numpy导入numpy库。
随后,创建arr1和arr2:

arr1=numpy.empty(1001,dtype=str)      # 生成长度为1001的str型数组
arr2=numpy.empty([1001,3])            # 生成1001×3的float型数组(numpy数组默认类型就是float,所以不需要dtype参数)

其中arr2开成1001×3是为了存储数学、语文、英语3科的成绩。
接下来提示用户输入数据:

n=input("请输入学生人数:")
while not n.isdigit() or int(n)<=0:      # n.isdigit()用于判断n是否可以转成int类型
    print("请输入正整数")
    n=input("请输入学生人数:")
while int(n)>1000:
    print("学生人数过多")
    n=input("请输入学生人数:")
n=int(n)

根据学生人数,逐一输入数据:

def f(name):
    try:
        global a,b,c
        a,b,c=input("请输入"+name+"的数学、英语、语文成绩,用空格隔开:").split()
        a=float(a)
        b=float(b)
        c=float(c)
    except ValueError:
        print("请输入三个浮点数")
        f(name)

for i in range(1,n+1):                                # 为了方便稍后取出数据,从1到n存(也是为了方便提示用户)
    arr1[i]=input("请输入第"+i+"名学生的姓名:")
    f(arr1[i])
    arr2[i,0]=a
    arr2[i,1]=b
    arr2[i,2]=c

上面判断a,b,c是否可以转成float类型需要一些与异常有关的知识。try会尝试执行其下方的代码,若出现了except中给出的错误类型,则不报错,而是执行程序员指定的代码。若未发现指定的异常,则继续执行try语句外的代码。函数f(name)中还用到了递归的思想,即函数调用自身。
接下来是代码最核心的部分——数据处理与输出:

print(arr2[2,2])                           # 打印第2名学生的英语成绩,注意科目的下标从0开始
print((arr2[4,0]+arr2[4,1]+arr2[4,2])/3)   # 打印第4名学生的三科平均分                  

我的解答到此结束,谢谢您的观看!