3

这是针对一个CS101 类型的 Python 类

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

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)

请尝试仅使用循环来解释答案。我们还没有达到功能。我有这个 stackoverflow 答案,但它是作为函数编写的。

4

7 回答 7

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'

-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]

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

希望我已经解释得很好。

UPD:简化版:

n = 3

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

    print number
    n -= 1
于 2013-08-31T21:14:56.593 回答
1

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

for i in range(n):
    X = 0
    for j in range(n-i):
        X = X * 10 + 1
    print X
于 2013-08-31T21:20:40.687 回答
0

您可以使用使用整数的方法。您所需要的只是一个从 3(或其他)开始并倒数到 1 的长度变量。使用 range 的 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() 值。

于 2013-08-31T21:23:14.533 回答
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()从列表中删除最后一项(如果需要,可以返回它)。

于 2013-08-31T21:27:16.803 回答
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
于 2013-08-31T21:52:15.260 回答
0

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

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

解释

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

例如 range(n) -> [0, 1, 2, ..., n-1]

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

例如反转([1, 2, 3]) -> [3, 2, 1]

Python 将 int 乘以字符串视为“重复我”。所以我们使用 use range 来生成每行所需的重复次数,我们使用 reverse 来翻转,使金字塔开始变大并缩小。

记得选择n比第一行“1”的宽度大一个

于 2013-08-31T22:05:56.580 回答
0

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

于 2016-04-08T22:17:43.517 回答