所以我想知道这是否可行。所以,我需要做的是让我的函数返回一个字符串。现在棘手的部分是我的功能打印出一个奇特的模式,我不知道如何将我的模式作为字符串返回?在我使用函数之前,我不希望它实际打印任何内容:
my_function(c,r)
x = 4
y = 5
a = my_function(x,y)
print(a)
输出:
*nothing here blank space*
*pattern printed*
这是函数my_function的代码:
def my_function(c, r):
if(c > 0 and r > 0):
print("*" * c)
for i in range(r - 2):
if(c == 1):
print("*")
elif(c > 1):
print("*" + " " * (c - 2) + "*")
if(r > 1):
print("*" * c)
如果我按原样调用该功能,它将打印所有内容。但我不想让它打印出来。我尝试通过返回替换所有打印,但它只打印第一行(这不是意料之外的,因为返回只会在第1行终止该函数)。
答案 0 :(得分:4)
收集值以返回到一个列表中,在函数末尾构建一个字符串以返回:
def my_function(c, r):
lines = []
if c and r:
lines.append("*" * c)
for i in range(r - 2):
if c == 1:
lines.append("*")
else:
lines.append("*" + " " * (c - 2) + "*")
if r > 1:
lines.append("*" * c)
return '\n'.join(lines)
这包括print()
函数在每行之间写入的相同换行符。
演示:
>>> print(my_function(4, 5))
****
* *
* *
* *
****
答案 1 :(得分:1)
有意义的名字也非常有用!
编辑:还:捕获意外情况(如宽度< 2 * border)和代码重用(将重复代码委托给子函数)。
def _box_section(width, border, outside, inside):
if width <= 2 * border:
# inside is occluded
return outside * width
else:
return (
outside * border
+ inside * (width - 2 * border)
+ outside * border
)
def make_box(width, height, border=1, outside="*", inside=" "):
top_row = outside * width
mid_row = _box_section(width, border, outside, inside)
box_rows = _box_section(height, border, [top_row], [mid_row])
return "\n".join(box_rows)
print(make_box(4, 3, outside="#"))
print("")
print(make_box(8, 6, border=2, inside="."))
给出
####
# #
####
********
********
**....**
**....**
********
********
答案 2 :(得分:0)
以下是无关的示例,说明如何实现这一目标:
def foo(bar):
barz = bar
a = 2
c = 'c'
d = 5.0
return (barz,a,c,d)
>>> result = foo(5)
>>> print result[0]
5
>>> print result[2]
c
>>> print result
[5,2,'c',5.0]
答案 3 :(得分:0)
您可以将所有字符串收集到列表中,然后打印该列表的内容。但是我认为这是编写generator
函数的一个很好的练习:
def get_rectangle(c, r):
if(c > 0 and r > 0):
yield "*" * c
for i in range(r - 2):
if(c == 1):
yield "*"
elif(c > 1):
yield "*" + " " * (c - 2) + "*"
if(r > 1):
yield "*" * c
for c in get_rectangle(c, r):
print c
DEMO:
In [5]: for i in get_rectangle(4, 5):
...: print i
...:
****
* *
* *
* *
****
使用生成器打印盒子的另一种更简洁的方法..
In [9]: print("\n".join(get_rectangle(4, 5)))
****
* *
* *
* *
****