NameError name ‘append’ is not defined
import numpy

    
A = numpy.array(append(list(map(int, input().split()))))   
B = numpy.array(append(list(map(int, input().split()))))

print( numpy.inner(A, B) )
print( numpy.outer(A, B) )

这段代码原本想做什么

你这次是想把输入的一行数字直接变成 numpy.array,然后再去做:

  • numpy.inner(A, B) 内积
  • numpy.outer(A, B) 外积

这个目标是对的,而且你也已经知道要先 import numpy,这一步比上次前进了。

但是这次新的报错,不是在 innerouter 上,而是在你构造数组 AB 的时候就出错了。


问题定位

核心问题在这两行:

A = numpy.array(append(list(map(int, input().split()))))   
B = numpy.array(append(list(map(int, input().split()))))

这是什么类型的问题

这是一个函数使用错误 / NameError 类问题

你这里写了 append(...),但 append 不是一个可以单独这样调用的全局函数。


为什么会错

先说结论

你这里最可能出现的完整报错是:

NameError: name 'append' is not defined

也就是说:

Python 会问你:“append 是谁?我根本不认识这个名字。”


为什么 Python 不认识 append

因为 append 不是独立函数,它是列表的方法

也就是说,正确的用法是:

some_list.append(x)

而不是:

append(x)

你这里为什么会想到写 append

你前面做二维数组题的时候,常见写法是:

A = []
A.append(list(map(int, input().split())))

这是对的,因为意思是:

  1. 先准备一个空列表 A
  2. 把读到的一整行数据追加进去

但你这道题不是那种“多行组成矩阵”的输入,而是:

  • 第一行就是数组 A
  • 第二行就是数组 B

所以这里根本不需要 append

你只需要直接把这一行读进来就可以了。


这题真正需要的数据结构

题目要的是两个一维数组

例如输入:

0 1
2 3

应该理解成:

A = [0, 1]
B = [2, 3]

而不是:

A = [[0, 1]]
B = [[2, 3]]

更不是去额外调用什么 append(...) 包一层。


最小改动修复版本

在你现在这份代码的基础上,最小改动就是:append 去掉

import numpy

A = numpy.array(list(map(int, input().split())))
B = numpy.array(list(map(int, input().split())))

print(numpy.inner(A, B))
print(numpy.outer(A, B))

修改说明

你这次只需要改一个关键点:

原来

numpy.array(append(list(map(int, input().split()))))

改成

numpy.array(list(map(int, input().split())))

因为这里你已经拿到一整行数字了:

list(map(int, input().split()))

它本身就是一个列表,比如:

[0, 1]

再放进:

numpy.array(...)

就已经能变成 NumPy 数组了。

这里完全不需要 append


你可以把这一行拆开理解

这一句:

A = numpy.array(list(map(int, input().split())))

可以拆成 4 步来看:

第 1 步:读入一整行字符串

input()

如果你输入:

0 1

那么它读到的是字符串:

"0 1"

第 2 步:按空格切开

input().split()

变成:

['0', '1']

注意,这时候还是字符串,不是整数。


第 3 步:逐个转成整数

map(int, input().split())

相当于把 '0' 变成 0,把 '1' 变成 1


第 4 步:转成列表,再转成 NumPy 数组

list(map(...))

得到:

[0, 1]

再执行:

numpy.array([0, 1])

得到 NumPy 数组。


更规范版本

更适合初学者复习的写法,是先分步写,不要一行套太多层:

import numpy

a_list = list(map(int, input().split()))
b_list = list(map(int, input().split()))

A = numpy.array(a_list)
B = numpy.array(b_list)

print(numpy.inner(A, B))
print(numpy.outer(A, B))

这个版本更长一点,但更容易看清楚每一步在干什么。

对于初学者来说,这种写法往往更稳。


你这次的错误模式是什么

你这次其实暴露了一个很典型的初学者问题:

把“列表方法”误当成“普通函数”

你记住这个区别就行:

写法含义
A.append(x)往列表 A 里追加一个元素
append(x)错,Python 不知道你说的是谁的 append

所以以后只要看到 append,就立刻提醒自己一句:

append 前面必须有一个列表变量。

比如:

nums = []
nums.append(5)

这才对。


如何避免下次再错

记住 3 条:

1. 这题是一维数组输入,不用 append

只要题目是“每行一个数组”,通常直接:

list(map(int, input().split()))

就够了。


2. append 必须跟在列表后面

对:

A.append(x)

错:

append(x)

3. 遇到一层套一层的代码,先拆开写

比如你可以先写成:

row = list(map(int, input().split()))
A = numpy.array(row)

这样更不容易写乱。


给你一个很小的同类练习

你先自己试一下这题,不要直接往下找答案。

题目

输入:

1 2
3 4

请你写代码,输出:

  • A
  • B
  • numpy.inner(A, B)

提示

你只需要写出:

  1. 读取第一行变成数组 A
  2. 读取第二行变成数组 B
  3. 打印内积

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇