首页 > 解决方案 > 如何根据变量添加值?

问题描述

所以我有一个任务,我必须创建一个函数来接收一个数字并将该数字分成多行,这些行基本上会比前一个多一个星号(例如,如果我有 5 行)我的打印会看起来像这样:

line 1-*
line 2-**
line 3-***
line 4-****
line 5-*****

所以我的代码 rn 看起来像这样:

def filastotal(n):
    ast = "*"
    for i in range (n):
        ast = ast + "*"
    return ast

cant = int(input("Ingrese la cantidad de filas: "))
total = filastotal(cant)
print(total)

所以我的想法是首先使用一个字符串创建一个星号,然后为 n 中的每个元素再添加一个星号,但是当我运行这个时,我只得到我输入的星号的数量,作为相邻的行。我遇到的另一个问题是我的老师说函数应该只做一件事,并且不应该在做其他事情的函数中读取或打印任何值,所以考虑到这个函数应该接收行数并使其工作那么它不应该在它们里面打印。

例如,如果我输入 5,我会在同一行中获得 5 个彼此相邻的星号,而不是

line 1-*
line 2-**
line 3-***
line 4-****
line 5-*****

我怎样才能解决这个问题?

标签: pythonfunctionvariables

解决方案


弄清楚你的函数应该返回什么类型的值是有帮助的。似乎您可以返回一个可能是字符串的列表。然后你想做的一件事就是接受输入并制作那种类型的东西。

例如,也许我们想要返回一个字符串。考虑到您只想打印值,这是有道理的。该字符串需要为每一行包含一个换行符 ( "\n")。一个很好的方法是使用"\n".join()which 接受一个可迭代的然后连接成一个字符串。这使问题变得非常简洁:

def filastotal(n):
    '''Take an integer n and returns a string with n lines'''
    ast = "*"
    return "\n".join(ast * n for n in range(1, n+1))

cant = int(input("Ingrese la cantidad de filas: "))

total = filastotal(cant)

print(total)

哪个运行:

Ingrese la cantidad de filas: 5
*
**
***
****
*****

注意表达式:ast * n将用nast 字符串创建一个字符串(即"$" * 5'$$$$$')。此外,我们range(1, n+1)在这里使用,因为范围从零开始,不包括最后一个数字。但是什么时候n是 5,我们想要 1 到 5(包括 1 到 5)。


推荐阅读