For / While循环使* -triangles

时间:2015-12-05 19:27:00

标签: python python-3.x

对于编码类中的赋值,我应该找到一种方法让Python制作一个星号三角形,如下所示:

   x
  xx
 xxx 

然而,无论我对我的代码做什么,我都无法实现这一目标。我最好的 可以得到的是:

x
xx
xxx 

所有这一切都必须只使用for循环和while循环,就像我在这里使用的那样。我使用的代码是

for a in range(1, 15):
 for a2 in range(14-a, 0, 1):
     print(" ", end='')
 for a1 in range(1, a+ 1):
     print("*", end='')
 print()

- &#39>代表缩进。我如何以我想要的方式完成这项工作?

编辑:事实证明,我只注意到我的一半问题。我在这里使用的代码生成了我需要的两个三角形,但是将它们一个堆叠在另一个之下。我现在遇到的麻烦就是让它们像M形一样并排出现。

for b in range(1, 10):
    for b2 in range(9-b, 0, 1):
        print(" ", end='')    
    for b1 in range(1, b+ 1):
        print("*", end='')
    print()

for a in range(1, 10):
    for a2 in range(9-a, 0, -1):
        print(" ", end='')
    for a1 in range(1, a+ 1):
        print("*", end='')
    print()

我知道我错过了什么,我只是看不出它是什么。

5 个答案:

答案 0 :(得分:4)

以下是如何仅使用for循环来解决这两个问题。这种方法不是非常pythonic,但这是你要求的。

单三角问题的解决方案

{
  "presets": ['es2015'],
  "plugins": ['./plugin']
}

你真的很亲密。当你想从14-a下降到0时,你写了 x xx xxx 而不是1

-1

解释(来自here):

  

范围(开始,停止[,步骤])

     
    

如果省略step参数,则为     默认为1.如果step为正,则最后一个元素为最大     开始+ i *步骤不到停止;如果step为负数,则为最后一个元素     是最小的开始+ i *步长大于停止。

  

因此,在您的情况下,您的原始for循环没有做任何事情,因为 14-a 不小于 0 步骤为正。< / p>

M形问题的解决方案

for a in range(1, 15):
 for a2 in range(14-a, 0, -1):
     print(" ", end='')
 for a1 in range(1, a+ 1):
     print("*", end='')
 print()

-

 x    x
 xx  xx
 xxxxxx

答案 1 :(得分:1)

您应该考虑使用str.format

  • "{0}+++{0}".format('Hello!')format(此处为'Hello!')生成两个第0个参数副本,由三个加号分隔:Hello!+++Hello!
  • "{:<4}".format('x')在4个字符的字段中左对齐'x';即,'x '
  • "{:>4}".format('x')在4个字符的字段中右对齐'x';即,' x'
  • "{:>{}}".format('x', width)'x'字符字段中右对齐width
  • 'ab' * 4共生成4份'ab';即,'abababab'

将它们放在一起:

>>> WIDTH = 4
>>>
>>> for a in range(1, WIDTH+1):
...     print("{0:<{1}}{0:>{1}}".format('*' * a, WIDTH))
...
*      *
**    **
***  ***
********

方便的参考文献:PyFormatPython String Format Cookbook

答案 2 :(得分:0)

避免多个for循环的另一个选项是将乘法运算符与字符串一起使用。 "*" * 3 = "***"

for a in range(1, 15):
    print(" " * (14-a), end = '')
    print("*" * a)

答案 3 :(得分:0)

使用列表解析的解决方案:

>>> count_tuples = zip(range(2,-1,-1), range(1,4))
>>> stars = ['%s%s' % (space * ' ', star * '*') for space, star in count_tuples]
>>> print("\n".join(stars))
  *
 **
***

这相当于以下解决方案:

>>> for space, star in zip(range(2,-1,-1), range(1,4)):
...     print '%s%s' % (space * ' ', star * '*')
  *
 **
***

答案 4 :(得分:0)

使用大多数基本命令:

maximum_value <- max(my_values[1:100])

输出:

for i in range(8, 0, -1):
    print(i * ' ', '%')