为什么while循环在此代码中不起作用?

时间:2019-04-23 11:47:02

标签: python

我想打印以下图案,但长度的while循环未运行。当我运行代码时,它只打印一个三角形 在代码下面是预期的输出和实际的输出:

height = int(input("Enter height ? "))
length = int(input("Enter length ? "))
spaces  = height-1
spaces2 = 0
while length > 0:
    for n in range(height):
        for i in range(spaces):
            print(' ',end="")
        print('/',end="")
        for j in range(spaces2):
            print(' ',end="")
        print('\\',end="")
        for k in range(spaces):
            print(' ', end="")
        print('')
        height-=1
        spaces-=1
        spaces2+=2
    length-=1

预期输出:

高度= 5 长度= 3

    /\        /\        /\        
   /  \      /  \      /  \      
  /    \    /    \    /    \    
 /      \  /      \  /      \  
/        \/        \/        \

代码运行时输出:

高度= 5 长度= 3

    /\           
   /  \          
  /    \       
 /      \   
/        \

3 个答案:

答案 0 :(得分:2)

while循环正在工作。但是,第一次通过while循环,您的代码将更改heightspaces2spaces的值。第二次通过while循环,这些值全为零,因此for循环不执行任何操作。为了显示这一点,请在行print(length)下方添加行length -= 1。您将看到while循环的3次迭代。

答案 1 :(得分:0)

这是因为第一个for循环将height变量更改为零,所以while循环的第二个迭代中的for和另一个for无效(迭代零时间)

答案 2 :(得分:0)

尽管问题已经得到回答,但发布了另一种解决方案(由于我对问题的处理有点过分,因此采取了稍微不同的方法)。

code.py

#!/usr/bin/env python3

import sys


def _triangle(height, bk_char=chr(0x20)):
    for i in range(height):
        yield "".join([bk_char * (height - i - 1), '/', bk_char * (2 * i), '\\', bk_char * (height - i - 1)])


def triangles(height, count):
    for line in _triangle(height):
        yield line * count

def main():
    print("\n".join(triangles(7, 5)))


if __name__ == "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main()
    print("Done.")

注释

  • 使用发电机
  • _triangle
    1. 生成字符串行,而不只是打印它们
    2. 对于每行,它还包括右边缘后的“不可见” 空格 字符(因此,它最后会生成一个矩形,其中包含(框)三角形)
  • 三角形
    • 将水平三角形(逐行)简单地相乘。由于上一个项目符号的 #2。
    • ,因此有可能

输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q055810531]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32

      /\            /\            /\            /\            /\
     /  \          /  \          /  \          /  \          /  \
    /    \        /    \        /    \        /    \        /    \
   /      \      /      \      /      \      /      \      /      \
  /        \    /        \    /        \    /        \    /        \
 /          \  /          \  /          \  /          \  /          \
/            \/            \/            \/            \/            \
Done.