Почему прерывание необходимо, чтобы остановить цикл while в этой функции - PullRequest
0 голосов
/ 18 декабря 2018

Выполнение упражнения Python3 на вложенных циклах для создания этого вывода:

*
**
***
****
*****
******
*******
********
*********

Но даже если я установил условие, пока i <= num, функция продолжала выполнять бесконечное количество времени.Я понял, что мне нужно добавить разрыв, но я не понимаю, почему цикл продолжал выполняться после того, как я вызвал функцию. </p>

def triangle(num):
    i = 0
    while i <= num:
        for i in range(num):
            print(i*"*")
            i+=1
        break

triangle(10)

1 Ответ

0 голосов
/ 18 декабря 2018

В вашей программе используется одна и та же переменная цикла i для итерации в циклах while и for.

Это сбивает с толку, и поэтому, чтобы получить ответ, они ввели случайное break.

Этот break бесполезен и может работать без внешней петли while.Вы можете просто иметь цикл for, и он будет работать:

def triangle(num):
    for i in range(num):
        print(i*"*")

Таким образом, разрыв просто забирает вас во внутренний цикл for и завершает работу, как только это будет сделано.

Честно говоря, ваша программа выглядит как программа, залатанная обезьяной.Хотя это работает, его трудно читать и поддерживать из-за необычной логики.

Теперь, как работает приведенный выше код?

Давайте рассмотрим проблему под рукой:

  1. Мы должны создать треугольную последовательность "*".
  2. Число "*" должно увеличиваться и в конечном итоге равняться числу num, отправляемому в качестве параметра.
  3. В python любая строка x, умноженная на целое число n, создает строку с n повторениями x.

Так что если у меня есть x = "abc"newX = x * 3 print (newX) # печатает abcabcabc

Таким образом, все, что вам нужно сделать, это иметь переменную, которая может идти от 1 to num, умножить «*» и вывести то же самое.Это было указано в цикле for и операторе печати внутри.

Редактировать:

Если вы вынуждены использовать два цикла, это хороший способ имитировать это:

def triangle(n):
    for i in range(n):
        for j in range(i):
            print("*")

Или другой странный способ:

def triangle(n):
    i=0
    while(i<n):
        for j in range(n):
            print(i*"*")
            i += 1
...