So I'm wondering if this is possible. So, what I need to happen is to make my function return a string. Now the tricky part is that my function prints out a fancy pattern and I'm not sure how I can return my pattern as a string? I don't want it to actually print anything before I use the function in something like:
my_function(c,r)
x = 4
y = 5
a = my_function(x,y)
print(a)
Output:
*nothing here blank space*
*pattern printed*
Here is my code for the function 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)
If I call the function as is, it will print everything. But I don't want it to print. I tried replacing all the print by return but it prints only the first line(which was not unexpected, since return will just terminate the function at line 1).
解决方案
Gather the values to return into one list, build a string at the end of your function to return:
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)
This includes the same newlines the print() function would write between each line.
Demo:
>>> print(my_function(4, 5))
****
* *
* *
* *
****