Python:如何编写一个函数来打印“高度”行,每个行都有“sym”重复的“长度”次数?

2024-10-01 05:00:59 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的作品。我以前做过printline函数,这个问题需要调用上面的函数printline来打印每一行。我试着打印3行,每行有4个符号,但我只能得到2行,每行有12个符号。有人能帮我更正代码吗

def printline(num,sym):
    for i in range(num):
        a = (num*sym)
    return a
a = printline(5,'*')
print(a)

def printrectangle(num,height,sym):
    for i in range(height):
        a = printline(num,sym)*height
        print(a)
        return a
c = printrectangle(3,4,'*')
print(c)

Tags: 函数代码inforreturndef符号range
2条回答

这里有几件事:

  1. printline函数可以工作,但会使问题过于复杂

在其他编程语言中,为了将同一字符串重复多次,通常会创建以下形式的循环:

String s = "";
for(int i = 0; i < num; i++)
   s += sym;
return s;

由于这相当于将相同的字符串num连接几次,因此在python中有一种更简单的方法:

s = sym*num

您的解决方案之所以有效,是因为在返回变量a之前,您正在覆盖变量中的值num

  1. 您误解了您的测试用例

你说printrectangle(3, 4, '*')应该用4个符号打印3行。但是正如您所写的,第一个变量num=3,第二个变量height=4。 这里的输出实际上是:

***
***
***
***

您的代码目前还没有做到这一点,但我们不要走在前面

  1. 压痕误差

printrectangle函数中的return语句位于循环内。这意味着在循环的第一次迭代期间,函数将返回一个值。 轻松修复,只需退格,直到返回的缩进与循环的缩进对齐

  1. 实际解决问题

从第1部分开始,我在这里介绍了在python中,要多次连接同一个字符串,只需将该字符串乘以希望它显示的次数即可

在这里,我们希望字符串printline(num, sym)在每次之后都显示height次,并使用enter键

回车键发送\n命令。换句话说,诸如'a\nb'之类的字符串被打印为:

a
b

出于我们的目的,我们可以先将字符串printline(num, sym)\n连接起来,然后将结果字符串乘以height得到printrectangle(num, height, sym)的结果

def printrectangle(num, height, sym):
    a = (printline(num, sym)+'\n')*height
    return a

虽然这段代码将提供您所需要的内容,但我仍然怀疑您是否错误地交换了调用printrectangle(3,4,'*')本身中的numheight

def printline(h,sym):
    a = h*sym # removed unnessary loop
    return a

def printrectangle(num,height,sym):
    for i in range(num): # swap height with num in your code
        a = printline(height,sym) #swap num with height in your code
        yield a

for row in printrectangle(3,4,'*'):
    print(row)

相关问题 更多 >