#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
/
/
/
/
/
Ответ №1:
while
Цикл работает. Но при первом выполнении while
цикла ваш код изменяет значения height
, spaces2
и spaces
. Во второй раз через while
цикл все эти значения равны нулю, поэтому for
циклы ничего не делают. Чтобы показать это, добавьте строку print(length)
чуть ниже строки length -= 1
. Вы увидите отчет о 3 итерациях while
цикла.
Ответ №2:
здесь причина в том, что первый цикл for изменяет переменную height на ноль, поэтому этот for и другой for во вторых итерациях цикла while не работают (повторяются в течение нулевого времени)
Ответ №3:
Хотя на вопрос уже был дан ответ, публикую другое решение (поскольку я немного поиграл с проблемой и, следовательно, применил немного другой подход).
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:
- Генерирует строковые строки вместо того, чтобы просто печатать их
- Для каждой строки он также включает в себя «невидимые» символы ПРОБЕЛА, которые идут после правого края (поэтому в конце он генерирует прямоугольник, содержащий (прямоугольники) треугольник)
- треугольники:
- Просто умножает треугольник по горизонтали (строка за строкой). Это возможно из-за # 2 последнего маркера. элемент
Вывод:
[cfati@CFATI-5510-0:e:WorkDevStackOverflowq055810531]> "e:WorkDevVEnvspy_064_03.07.03_test0Scriptspython.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.