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

时间:2013-08-31 21:08:32

标签: python for-loop

这适用于CS101 type Python class

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

111
11
1

我这里有示例代码生成

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)

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

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)

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

7 个答案:

答案 0 :(得分:5)

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

n = 3
c = "1"

for i in range(n, 0, -1):
    print(c * i)

或与while循环相同:

n = 3
c = "1"

i = n
while i != 0:
    print(c * i)
    i -= 1

两个片段打印:

111
11
1

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

>>> s = "1"
>>> type(s)
<type 'str'>
>>> s * 2
'11'
>>> s * 10
'1111111111'
范围函数调用中的

-1step参数的值。如果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]

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

希望我已经解释得很好。

UPD:简化版:

n = 3

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

    print number
    n -= 1

答案 1 :(得分:1)

您可以从最大长度中减去当前i索引,以了解每行应该有多少1个:

for i in range(n):
    X = 0
    for j in range(n-i):
        X = X * 10 + 1
    print X

答案 2 :(得分:0)

您可以使用整数使用的方法。您只需要一个长度变量,从3(或其他)开始,并向下计数到1.使用范围的for循环是:

for length in range(3,0,-1):
    X = 0
    for j in range(length):
        X = 10*X + 1
    print (X)

range()的第三个参数是一个增量值,它将被添加到前一个值以产生新值,直到达到或传递停止值。默认为1,但您可以使用其他值来计算两次,向后计数等等。

请注意,范围(长度)与范围(0,长度)相同。

我刚才弄清楚你想用i =(n-2)赋值做什么。这不是类C语言,您可以通过更改for循环变量来修改迭代次数。在循环的第一次迭代之前完全确定循环数和值集,并且不能在循环内更改它。你所能做的只是提前用break或return语句结束循环。

要了解使用范围进行循环,请启动Idle或Python交互模式,然后打印出一些range()值。

答案 3 :(得分:0)

这个答案使用一个用while循环变异的列表,并使用str.join()方法,这样可以避免连接。

n = 5
l = ['1'] * n

while l:
    print(''.join(l))
    l.pop()

为了解释这里的魔力,列表l包含n“1”字符串。循环while l时,它将继续循环,直到列表为“Falsy”(空)。 ''.join(l)获取列表l中的所有字符串并将它们连接在一起,在它们之间插入字符串''(空)。然后,l.pop()从列表中删除最后一项(如果需要,则返回它)。

答案 4 :(得分:0)

Python也有while个循环:

n = int(input())
while n > 0:
  X = 0
  for j in range(0, n):
    X = (X*10) + 1
    i = n - 2
  print(X)
  n -= 1

样本输出(对于n = 5):

11111
1111
111
11
1

答案 5 :(得分:0)

我认为最简单的解决方案(也许是你老师得到的解决方案)就是使用pythons builtins为你做这项工作。

for number in reversed(range(10)):
    print number*"1"

解释

range(n) - 创建一个从0到1的数字序列,小于n。

e.g。范围(n) - &gt; [0,1,2,...,n-1]

revers() - 翻转你传递的任何东西。

e.g。反转([1,2,3]) - &gt; [3,2,1]

Python将int与字符串相乘称为“repeat me”。 所以我们使用use range来生成每行所需的重复次数,我们使用reverse来翻转,这样金字塔就会开始大而缩小。

请记住选择n大于第一行“1”的宽度

答案 6 :(得分:0)

N = INT(输入()) 对于范围(0,n)中的i:   X = 0   对于范围内的j(0,n-i):     X =(X * 10)+1   打印(X)