Python3钻石图案定义

2024-04-24 09:57:35 发布

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

我写下我的代码如下,但是,我的老师说我必须返回模式。我用了print(),对此我不知道。请帮帮我。你知道吗

def diamond(num):

    a = 1
    b = int((num - 1) / 2)
    c = num - 2
    d = 1
    for i in range(0, int((num - 1) / 2)):
        print( " " * b + a * "*")
        a += 2
        b -= 1
    if num % 2 == 1:
        print("*" * num)
        for i in range(0, int((num - 1) / 2)):
            print( " " * d + c * "*")
            c -= 2
            d += 1
    else:
        print("*" * (num - 1))
        print("*" * (num - 1))
        c = num - 3
        for i in range(0, int((num - 1) / 2)):
            print( " " * d + c * "*")
            c -= 2
            d += 1

Tags: 代码inforifdef模式range老师
1条回答
网友
1楼 · 发布于 2024-04-24 09:57:35

我不是故意为你写代码,而是告诉你如何自己解决问题。你知道吗

当前,函数使用多个print()函数调用将行写入控制台。您的老师希望您将这些行作为单个值返回给函数的调用者。你知道吗

你必须克服两个问题:

  1. 必须将所有正在打印的行收集到一个字符串中才能返回。你知道吗
  2. 必须手动添加print()将添加的新行。你知道吗

最简单的方法是使用一个列表,将要打印的每个字符串附加到该列表中。你知道吗

  • 在函数的顶部放置一个新变量,分配一个空列表。像lines这样的名字可能是个好主意。你知道吗
  • 将您现在打印的每一行附加到该列表中。列表类型有一个附加值的方法,您可以用该方法替换所有的print()调用。你知道吗
  • 在函数末尾,使用单个字符串方法将列表中的所有值连接成一个长字符串。指定要放在值之间的字符串,如果使用'\n'字符串,则Python将使用换行符(\...是转义序列,\n生成一个换行符字符)
  • 返回结果的单个字符串。你知道吗

您可以在Built-in Types documentation中找到实现这一点所需的方法。你知道吗

您还可以在顶部使用字符串变量,然后将现在打印的每个字符串连接到该变量,每次添加一个换行符。但是有经验的程序员使用列表来代替,因为对于一个计算机程序来说,这是比较便宜的。将一个字符串连接到另一个字符串需要计算机为结果创建一个全新的副本,因此它必须读取旧字符串的所有字符、连接字符串的所有字符,然后创建所有这些字符的副本以放入新字符串中。然后对连接的下一个字符串执行相同的操作,但现在结果仍然更长。你最终会复制很多这些最初的字符。你知道吗

另一方面,将一个值附加到一个列表并不一定要创建一个副本,然后只需创建一次列表中所有字符串中所有字符的副本即可创建输出。就algorithmic complexity而言,重复连接一个字符串需要O(n**2)时间(对于n字符串,连接需要quadradic时间,再添加一个字符串,时间加倍),而将这些相同的字符串附加到列表只需要O(n)时间(对于n字符串,再添加一个linear时间,再加一个字符串,时间就会成比例增长)。你知道吗

对于六个字符串来说,这种差异并不明显,但是当您的程序必须处理数千行时,事情很快就会失控。在一个循环中连接一千个字符串可能比先将这些相同的字符串添加到一个列表中,然后再将它们连接在一起要花费一千倍的时间。很快就会明白为什么程序员必须关心这些小细节。你知道吗

相关问题 更多 >