NameError: 名称 'A' 未定义

-2 投票
5 回答
15983 浏览
提问于 2025-04-17 01:31

问题:

写一个程序,输入一个国际象棋棋盘上的位置,包括列(用字母表示,从A到H)和行(用数字表示,从1到8),检查这个位置是否合法。比如A3或E7是有效的输入,但a1或L5就不行。如果输入的坐标都有效,比如E2,程序就输出“棋子移动到E2。”,否则就输出“这个位置不合法。”。

我的回答:

a=raw_input("you move to:")
col = [A, B, C, D, E, F, G]
row = [1, 2, 3, 4, 5, 6, 7]
if (a in col) and (a in row):
 print 'The piece is moved to '%s%d   %input
else:
 print 'The position is not valid.'

错误(比如输入D5后出现的错误)

Traceback (most recent call last):
  File "<web session>", line 2, in <module>
NameError: name 'A' is not defined

请求:

你能指导我怎么修正我的程序吗?

背景:

这个任务的目的是让我能够回答接下来的问题:

到目前为止,你的程序使用了两个独立的输入:一个列和一个行的值。你能修改之前的程序(国际象棋问题,版本3),让它接受一个单一的输入来表示棋盘上的位置吗?换句话说,假设有一个变量叫做position,它同时存储棋盘的列和行的值,比如B5。当输入的两个坐标都有效时,比如c4,程序就输出“棋子移动到c4。”如果第一个坐标超出范围,就输出“第一个坐标不在a-h或A-H的范围内!”,如果第二个坐标超出范围,就输出“第二个坐标不在1到8的范围内!”。

结束:

谢谢你的帮助。

5 个回答

0

你需要把字符放在引号里

col = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

而且你需要使用切片

if (a[0] in col) and (a[1] in row):
 print 'The piece is moved to '%s%d   %input
else:
 print 'The position is not valid.'

最后,你需要把输入转换成数字,或者把数字也放在引号里

2
col = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

否则,它会去找变量 A、B、C... 但找不到它们。

3

问题出在这里:

col = [A, B, C, D, E, F, G]

你的列表应该包含字符串,所以你需要把每个字母都加上引号,就像你在 print 语句中给字符串加引号一样。如果不加引号,它们就会被当作变量、类、函数等的名字来处理,这就是你出现错误的原因。

另外,正如 Voooza的回答中提到的,你需要对输入的字符串进行切片或索引(a[0] 可以获取第一个字符,也就是字母,而 a[1] 可以获取第二个字符,也就是数字)。你可以选择给 row 中的所有数字加上引号,或者把 a[1] 转换成整数,方法是用 int(a[1]),这样比较才会有效。

最后,由于你的原始输入变量叫 a,所以你需要在第一个 print 语句中使用 a,而不是 input

撰写回答