#python #python-3.x
#python #python-3.x
Вопрос:
Я записал код для генерации [‘—‘, ‘—‘, ‘—‘] ниже:
ans = []
for i in range(top, bottom):
ans.append("-"*3)
Если я хотел бы изменить first ‘-‘ в первой строке и last ‘-‘ в последней строке на ‘*’, как выполнить приведенный ниже код? 🙂
желаемый результат был бы:
['*--', '---', '--*']
добавив строки под кодом.
Комментарии:
1. что
right
иleft
2. @aws_apprentice Извините, я отредактировал код.
3. пожалуйста, отредактируйте свой ответ с ожидаемым результатом
Ответ №1:
Если вы хотите добавить только первый и последний символы каждой строки, вам нужно использовать цикл в цикле:
ans = []
for i in range(top, bottom):
line = []
for j in range(right-left):
char = '-'
if (i == 0 and j == 0) or (i == bottom - 1 and j == (right-left) -1):
char = '*'
line = char
ans.append(line)
Ответ №2:
Если вам нужно заменить только первую и последнюю строки в списке, это означает, что вы должны ограничить свой цикл, чтобы избежать этих конечных условий и обрабатывать их по-другому:
ans = []
ans.append('*' '-'*(3-1))
for _ in range(top 1, bottom-1):
ans.append("-"*(3))
ans.append('-'*(3-1) '*')
print(ans)
# ['*--', '---', '--*']
Ответ №3:
Поскольку вы хотите, чтобы отличались только начальный и конечный регистры, я думаю, проще всего просто обработать эти особые случаи с помощью if-оператора.
Пример:
start = 0
end = 3
ans = []
for i in range(start, end):
if i == start:
ans.append("*" "-" * 2)
elif i == end-1:
ans.append("-" * 2 "*")
else:
ans.append("-" * 3)
print(ans)
Не забудьте вычесть 1 из end
при выполнении проверки, поскольку range()
является эксклюзивным (второй аргумент range
не включен в возвращаемый список).
Результат:
['*--', '---', '--*']
Альтернативой вложенным операторам if-else-if, которые я лично нахожу более удобочитаемыми, является:
start = 0
end = 3
ans = []
for i in range(start, end):
if i == start:
ans.append("*" "-" * 2)
continue
if i == end-1:
ans.append("-" * 2 "*")
continue
ans.append("-" * 3)
print(ans)