我正在编写一个程序,应该在由这样的星星组成的框中打印一个单词:
************
* *
* 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)
答案 0 :(得分:3)
您的问题是由于您正在调用在print语句中打印内容的函数。我的建议是让spaces_str()
和star_str()
返回字符串而不是打印它。
更好的是,完全消除这些功能。 " " * 40
是完全可读和惯用的;将它包装在一个函数中只需键入更多字符而不增加可读性。
答案 1 :(得分:0)
在方法结束时给出一个return语句而不是print,现在你的下面的print会产生正确的结果
def spaces_str(length):
spaces = " "*length
return spaces
print '*', spaces_str(spaces_middle), '*'
答案 2 :(得分:0)
我会使用@kindall和return
字符串而不是打印它,但也会指出可以使用尾随逗号来抑制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