Найти - Пользователи
Полная версия: Ошибка Шрёдингера
Начало » Центр помощи » Ошибка Шрёдингера
1
Vlad_Ki
Решаю задачу: Допустим, дана строка слов, разделенных пробелами. Необходимо найти в ней самое длинное слово и заменить в нем буквы ‘a’ на буквы ‘b’.
Сразу оговорюсь, что решить задачу самым простым и подходящим способом - такой задачи не стоит.
Старался максимально применить и извратить полученные знания на тему “Строки”.
Итак:
max_sl = ""
vivod = ""
# В этой части кода мы получаем строку, делаем ее списком и проверяем 
# какая строка в списке самая длинная с условием, что это строка из букв.
vvod = input("Введите строку: ")
spis_vvod = vvod.split()
for x in spis_vvod:
	if len(x) > len(max_sl):
		if x.isalpha():
			max_sl = (x)
		else:
			continue
#А тут, собсвтенно, извращенно заменяются буквы и из списка 
#создается строка
index = spis_vvod.index(max_sl)
max_sl = max_sl.replace("a", "b")
spis_vvod[index] = max_sl
for y in range(len(spis_vvod)):
	vivod += "{0[y]}".format(spis_vvod)
print(vivod)

Ошибка такого рода:
Traceback (most recent call last):
  File "ex_3.py", line 20, in <module>
    vivod += "{0[y]}".format(spis_vvod)
TypeError: list indices must be integers, not str
Как я понимаю тут написано, что индекс y- это строка.
Но как такое может быть? Если в том же коде, при:
for y in range(len(spis_vvod)):
	print(y, type(y))
Выводит:
Введите строку: Katastrofa yo mayo
0 <class 'int'>
1 <class 'int'>
2 <class 'int'>
Прошу помощи и, конечно же, всем заранее огромное спасибо!
Firik
"{0[y]}".format(spis_vvod)
Странная конструкция какая то

Может вот так?
"{0}".format(spis_vvod[y])
Vlad_Ki
Firik
"{0[y]}".format(spis_vvod)

Странная конструкция какая то

Может вот так?

"{0}".format(spis_vvod[y])
Да. Очень хороший вариант, я его не увидел, но он работает. Спасибо большое! Но и мой тоже должен работать, хоть и конструкция, может, не совсем обыденная. Говорю так уверенно, потому что сам уже ей пользовался.
Программа заработала при смене конструкции на предложенную, но все же хотелось бы узнать - что не так с моей, дабы решить вопрос на корню.)
Подскажите пожалуйста!
Vlad_Ki
Оговорюсь, что работала конструкция с константой в индексе, а не переменной.
Firik
Киньте пример рабочий, аж интересно стало
Vlad_Ki
ну к примеру.
>>> x = ["строки", "индекса поля", "списка"]
>>> "Вывод {0[0]} с учетом {0[1]} заданного {0[2]}".format(x)
'Вывод строки с учетом индекса поля заданного списка'
JOHN_16
Firik
Это все есть в документации
JOHN_16
Vlad_Ki
Оговорюсь, что работала конструкция с константой в индексе, а не переменной.
Все правильно - пока она, как вы выразились, константа, а по сути явно заданное значение все хорошо - интерпретатор явно ее использует как вы и задали. В случае, как вы предполагали, когда вы передаете переменную - интерпретатор ее таковой не воспринимает, а читает то что в строке указано - символ “y”. Поэтому и не работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB