2011-09-05 3 views
-2

질문 : 체스 판에서 위치를 열 col 및 행 값 행으로 사용하고 위치의 유효성을 검사하는 프로그램을 작성하십시오. 체스 판의 기둥은 A에서 H (범위 포함) 범위의 문자이며 행은 1에서 8 사이의 숫자임을 기억하십시오. A3 또는 E7은 유효한 입력이지만 a1 또는 L5는 유효하지 않습니다. E2와 같이 두 좌표가 모두 유효하면 프로그램은 '조각이 E2로 이동되었습니다.'를 인쇄하고, 그렇지 않으면 '위치가 유효하지 않습니다.'라는 메시지를 인쇄합니다.NameError : name 'A'가 정의되지 않았습니다.

MY ANSWER : (D5 같은 값에 연결 후)

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.' 

ERROR

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

요청 :

당신이 직접 할 수 있습니까 내 프로그램을 수정하는 방법에?

CONTEXT :

이 작업의 목적은 다음과 같은 질문에 대답하기 위해 저를 설정하는 것입니다 :

지금까지, 당신의 프로그램이 두 개의 입력을 사용을 : 열 및 행 값입니다. 이전 프로그램 (체스 문제, 버전 3)을 수정하여 체스 보드상의 위치를 ​​단일 입력으로 허용 할 수 있습니까? 즉, B5와 같은 체스 판의 열과 행 값을 모두 저장하는 가변 위치가 있다고 가정합니다. 입력의 두 좌표 (예 : c4)가 모두 유효하면 프로그램은 c4로 이동합니다. 첫 번째 좌표가 범위를 벗어난 경우 첫 번째 좌표가 범위 ah 또는 AH에 있지 않습니다! , 두 번째 좌표가 범위를 벗어난 경우 print 두 번째 좌표가 1에서 8 사이의 범위에 있지 않습니다.

닫기 :

감사합니다.

답변

3

문제는 여기에 있습니다 :

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

귀하의 목록에이 문자열을 포함하는데, 그래서 당신은 당신이 당신의 print 문에서 문자열을 인용하는 방법처럼 각 문자를 인용 할 필요가있다. 따옴표로 묶지 않고 식별자 (변수, 클래스, 함수 등)로 취급하고 있으며 오류로 끝나는 방법입니다. Voooza's answer에서 언급 한 바와 같이

는 또한, 당신은 (a[0]는 문자의 첫 번째 문자를 가져오고 a[1]이 번호 두 번째 문자를 가져옵니다)/인덱스를 입력 문자열을 슬라이스해야합니다. row에있는 모든 숫자를 인용하거나 비교를 위해 int(a[1])을 수행하여 a[1]을 int로 캐스팅하십시오.

원시 입력 변수가 a라고되어 있기 때문에

마지막으로, 당신은 a하지 input를 사용하여 첫 번째 print 문을 포맷해야 .

+0

그가 이것을 고치더라도 그의 비교는 여전히 효과가 없을 것입니다. – agf

+0

@agf : 음, 그래 ... 잠시 후 내 대답에 추가 할 것입니다. – BoltClock

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

은 그렇지 않으면 변수 A, B, C를 찾습니다 ... 그리고 그들이 있도록, 등 'A', 'B', 각각을 인용 할 필요가 그들에게

+0

코드 블록이 문제를 지적하기보다는 해결책을 제시하기 때문에 나는이 대답을 더 좋아합니다. @ BoltClock은 정확하지만 자신의 솔루션에서 파악하는 데 더 많은 노력이 필요합니다. –

+2

@Carl F .: 숙제 문제 였기 때문에 해결책을 제시하고 싶지 않았습니다. 어느 쪽이든 ... – BoltClock

+0

좋은 지적입니다. 숙제에 대한 다른 스타일의 대답이 있어야합니다. 감사. –

0

을 찾을 수 없습니다 식별자가 아닌 문자열로 구문 분석됩니다.

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 번호를 입력 캐스팅뿐만 아니라

+0

+1하지만 'H'와 '8'을 포함해야한다는 사실을 놓쳤습니다. – agf

+0

사실이 아니기 때문에 OP는 그것을 놓쳤습니다 – steabert

-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.' 
+0

두 번째 글자 또는 숫자가 큰 글자는 유효하지 않은 것으로 계산하지 않습니다. '! 593utewjvkns.'는 메세지를 출력하지 않지만 유효하지 않은 메세지는 찾지 않습니다. – agf

+0

-1 나는 OP가 이것으로부터 전혀 배울 생각이 없기 때문에, 그가 생각해 낸 것과는 너무 거리가 멀고 그가 한 일에 무엇이 잘못되었는지 설명하지 않는다. – steabert

관련 문제