对于编码类中的赋值,我应该找到一种方法让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()
我知道我错过了什么,我只是看不出它是什么。
答案 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>
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))
...
* *
** **
*** ***
********
方便的参考文献:PyFormat和Python 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 * ' ', '%')