NameError: 名称 'A' 未定义
问题:
写一个程序,输入一个国际象棋棋盘上的位置,包括列(用字母表示,从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 个回答
你需要把字符放在引号里
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.'
最后,你需要把输入转换成数字,或者把数字也放在引号里
col = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
否则,它会去找变量 A、B、C... 但找不到它们。
问题出在这里:
col = [A, B, C, D, E, F, G]
你的列表应该包含字符串,所以你需要把每个字母都加上引号,就像你在 print
语句中给字符串加引号一样。如果不加引号,它们就会被当作变量、类、函数等的名字来处理,这就是你出现错误的原因。
另外,正如 Voooza的回答中提到的,你需要对输入的字符串进行切片或索引(a[0]
可以获取第一个字符,也就是字母,而 a[1]
可以获取第二个字符,也就是数字)。你可以选择给 row
中的所有数字加上引号,或者把 a[1]
转换成整数,方法是用 int(a[1])
,这样比较才会有效。
最后,由于你的原始输入变量叫 a
,所以你需要在第一个 print
语句中使用 a
,而不是 input
。