Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于CS圆中的循环,第7C节编码练习:一个三角形_Python_Loops_For Loop - Fatal编程技术网

Python 对于CS圆中的循环,第7C节编码练习:一个三角形

Python 对于CS圆中的循环,第7C节编码练习:一个三角形,python,loops,for-loop,Python,Loops,For Loop,下面是另一个for循环中的for循环的示例 示例 此代码打印5×5平方的1。 注意:当我们将一个数字X乘以10并加上1时,我们实际上是在X的末尾加上一个1位数。例如,(1867*10)+1=18671 用两种方法修改上一个程序。首先,不是正方形,而是画一个三角形,形状如下:◤. 第二,它不应该总是有5行,而应该从input()获取所需的大小作为输入。例如,如果输入为3,则输出应为 111 11 1 到目前为止,我得到的代码是: X=input() for i in range(0, 3):

下面是另一个for循环中的for循环的示例

示例 此代码打印5×5平方的1。
注意:当我们将一个数字X乘以10并加上1时,我们实际上是在X的末尾加上一个1位数。例如,(1867*10)+1=18671

用两种方法修改上一个程序。首先,不是正方形,而是画一个三角形,形状如下:◤. 第二,它不应该总是有5行,而应该从input()获取所需的大小作为输入。例如,如果输入为3,则输出应为

111
11
1
到目前为止,我得到的代码是:

X=input()
for i in range(0, 3):
   X = 0
for j in range(0, 3):
   X = (X*10)+1
   print(X)
但是,该代码输出:

1
11
111
预期输出的时间应为:

111
11
1

我似乎不知道如何更改我到目前为止所拥有的代码以获得预期的输出?

正如您所说,
10*X+1
意味着在
X
的末尾添加额外的
1
。您需要一个反向操作:如何删除数字的最后一位。提示:整数除法。谷歌“python整数除法”可以访问诸如


因此,您所要做的就是构造正确长度的
111…11
,然后逐个迭代打印和删除数字。

这可以为您解决问题:

def test(X,_range):
    x = X
    for j in range(0, _range):
        print int(str((x*10) +1) + ("1"*(_range-1-j)))

test(0,3)
>>> 
111
11
1
>>>
在每个循环步骤中,数字以
(X*10)+1开头
在下一步中,
X
已更改,您将数字
1
添加到右侧
如果要反转,需要使用
(“1”*(_range-1-j))


for
迭代器每一步都会更改
X
内容。(他不使用i和j,“For”仅用于阶跃推导)

此块非常混乱,下面是发生的情况:

X=input()
输入中获取
X
的值

for i in range(0, 3):
   X = 0
现在将
X
的值设置为
0
三次(覆盖输入)

现在
X
被设置为
1
,然后是
11
,然后是
111

即使您打算为
循环嵌套
,这也不会正常工作。相反,您希望使用切片操作符
[::-1]
获取要向后循环的
i
值。然后,应将
j
的范围设为0到
i

您还需要通过增加
i
范围内两个数字的值进行补偿(否则最后一行将为零),但这将起作用:

for i in range(1, 6)[::-1]:
    X = 0
    for j in range(0, i):
        X = (X*10)+1
    print(X)

请注意,我将
print
移出了
j
循环,因为原始代码不是这样的(并且生成了错误的输出),请注意空格。出于这样的原因,使用4个空格比仅使用2个空格更可取

如果你在做CS圈,那么这些答案可能包含你还没有接触过的代码,至少我没有,所以我将尝试用我迄今为止收集的知识来解释它(做CS圈的几周)

您忽略了第一个循环,这就是您的答案所在。请注意,如果将“打印”命令放在循环体之外,它将只输出:

111 
这是因为第二个循环不在第一个循环的主体中,所以python只循环第一个循环3次,然后移动到第二个循环。相反,它应该是:

for i in range(0, 3):
    X = 0
    for j in range (0, 3):
        X = (X*10)+1
    print(X) 
现在程序输出:

111
111
111 
但您希望在每次再次调用print时减少一个数字。这是通过从第二个循环的范围尾值中减去“i”的值(因为它精确地从0到2)来实现的。现在你有了:

for i in range(0, 3):
    X = 0
    for j in range(0, 3-i):
        X = (X*10)+1)
    print(X) 
最后,输出为:

111
11
1 
Protip:在CS圈中使用可视化工具,它可以帮助您更好地理解python中代码的执行方式,并可以为您的问题提供见解。祝你好运

以下是解决方案:

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

最简单的方法是使用以下代码

p = int(input())
for i in range(0,p):
    x = 0
    for j in range(i,p):
        x = (x*10)+1
    print(x)

有些不相关的旁注:您应该始终使用4个空格缩进Python代码,如中所述。
n=int(input()) 
for i in range(0, n):
    X = 0
    for j in range(0, n-i):
        X = (X*10)+1
    print(X) 
p = int(input())
for i in range(0,p):
    x = 0
    for j in range(i,p):
        x = (x*10)+1
    print(x)