0

次のような星でできたボックスに単語を出力するプログラムを作成しています。

************
*          *
* danielle *
*          *
************

ただし、次の出力が得られます。

************
*           
None *
* danielle *
*           
None *
************

と関数を同じ行に出力できないためprint、「なし」の出力が得られ続けることはわかっています。stringどうすればこれを行うことができますか?

私のコードは次のとおりです。

    def star_str(length):
    stars = '*'*length
    print stars

def spaces_str(length):
    spaces = " "*length
    print spaces

def frame_word(input_word):
    length = len(input_word)
    top_bottom_stars = length + 4
    spaces_middle = length + 2

    star_str(top_bottom_stars)
    print '*', spaces_str(spaces_middle), '*'
    print '*', input_word, '*'
    print '*', spaces_str(spaces_middle), '*'

    star_str(top_bottom_stars)

print "Please enter a word:",
input_word = raw_input()
frame_word(input_word)
4

3 に答える 3

3

問題は、print ステートメント内で何かを出力する関数を呼び出していることが原因です。私の提案は、文字列を印刷するのではなく、文字列を取得して返すことspaces_str()ですstar_str()

いっそのこと、それらの機能を完全に排除してください。" " * 40完全に読みやすく慣用的です。関数でラップすると、読みやすさが向上せずに入力する文字が増えるだけです。

于 2012-09-11T04:18:37.813 に答える
0

print の代わりにメソッドの最後に return ステートメントを指定すると、以下の print で適切な結果が得られます

def spaces_str(length):
    spaces = " "*length
    return spaces
print '*', spaces_str(spaces_middle), '*'
于 2012-09-11T04:18:49.903 に答える
-1

return単に出力するのではなく@kindall と文字列を使用しますがprint、末尾のコンマを使用してステートメントの明示的な改行を抑制することも可能であることを指摘します。

def test_print():
    print 'one',
    print 'two',
    print 'three'

test_print()
# one two three 

次に、次のように書くことはできますが、書くべきではありません。

print '*', # suppresses newline
spaces_str() # this prints using something as above
print '*' # asterisk and newline
于 2012-09-11T08:50:22.523 に答える