Python逻辑-递减集1';使用for循环创建三角形

Python逻辑-递减集1';使用for循环创建三角形,python,for-loop,Python,For Loop,这是给一个朋友的 该问题要求程序员编写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

这是给一个朋友的

该问题要求程序员编写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)

请尝试仅使用循环来解释答案。我们还没有开始讨论函数。我有,但它是作为一个函数编写的。

您可以使用向后(3,2,1)从
n到1的循环:

或与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'
注意:如果您使用的是Python 2,请将
range
替换为
xrange

希望我解释得很好

UPD:简化版:

n = 3

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

    print number
    n -= 1

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

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

您可以使用使用整数的方法。您所需要的只是一个长度变量,它从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,但您可以使用其他值按2计数、向后计数等

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

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


要了解如何使用range循环,请启动Idle或Python交互模式,只需打印一些range()值。

此答案使用一个列表,该列表使用while循环进行变异,并使用str.join()方法,从而避免连接

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

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

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

Python也有
循环:

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.

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

for number in reversed(range(10)):
    print number*"1"
解释 范围(n)-创建从0到小于n的一个数字序列

e、 g.范围(n)->[0,1,2,…,n-1]

反转()-翻转通过它的任何对象

e、 g.反向([1,2,3])->[3,2,1]

Python将int与字符串相乘视为“repeat me”。 因此,我们使用“使用范围”来生成每行所需的重复次数,并使用“反转”来翻转,使棱锥体开始变大并收缩

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

n=int(input()) 对于范围(0,n)内的i: X=0 对于范围(0,n-i)内的j: X=(X*10)+1
打印(X)

当你说“仅使用循环”时,你是否也涵盖了
循环?你能解释一下(n,0,-1)吗?另外,c*i怎么不=3*1?@StacyM检查更新的答案。我试着让解释变得简单。为什么你没有得到TypeError:不能将序列乘以'str'错误类型的非int?如果你尝试乘以字符串,你会得到这个错误,例如:
“1”*“1”
。在回答中,我将字符串和整数相乘-这在python中非常好。感谢他们还没有教过。他们还没有解释这个语法(3,0,-1):你能澄清,-1的意思吗?你的第二段到最后一段不是完全正确的,你可以更改循环中的迭代次数。例如,你可以在列表中为
执行
,然后从列表中弹出。迈克,正如我问亚历克的那样,你可以在没有-1反转范围概念的情况下执行此操作吗?我不认为教授会期望我们使用一些还没有教过的东西。@StacyM,我的答案是类似的,并且使用了正向范围(最初缩进是错误的)。现在你有了其他的解决方案,使用
,而
。保罗,我现在明白了。老师回信说这就是他要找的。他想强调的是,您可以通过使用外部循环(0,n-i)来修改内部for循环
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
for number in reversed(range(10)):
    print number*"1"