2017-10-03 16 views
-2

3.6はここにいてくれてありがとう。は、Pythonの「複雑な」トリングを印刷する方法

私は "チックつま先 - - TAC" 印刷しようとしている私のベクトルは、ボードが

[ | | x ] 
[ | o | ] 
[ | x | ] 
なります

b = [0 0 1 0 2 0 0 1 0] 

であれば、ベクトルを使用してボードをこの

のようなものを

別の例、私のベクトルが

b = [0 0 0 0 2 1 0 0 2] 

ボードはそれがもしB [I] = 0、Bの場合、私は、空間であろう位置に基板を意味

[ | | ] 
[ | x | o ] 
[ | | x ] 

あろう[I] = 1、ボードiは意志位置で"x"であり、b [i] = 2の場合、位置iのボードは "o"になります。私はこのコード

def printboard(board): 
    a = " " 
    for i in range(0,8): 
     if board[i] == 0: 
      a = a + " " 
     elif board[i] == 1: 
      a = a + "x" 
     elif board[i] == 2: 
      a = a + "o" 
    print(a[1] + "|" + a[2] + "|" + a[3] 
      %"---+---|---" 
      %a[4] + "|" + a[5] + "|" + a[6] 
      %"---+---|---" 
      %a[7] + "|" + a[8] + "|" + a[9]) 
    return 0 

board=np.array([0 ,0 ,1 ,0 ,2 ,0 ,0 ,1 ,0]) 
printboard(board) 

で試してみたが、それは動作しません

[ 1 | 2 | 3 ] 
[ 4 | 5 | 6 ] 
[ 7 | 8 | 9 ] 

"ベース" ボードです。

私の問題は "印刷"ですが、私はそれを正しく行う方法がわかりませんし、 "|"、 " - "、 "+"で区切られたボードの要素は、 "私が試みたのと同じように。

私は本当に誰かが私を助けることができると思います。 (Y)3Sに

+0

「トーリング」とは何ですか? –

+0

そしてベクターとは何ですか? –

答えて

1

私は推測しますこれはあなたが望む通りです

def printboard(board): 
    a = [] 
    for i in range(0,9): 
     if board[i] == 0: 
      a = a + [" "] 
     elif board[i] == 1: 
      a = a + [" x "] 
     elif board[i] == 2: 
      a = a + [" o "] 
    print(a[0] + '|' + a[1] + '|' + a[2] 
      +'\n---|---|---' 
      +'\n'+a[3] + "|" + a[4] + '|' + a[5] 
      +"\n---|---|---" 
      +'\n'+a[6] + '|' + a[7] + '|' + a[8]) 
    return 0 

board=np.array([0 ,0 ,1 ,0 ,2 ,0 ,0 ,1 ,0]) 
printboard(board) 

すべての行に改行がありませんでした。また、a文字列があなたのprintコールが実際にかなり台無しである配列

0

スプリット配列どうもありがとうとそれぞれの文字を0、1、2を交換することにより、各サブ配列から文字列を構築する:

def print_board(lst): 
    for i in range(0, len(lst), 3): 
     print('[ ' + ' | '.join([(' ', 'o', 'x')[x] for x in lst[i:i+3]]) + ' ]') 

b = [0, 0, 0, 0, 2, 1, 0, 0, 2]  
print_board(b) 

[ | | ] 
[ | x | o ] 
[ | | x ] 
0

に交換する必要があります。主な問題は、あなたがランダムに+を使用していくつかの時間と他の回の%を使用していることのようです。文字列を連結する場合は、+のみが動作します。 %演算子は文字列で使用することができますが、それは(この問題のためのオプションではなく、あなたがこれまでにそれを設定した方法かもしれない)文字列フォーマットの異なる並べ替えを行います。印刷している文字列の中に改行を含めないので、おそらくそれらを追加することになります。

私はあなたがこのいずれかであなたのprintコールを交換する場合、それが動作すると思います:

print(a[1] + "|" + a[2] + "|" + a[3] 
     + "\n---+---+---\n" 
     + a[4] + "|" + a[5] + "|" + a[6] 
     + "\n---+---+---\n" 
     + a[7] + "|" + a[8] + "|" + a[9]) 

あなたはまた、(あなたのための出力の一部を処理するためにprint機能のいくつかの機能を使用することができます改行として。

print(a[1] + "|" + a[2] + "|" + a[3], 
     "---+---+---", 
     a[4] + "|" + a[5] + "|" + a[6], 
     "---+---+---", 
     a[7] + "|" + a[8] + "|" + a[9], 
     sep="\n") 

注両方であること:代わりにあなたが別の引数としてprintに別々の部品を渡すだろう、とあなたが最後にsepキーワードパラメータを追加したい、単一出力文字列を構築するために、すべてのコンポーネントの文字列を連結しますこれらの例では、+|ではなく、2つの+を使用するように水平線を固定しました。

0

dictionarymapの値をシンボルに使用し、次にnumpyを使用してリストをNxN matrixに変換することができます。

import numpy as np 
keymap = {0 : '|' , 1 : 'x', 2: 'o'} 
b = [0, 0, 1, 0, 2, 0, 0, 1, 0] 
a = np.array([keymap[x] for x in b]).reshape((3,3,)) 

>>> for i in a: 
    print('[ ' + ' '.join(i) + ' ]') 


[ | | x ] 
[ | o | ] 
[ | x | ] 
0

ここでは、zipとjoinを使用したインタラクティブなデモンストレーションがあります。

>>> b = '0 0 1 0 2 0 0 1 0'.split(' ') 
>>> c = [" xo"[int(e)] for e in b] 
>>> d = ['[','|','|',']\n[','|','|',']\n[','|','|',']'] 
>>> print("".join(["".join(e) for e in zip(d, c+['\n'])])) 
[ | |x] 
[ |o| ] 
[ |x| ] 

Try it online!

1

ここでは別のアプローチです:

import more_itertools 

def print_board(my_list): 

    for x in more_itertools.sliced([' ' if x == 0 else 'x' if x == 1 else 'o' for x in my_list], 3): 
     print('[ ' + ' | '.join(x) + ' ]') 

>>> print_board([0,0,1,0,2,0,0,1,0]) 

[ | | x ] 
[ | o | ] 
[ | x | ] 

@EDIT:さらに長い行が好きですか?確かに問題はありません:

print('\n'.join('[ ' + ' | '.join(x) + ' ]' for x in __import__('more_itertools').sliced([' ' if x == 0 else 'x' if x == 1 else 'o' for x in my_list], 3))) 
+0

Woah、 'more_itertools'パッケージ!確かにそれをチェックするつもり、常により多くのitertools関数が欲しかった:Pそのために、upvoteに値する! – abccd

+0

@abccd:それを確かめる価値がある:) – mentalita

関連する問題