从列表格式转换后,在Python字符串中插入换行符有困难

2024-03-28 09:38:42 发布

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

我正在处理的代码接受一个输入,并打算返回散列和空格的“阶梯”。例如,如果输入为5,则结果应为:

    #
   ##
  ###
 ####
#####

我已将输入转换为空格和哈希的列表,然后将其转换为字符串形式,以便在与输入长度相对应的每个空格中插入\n(例如,上面每5个字符)。但是,我的代码将结果打印在一行中。我哪里做错了

x = input()
list = []
a = x-1
while a > -1:
    for i in range(0, a):
        list.append(" ")
    for i in range(0, (x-a)):
        list.append("#")
    a = a - 1
    continue

z = str("".join(list))

t = 0
while t<x:
    z = z[t:] + "\n" + z[:t]
    t = t + x
    continue


print str(z)

Tags: 字符串代码in列表forrange形式list
2条回答

从伪代码开始,用清晰的英语仔细地列出你想要程序做什么

  1. 从用户处获取号码
  2. 从1到用户的号码(含1)遍历每个号码
  3. 在每行上,打印一定数量的空格,从比用户数字少一个开始,一直到零(包括零)
  4. 在每一行上,还打印一定数量的散列符号,从一开始,一直到用户的编号,包括在内

现在你可以把它变成Python了

首先,从用户那里得到一个数字。看起来您使用的是python2,因此可以使用input()或尝试更安全的raw_input()并将其转换为int()

num = input()

从一开始遍历每个数字直到用户的数字(包含在内),意味着在range上的for循环。在python2上,使用xrange()是更好的做法

for i in xrange(1, num+1):

下一部分将结合步骤3和4,使用字符串乘法和串联。对于空间,我们需要一个等于最大行数减去当前行数的数。对于散列符号,我们只需要当前行号。可以将字符串相乘以重复它,例如'hi' * 2表示'hihi'。最后,换行符作为python2print语句中的默认结束字符自动处理

    print ' ' * (num-i) + '#' * i

把它们放在一起,看起来是这样的:

num = input()
for i in xrange(1, num+1):
    print ' ' * (num-i) + '#' * i

正如您所发现的,使用复杂的计数器、嵌套循环、list操作和切片结构来实现相同的效果更难调试。当你让它正常工作时,问题也不会停止——这样的代码也很难维护,如果你想修改程序的话,这是一种痛苦。看看official Python tutorial中一些清晰、简洁的Python代码的好例子

试试这个

x = input()
list1 = []
a = x-1
while a > -1:
    for i in range(0, a):
        list1.append(" ")
    for i in range(0, (x-a)):
        list1.append("#")
    a = a - 1
    list1.append("\n")
    continue

z = str("".join(list1))
print z

相关问题 更多 >