2017-12-24 42 views
0

이, 내가 오류 코드 얻고있다 :이미 파이썬에서 정수 값을 보유하고있는 일부 색인에서 문자열에 문자를 할당하는 방법은 무엇입니까?

4 
1112 
1912 
1892 
1234 

예상 출력 :

내가 문자열

n = int(input()) 
a = [0 for i in range(n)] 

for i in range(n): 
    a[i] = input() 

for i in range(n): 
    if i == 0 or i == (n-1): 
     print(a[i]) 
    else: 

     for j in range(1, n-1): 
      if (int(a[i][j-1] < int(a[i][j]) and int(a[i][j+1]) < int(a[i][j]) and int(a[i-1][j]) < int(a[i][j]) and int(a[i+1][j]) < int(a[i][j])): 
       a[i] = a[i][:j] + 'X' + a[i][j+1:] 
     print(a[i]) 

입력의 값을 변경하려면

a[i] = a[i][:j] + 'X' + a[i][j+1:] 

1112 
1X12 
18X2 
1234 

하지만 점점 오류 :

Traceback (most recent call last): 
    File "CavityMap.py", line 10, in <module> 
    if(int(a[i][j-1])<int(a[i][j]) and int(a[i][j+1])<int(a[i][j]) and int(a[i-1][j])<int(a[i][j]) and int(a[i+1][j])<int(a[i][j])): 
Value Error: invalid literal for int() with base 10: 'X' 
+1

'int (a [i-1] [j])'는 이미'X '를 삽입 한 행으로 되돌아갑니다. – schwobaseggl

+0

하지만 오류가 아닙니다. 처음에 'X'를 삽입하려고하면 오류가 발생합니다. –

+1

예, 그렇습니다. 해당 'X'를 볼 수있는 오류를 발생시키는 정수로 변환하려고합니다. – schwobaseggl

답변

1

문제는 세 번째 라인

1112 
1912 
1892 <- When you are finally here 
1234 

에 한 번, 당신의 예에서 내놓고하는 두 번째 라인은 이미 1X12입니다 것입니다. 당신이 조건 문의 ...and int(a[i-1][j]) < int(a[i][j]) and... 부분은 a[i-1][j]'X' 반환 될 도달 할 때, a[] 지금,

그래서
1112 
1X12 # Take note of the 'X' here. 
1892 
1234 

것 같습니다. 이제 'X'은 리터럴 (알파벳 문자)이기 때문에 int()을 사용하여 정수로 형 변환 할 수 없습니다. 문자를 대표 정수로 변환하려면 ord()을 사용해야합니다 (즉, ord('a')97을 반환 함). 그러나 올바른 결과를 얻지는 못합니다.


내 머리 꼭대기에서 하나의 해결책은 두 개의 배열을 사용하는 것입니다. 첫 번째 배열 (배열 A이라고 함)에는 사용자가 입력 한 모든 값이 포함되며 수정할 수 없습니다. 배열 A은 각 요소의 문자를 비교하는 데 사용됩니다. 두 번째 배열 (배열 B)은 수정 된 값을 포함하는 데 사용됩니다. 즉, 배열 B의 값은 X입니다. 코드는 초기 코드와 비슷하지만 추가 배열을 포함하도록 약간의 변경이있을 것입니다.