问题: 编写一个程序,将棋盘上的位置作为列col和行值行,并检查该位置是否有效。请记住,棋盘中的列是从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
REQUEST:
你能指导我如何解决我的程序吗?
背景:
这项任务的目的是让我回答以下问题:
到目前为止,您的程序使用了两个单独的输入:列和行值。你可以修改你以前的程序(象棋问题,版本3)接受国际象棋棋盘上的位置作为单个输入。换句话说,假设存在可变位置,其存储诸如B5的棋盘的列和行值。当输入中的两个坐标都有效时,例如c4,程序打印消息该块移动到c4 ..如果第一个坐标超出范围,则打印第一个坐标不在ah或AH范围内! ,如果第二个坐标超出范围,则打印第二个坐标不在1到8范围内!
CLOSE:
感谢您的协助。
答案 0 :(得分:3)
问题在于:
col = [A, B, C, D, E, F, G]
您的列表应该包含字符串,因此您需要引用每个字母,就像引用print
语句中的字符串一样。不带引号,它们被视为标识符(用于变量,类,函数等),这就是你最终得出错误的方法。
此外,如Voooza's answer中所述,您需要对输入字符串进行切片/索引(a[0]
获取第一个字母,而a[1]
获取第二个字符,即数字)。通过执行row
将a[1]
或int(a[1])
中的所有数字引用到int中,以便进行比较。
最后,由于您的原始输入变量名为a
,因此您需要使用print
而非a
格式化第一个input
语句。
答案 1 :(得分:2)
col = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
否则它会查找变量A,B,C ......但找不到它们
答案 2 :(得分:0)
你需要引用'A','B'等中的每一个,以便将它们解析为字符串,而不是标识符。
答案 3 :(得分: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.'
最后你需要将输入转换为行中的数字或qoute数字
答案 4 :(得分:-1)
完整程序必须如
col = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
row = [1, 2, 3, 4, 5, 6, 7]
pos=raw_input("you move to:")
try:
x=pos[0] # A1 > A
y=pos[1] # A1 > 1
if (x in col) and (int(y) in row):
print 'The piece is moved to %s' % pos
except:
print 'The position is not valid.'