2017-12-24 46 views
0

これは、私はエラーをコード取得していますされていますすでにPythonで整数値を保持しているインデックスで文字を文字列に割り当てる方法は?

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]) 

INPUTの値を変更したい

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

しても問題はあなたが3行目にあるいったん

1112 
1912 
1892 <- When you are finally here 
1234 

、あなたの例から基づか二行目はすでに1X12である、ということです。だから、a[]は今ので

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

のように見えますが、条件文の...and int(a[i-1][j]) < int(a[i][j]) and...一部に到達したときに、a[i-1][j]'X'を返すことになります。現在、'X'はリテラル(アルファベット文字)なので、int()を使用して整数に型キャストすることはできません。文字をその代表的な整数に変換するにはord()を使用する必要があります(つまり、ord('a')97を返します)が、適切な結果を得られません。


これを解決するには、2つの配列を使用することが1つの解決策です。最初の配列(配列Aと呼ぶ)には、ユーザーが入力したすべての値が含まれ、変更されません。配列Aは、各要素の文字を比較するために使用されます。 2番目の配列(配列B)は、変更された値を格納するために使用されます。つまり、配列Bの値はXです。コードは初期コードと似ていますが、追加の配列を含めるためにいくつかの変更が加えられています。

n = int(input()) 
a = [0 for i in range(n)] # This array will not be modified nor printed. This 
          # will be used for comparisons only. 
b = [0 for i in range(n)] # This array will be used to store the modified values and 
          # be the one printed instead. 

for i in range(n): 
    a[i] = input() 
    b[i] = a[i] # Here, we're duplicating the values from a[] to b[]. 

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])): 
       b[i] = a[i][:j] + 'X' + a[i][j + 1:] 
     print(b[i]) 
関連する問題