1

このコードの目的は、文字列を取得して特定の形式で出力することです。たとえば、次のようになります。

s = "Hello"

プログラムは次のように出力します。

+---+---+---+---+---+
| H | e | l | l | o |
+---+---+---+---+---+

文字列のサイズがコンソールの列のサイズよりも大きい場合、次の形式で文字列を出力することになっています。

+---+---+---+---+---+
| H | e | l | l | o |
+---+---+---+---+---+
| H | e | l | l | o |
+---+---+---+---+---+
| H | e | l | l | o |
+---+---+---+---+---+
| H | e | l | l | o |
+---+---+---+---+---+

残念ながら、2 番目の条件は機能せず、その理由がわかりません。

これが私のコードです:

import os

s = "Hello"*20
(consoleRows,consoleCol)=os.popen('stty size','r').read().split()
top = outer = "+---"*len(s)+'+'+'\n'
for i in range(len(s)):
    outer += "| "+s[i]+" "

outer += '|\n'
outer += top[:len(top)-1]

split = outer.split('\n')
if(len(split[0]) > consoleCol): #problem lies on this line. Even though the size of  
    outer = outer.split('\n') #split[0] is greater than consoleCol the if statement  
    beg = 0   #isn't entered.                                                        
    size = consoleCol
    print(outer[0][beg:size])
    while(size < len(outer[0])):
        print(outer[1][beg:size]);
        print(outer[2][beg:size]);
        beg = size
        size += size
else:
    print(outer)

誰が私の問題が何であるかを見ることができますか? outer[0] と consoleCol のサイズを出力しました。len(output[0]) が consoleCol より大きい。

4

2 に答える 2

2

まず第一に、私はパイソン派ではありません。そうは言っても、ロジックをレイアウトから分離することをお勧めします。メソッドdrawHorizontalLinedrawContentLine(Char[5])および を作成しますChar[5][] splitContent(String)。その後のデバッグは簡単です。

于 2013-02-09T08:07:15.337 に答える
2

コードのバグ: consoleCol は文字列であり、整数ではありません。

(consoleRows,consoleCol)=os.popen('stty size','r').read().split()と 置き換えます(consoleRows,consoleCol)=map(int, os.popen('stty size','r').read().split())

これでもまだ望ましい結果は得られません。あとは自分で調べて、その過程でコードをクリーンアップする必要があります。

于 2013-02-09T09:29:43.517 に答える