#python #for-loop
#python #для цикла
Вопрос:
Итак, я пытался решить эту проблему с leetcode:
Ввод: command = «G()(al)»
Результат: «Цель»
Объяснение: Анализатор цели интерпретирует команду следующим образом:
G -> G
() -> o
(al) -> al
Конечным объединенным результатом является «Цель».
Это мой код:
def interpret(command: str) -> str:
res = ''
for i in command:
if i == 'G':
res = i
if i == '(':
ind = command.index(i)
if command[ind 1] == ')':
res = 'o'
if command[ind 1] == 'a':
res = 'al'
return res
Проблема в том, что вместо возврата ‘Goal’ функция возвращает ‘Goo’. Поэтому я изменил функцию на следующую, чтобы посмотреть, что происходит:
for i in command:
if i == '(':
print(command.index(i))
И приведенный выше код выводит это
1
1
что означает, что цикл повторяет элемент дважды?
Что я сделал не так и как я могу исправить функцию, чтобы вернуть правильный вывод?
Ответ №1:
command.index()
выдает первое вхождение ‘(‘ .
Перепишите свою функцию следующим образом:
def interpret(command: str) -> str:
res = ""
for c, i in enumerate(command):
if i == "G":
res = i
if i == "(":
ind = c
if command[ind 1] == ")":
res = "o"
if command[ind 1] == "a":
res = "al"
return res
Комментарии:
1. Примечание: действительно странно называть индекс
c
и значениеi
;i
почти всегда это имя индекса. Я понимаю, что OP используетсяi
для значения, но тьфу, не поощряйте это.2. О, теперь это имеет смысл! Спасибо, приятель