2015-11-20 2 views
-1

В «Начинаясь с Python 3rd Edition» Тони Гэддисом, один из решений упражнения заключается в следующем:Повторение структуры - начать с Python

character = '#' 
numRows = 7 
space = ' ' 

for row in range(numRows): 
    for col in range(row + 2): 
     if col == 0 or col == row + 1: 
      print(character, end='') 
     else: 
      print(space, end='') 
    print() 

Никто в моем классе не понимает, как это решение работы, , в частности, математика в строках 6-7. Может ли кто-нибудь объяснить, как каждая строка приводит к выводу:

## 
# # 
# # 
# # 
# # 
#  # 
#  # 
+0

Что конкретно вы не понимаете? Вы знаете, что такое цикл 'for'? Что делает функция «range»? Что такое оператор '=='? – senshin

ответ

2

В каждой строке есть еще одно пробел, чем в предыдущем. Первая итерация по строкам

for row in range(numRows): 

затем для каждой строки перебирает столбцы, которые должны печатать (# или пробела)

for col in range(row + 2): 

Теперь, если столбец является первым или последним печатает разделитель символ (#)

if col == 0 or col == row + 1: 
    print(character, end='') 

хитрость здесь говорит печати, что он не должен заканчиваться символом новой строки (поведение по умолчанию), как в

print('one line') 
print('another line') 

Если это не первый или последний столбец просто напечатать пробельные

else: 
    print(space) 

Последнее предложение просто написать строку

print() 
+0

@ Mr-E Не могли бы вы объяснить математику в строках 6-7? –

+0

Каждая строка имеет «2 + количество строк» ​​(строки 0 -> 2 столбца, строка 1 -> 3 столбца ...). 'range (row + 2)' возвращает список чисел до 'row + 2' (' [0,1,2, ... row + 1] ',' row + 2' не включается), поэтому в этом списке первый столбец - столбец 0, а последний - строка + 1, в этом случае вы должны напечатать '#' любой другой столбец - это пробел –

Смежные вопросы