Python逻辑 - 使用for循环减少1的集合以创建三角形

Sta*_*cyM 3 python for-loop

这适用于CS101类型的Python类.

问题要求程序员编写用于设置此模式的循环:

111
11
1
Run Code Online (Sandbox Code Playgroud)

我这里有示例代码生成

11111
11111
11111
11111
11111

for i in range(0, 5):
  X = 0
  for j in range(0, 5):
    X = (X*10)+1
  print(X)
Run Code Online (Sandbox Code Playgroud)

这是我的一次尝试.显然它不起作用.请帮忙!

n=int(input())
for i in range(0, n):
  X = 0
  for j in range(0, n):
    X = (X*10)+1
    i=(n-2)
  print(X)
Run Code Online (Sandbox Code Playgroud)

请尝试仅使用循环解释答案.我们还没有完成任务.我有这个stackoverflow的答案,但它是作为一个函数编写的.

ale*_*cxe 5

你可以使用n to 1向后循环(在这种情况下为3,2,1):

n = 3
c = "1"

for i in range(n, 0, -1):
    print(c * i)
Run Code Online (Sandbox Code Playgroud)

或者与while循环相同:

n = 3
c = "1"

i = n
while i != 0:
    print(c * i)
    i -= 1
Run Code Online (Sandbox Code Playgroud)

两个片段打印:

111
11
1
Run Code Online (Sandbox Code Playgroud)

你看到的是"111"而不是3,因为它c是一个字符串,而python有这个神奇的东西,我称之为"字符串繁殖" - 如果将字符串与n整数相乘,则字符串重复n次数:

>>> s = "1"
>>> type(s)
<type 'str'>
>>> s * 2
'11'
>>> s * 10
'1111111111'
Run Code Online (Sandbox Code Playgroud)

-1在范围函数调用中是step参数的值.如果step为负数,则循环向后,从结束到范围的开头:

>>> range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10, 0, -1)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是Python 2 range,xrange则替换为.

希望我已经解释得很好.

UPD:简化版:

n = 3

while n != 0:
    number = 0
    for i in range(n):
        number += 10 ** i

    print number
    n -= 1
Run Code Online (Sandbox Code Playgroud)