2015-05-11 3 views

ответ

1

Вам нужно заменить только 1 звезду во внутреннем цикле:

stars = "******" 
for x in range(6): 
    stars = stars.replace("*","1") 
    print(stars) 
    for y in range(1): # need range(1) to loop exactly once 
     stars = stars.replace("1","",1) 

Выход:

111111 
11111 
1111 
111 
11 
1 

Если вы на самом деле хотите звезды:

stars = "******" 
for x in range(6): 
    print(stars) 
    for y in range(1): 
     stars = stars.replace("*","",1) 

Выход:

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

Последний аргумент str.replace засчитывается, когда заменены только первые экземпляры счетчика. Итак, каждый раз мы заменяем только один символ.

Если у вас есть использует звезды переменной и заменить то выше код будет работать, если вам просто нужны вложенные циклы и создать шаблон, вы можете прогиб вниз от 5 и использовать end="" печати один раз во внутреннем цикле:

for x in range(5, -1, -1): 
    print("1" * x, end="") 
    for y in range(1): 
     print("1") 

Опять тот же вывод:

111111 
11111 
1111 
111 
11 
1 
+0

Спасибо так много. Знал, что это не сложно. – RandomPRSN

+0

@RandomPRSN, не стоит беспокоиться, рад, что это помогло –

+0

Внутренний цикл в основном не является циклом ... он работает только один раз, поэтому вы можете просто оставить его и выполнить его содержимое напрямую. – swenzel

0

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

-1

Вы можете получить тот же результат, используя простой подход, поскольку Python поддерживает оператор * на строках, который возвращает строку с повторяющимися вхождениями.

character = "1" #You can change it to "*" 
for i in range(6, 0, -1): 
    print character*i 

Выход:

111111 
11111 
1111 
111 
11 
1 
0

Проверить ответ Padraic Cunningham с вложенным циклом.

Без вложенного цикла:

  1. Создать список подсчитывают методом диапазона и обратный метод списка.
  2. Перечислите список и распечатайте 1 кратное счету.

код:

counters = range(1, 7) 
counters.reverse() 
for i in counters: 
    print "1"*i 

Выход:

111111 
11111 
1111 
111 
11 
1 
+0

Это не вложенный цикл –

+0

@PadraicCunningham: да, правильно. Снова я не внимательно прочитал вопрос. Апология. Но мы напрямую используем 'stars = stars.replace (" * "," ", 1)', потому что каждый раз, когда секунда 'for loop' будет запускаться только один раз. и Up-vote вы +1 –

+1

да в зависимости от вопроса нужен вложенный цикл –

1
def main(symbol, number): 
    for x in reversed(range(number)): 
     s = "" 
     for y in range(x+1): 
      s += symbol 
     print s 

main("1", 6) 

Вы можете дать аргументы один символ (пример - '1', '*') и номер () ple - '5 for *****' для начала)

0

Поскольку вы запрашиваете вложенный цикл, я думаю, это всего лишь учебное упражнение, и не важно, насколько он эффективен.
Поэтому позвольте мне предложить решение с «правильной» внутренней петлей и без обратных диапазонов:

def triangle(x, c='1'): 
    for i in range(x): 
     line = '' 
     for _ in range(i, x): 
      line += c 
     print(line) 
Смежные вопросы