从列表表单转换后,将换行符插入Python字符串很困难

时间:2015-11-12 04:53:55

标签: python string

我正在处理的代码需要输入,并且意味着返回哈希和空格的“阶梯”。例如,如果输入为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)

2 个答案:

答案 0 :(得分:1)

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

  1. 从用户处获取一个号码。
  2. 从1开始,直到用户的号码,包括每个号码。
  3. 在每一行上,打印一定数量的空格,从少于用户编号的空格开始,然后降至零,包括在内。
  4. 在每一行上,还会打印一定数量的哈希符号,从一个开始,一直到用户的号码,包括在内。
  5. 现在你可以把它变成Python。

    首先,从用户那里获取一个号码。看起来您正在使用Python 2,因此您可以使用input()或尝试更安全的raw_input()并将其转换为int()

    num = input()
    

    从一个数字开始,直到用户的数字(包括在内),表示for上的range循环。在Python 2上,使用xrange()是更好的做法。

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

    下一部分将结合步骤3和4,使用字符串乘法和连接。对于空格,我们需要一个等于最大行数减去当前行号的数字。对于哈希符号,我们只需要当前行号。您可以将字符串乘以重复它,例如'hi' * 2 'hihi'。最后,新行自动作为Python 2 print语句中的默认结束字符。

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

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

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

    正如您所发现的,使用复杂的计数器结构,嵌套循环,list操作和切片实现相同的效果更难以调试。当你使它正常工作时问题不会停止 - 这样的代码也难以维护,如果你想修改程序,这是一个痛苦。请查看official Python tutorial,了解一些简洁明了的Python代码。

答案 1 :(得分:-1)

试试这个

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