You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Numpy数组时打印输出类型而非值的问题求助

Numpy数组打印显示<class 'int'>问题修复

我尝试获取用户输入的数值,判断是否为质数后添加至Numpy数组,再通过for循环遍历打印数组。但打印时返回的是<class 'int'>而非数组实际值,仅在使用Numpy时出现该问题。相关代码如下:

from numpy import *
t = array([int]*10)
#Une fonction qui permet de saisir un entier compri entre 4 et 19
def saisir():
    b = True
    while b == True:
        n = int(input("Give the array length: "))
        if(3<=n<=10):
            b = False

    return(n)
#Une fonction qui permet de retourner vrai si un nombre est premier
def Prime(n):
    v = True
    while v == True:
        for i in range(2,n):
            if(n % i ==0):
                v = False
            else:
                return True

#Une procedure qui permet de remplir le tableau t par de entiers premiers
def remplir(t,n):
    for i in range(n):
         k =int(input("Give a number: "))
         if Prime(k):
             append(t,k)

#Une procedure qui permet d'afficher le tableau t
def Printing(t,n):
    for i in range(n):
        print(t[i])


#Une procédure qui permer de trier le tableau t a l'ordre croissant en utilisant le tri a bulle
#

n = saisir()
remplir(t,n)
Printing(t,n)

问题根源分析

  • 数组初始化错误:t = array([int]*10) 创建的是包含10个int类对象的数组,不是整数数值数组,这是打印出<class 'int'>的直接原因。
  • 质数判断逻辑混乱:Prime函数的循环和返回逻辑有问题,比如n=4会被误判为质数,n=2会陷入死循环,根本无法正确识别质数。
  • Numpy append用法错误:Numpy的append不会修改原数组,而是返回新数组,原代码没接收返回值,导致数组从头到尾都是初始的类对象。
  • 填充逻辑无效:就算append用对了,原代码也没按索引填充数组,而是盲目追加,完全达不到预期的填充效果。

修正后的代码

import numpy as np

# 输入数组长度(限定3到10之间)
def saisir():
    while True:
        n = int(input("输入数组长度: "))
        if 3 <= n <= 10:
            return n

# 判断是否为质数
def is_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    # 循环到平方根即可,优化性能
    for i in range(2, int(np.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

# 填充数组为质数
def remplir(n):
    # 初始化指定长度的整数数组,初始值设为0
    t = np.zeros(n, dtype=int)
    for i in range(n):
        while True:
            k = int(input("输入一个数字: "))
            if is_prime(k):
                t[i] = k
                break
            print("这不是质数,请重新输入!")
    return t

# 打印数组
def print_array(t):
    for num in t:
        print(num)

# 主执行逻辑
n = saisir()
t = remplir(n)
print_array(t)

修正说明

  1. 正确初始化数组:用np.zeros(n, dtype=int)创建指定长度的整数数组,从根源避免初始值为类对象的问题。
  2. 修复质数判断:补充边界条件,优化循环范围,确保能准确识别所有质数。
  3. 调整填充逻辑:直接按索引位置赋值,确保数组被正确修改;添加循环直到输入有效质数为止,提升用户体验。
  4. 规范Numpy导入:改用import numpy as np,避免全局导入引发的命名冲突问题。

内容的提问来源于stack exchange,提问作者Mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:40:34