numpy.ndarray 'объект не имеет атрибута' добавить

Aug 19 2020
import numpy as np

Student1= [1,2]
test11= np.array([])
np.clip(0,1,20)
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
for i in range(NOF):
    data=int(input())
    test11.append(data)
total=0
for value in test11:
    total=total+value
print("The sum of all", total)

СПИСОК ВЕРСИИ

import numpy as np

Student1= [1,2]
test11= []
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
for i in range(NOF):
    data=int(input())
    test11.append(data)
total=0
for value in test11:
    total=total+value
print("The sum of all", total)

Это продолжает вызывать ошибку у объекта numpy.ndarray нет атрибута append. Я хочу иметь возможность добавлять пользовательские данные в массив test11. Прекрасно работает, не делая test11 массивом numpy. Но я хочу иметь возможность ограничить размер числа до 20. Есть идеи? Пожалуйста, сделайте это просто.

КОД ОШИБКИ: Отслеживание (последний вызов последний): строка 10, в test11.append (данные) AttributeError: объект 'numpy.ndarray' не имеет атрибута 'append'

Ответы

1 ThreePoint14 Aug 19 2020 at 06:50

Это работает. Я снова изменил несколько строк и выделил их.

import numpy as np

Student1= [1,2]
test11= np.array([0])
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
data = None
while data is None:  # Remove this if you want the program to end if an error occurres.
    for i in range(NOF):
        try:  # Be sure the input is a int.
            data=np.array([int(input())])
            if data > 20:  # Be sure the input is <= 20.
                data = None  # If greater then 20. Turn data into None
                test11 = np.array([0])  # Empty the array.
                print("Error")
                break  # Then break out of the loop
            test11 = np.append(data, test11)
        except ValueError:
            data = None  # If it is not a int, data will trun into None
            test11 = np.array([0])  # Empty the array.
            print("Error")
            break

if data is not None:  # If data is not None then find the sum.
    total=0
    for value in test11:
        total = test11.sum()  # Use the sum fuction, though  total=total+value  will also work.
    print("The sum of all", total)

Версия списка.

# import numpy as np

Student1= [1,2]
test11= []
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
data = None  # Assign ahead of time.
while data is None:  # Remove this if you want the program to end if an 
error occurres.
    for i in range(NOF):
        try:  # Be sure the input is a int.
            data=int(input())
            if data > 20:  # Be sure the input is <= 20.
                data = None  # If greater then 20. Turn data into None
                test11.clear()  # Clear the list if an error occurres.
                print("Error")
                break  # Then break out of the loop
            test11.append(data)
        except ValueError:
            data = None  # If it is not a int, data will trun into None
            test11.clear()  # Clear the list if an error occurres.
            print("Error")
            break

if data is not None:  # If data is not None then find the sum.
    total=0
    for value in test11:
        total=total+value
    print("The sum of all", total)

Это настолько сжато, насколько я мог сделать, без изменения всего этого и сохраняя его похожим на то, с чего вы начали.

Теперь пользователь не может использовать число больше 20 или любые буквы, иначе появится ошибка.

JoãoVitorBarbosa Aug 19 2020 at 06:22

Массивы Numpy не имеют метода добавления, они должны быть созданы с нужной формой и длиной. Итак, в вашем случае лучшим способом было бы составить список, добавить значения, а затем создать массив:

import numpy as np 
Student1= [1,2] 
test11= []
np.clip(0,1,20) 
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ") 
for i in range(NOF): 
    data=int(input()) 
    test11.append(data)

test11 = np.array(test11)
Ehsan Aug 19 2020 at 06:24

Вы можете заменить строку на np.append:

np.append(test11,data)

Но добавление в массив numpy дороже, чем добавление в список. Я бы предложил использовать listструктуру appendи в конце преобразовать ваш список в массив numpy, используяnp.array

Вот версия списка:

import numpy as np

Student1= [1,2]
test11= []
np.clip(0,1,20)
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
for i in range(NOF):
    data=int(input())
    test11.append(data)
test11 = np.array(test11)
total = test11.sum()
print("The sum of all", total)