【问题标题】:How can I multiply spaces in a string by the for-loop iterator?如何通过 for 循环迭代器将字符串中的空格相乘?
【发布时间】:2019-02-13 23:10:15
【问题描述】:

我正在尝试运行一个 for 循环,每次迭代时都会添加一个空格,以便文本形成对角线,但我找不到迭代器的整数值

我尝试了以下方法:

for x in string:
    print(" "*x+x)

但这会引发错误,因为 x 是字符串,而不是数字。我也试过:

for x in string:
    print(" "*string.find(x)+x)

但是当字符串中的字符重复时,您当然会得到该字符的第一个实例的空格数。

是否可以访问迭代器的实际整数值,以便我可以乘以空格?

我尝试过的代码解决方案

for x in string:
    print(" "*x+x)

for x in string:
    print(" "*string.find(x)+x)

第一个代码产生 TypeError: can't multiply sequence by non-int of type 'str'

第二个代码产生

o
 l
  d

    m
     a
      c
  d
o
         n
     a
 l
  d

              h
     a
  d

     a

                    f
     a
                      r
    m

【问题讨论】:

  • 使用enumerate,如for c,x in enumerate(string)cxstring 中的索引。
  • 当你得到解决方案时,请记得给有用的东西投票并接受你最喜欢的答案(即使你必须自己写),这样 Stack Overflow 才能正确存档问题。跨度>

标签: python for-loop


【解决方案1】:

您需要返回序列索引和内容的 Python 迭代器:enumerate:

text = "Old MacDonald had a farm"
for pad, char in enumerate(text):
    print(' '*pad + char)

pad 取值 0 到 len(text)-1。

输出:

O
 l
  d

    M
     a
      c
       D
        o
         n
          a
           l
            d

              h
               a
                d

                  a

                    f
                     a
                      r
                       m

如果您更喜欢与您已经学过的内容更接近的解决方案,只需遍历字符串的长度,然后为您的输出索引该字符。

text = "Old MacDonald had a farm"
for pad in range(len(text)):
    print(' '*pad + text[pad] )

【讨论】:

  • 这里也可以使用str.rjust
  • @Jaba 好主意:OP 已经知道的另一个“婴儿步骤”。
  • for pad, char in enumerate(text, 1): print(char.rjust(pad)) 本来打算作为答案发布,但不想抢走你的风头。不想混淆 OP 只是寻求帮助。
【解决方案2】:

您可以使用enumeratex 来获取循环索引:

for i, x in enumerate(string):
    print(" "*i+x)

如您所述,第二种方法失败,因为find 返回第一个匹配项。您可以通过使用 startend 参数来解决这个问题,但弄清楚为它们使用什么可能比它的价值更麻烦。

【讨论】:

    【解决方案3】:

    下面是空间乘法的简单说明:

     `x = '*'
    for u in range(0,2000):
        for k in range(0,11):
            for i in range(0,6):
                print(i*x,'    '*k,i*x)
            for j in range(6,0,-1):
                print(j*x,'    '*k,j*x)
        for k in range(10,0,-1):
            for i in range(0,6):
                print(i*x,'    '*k,i*x)
            for j in range(6,0,-1):
                print(j*x,'    '*k,j*x)`
    

    为了娱乐,在 V.S CODE 中运行此代码并享受动画......HeHeHeHeHeHeHeHeHeHeHeHe........

    【讨论】:

      猜你喜欢
      • 2013-06-05
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2013-03-23
      • 2015-10-13
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多