Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2016 08:46:09

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

Решаю задачу: Допустим, дана строка слов, разделенных пробелами. Необходимо найти в ней самое длинное слово и заменить в нем буквы ‘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'>
Прошу помощи и, конечно же, всем заранее огромное спасибо!



lol developer

Отредактировано Vlad_Ki (Фев. 28, 2016 08:47:25)

Офлайн

#2 Фев. 28, 2016 09:29:41

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

"{0[y]}".format(spis_vvod)
Странная конструкция какая то

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

Офлайн

#3 Фев. 28, 2016 09:36:05

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

Firik
"{0[y]}".format(spis_vvod)

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

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

"{0}".format(spis_vvod[y])
Да. Очень хороший вариант, я его не увидел, но он работает. Спасибо большое! Но и мой тоже должен работать, хоть и конструкция, может, не совсем обыденная. Говорю так уверенно, потому что сам уже ей пользовался.
Программа заработала при смене конструкции на предложенную, но все же хотелось бы узнать - что не так с моей, дабы решить вопрос на корню.)
Подскажите пожалуйста!



lol developer

Отредактировано Vlad_Ki (Фев. 28, 2016 09:37:09)

Офлайн

#4 Фев. 28, 2016 09:40:03

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

Оговорюсь, что работала конструкция с константой в индексе, а не переменной.



lol developer

Офлайн

#5 Фев. 28, 2016 09:48:57

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

Киньте пример рабочий, аж интересно стало

Офлайн

#6 Фев. 28, 2016 10:10:17

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

ну к примеру.

>>> x = ["строки", "индекса поля", "списка"]
>>> "Вывод {0[0]} с учетом {0[1]} заданного {0[2]}".format(x)
'Вывод строки с учетом индекса поля заданного списка'



lol developer

Офлайн

#7 Фев. 28, 2016 10:49:11

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

Firik
Это все есть в документации



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Фев. 28, 2016 10:53:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ошибка Шрёдингера

Vlad_Ki
Оговорюсь, что работала конструкция с константой в индексе, а не переменной.
Все правильно - пока она, как вы выразились, константа, а по сути явно заданное значение все хорошо - интерпретатор явно ее использует как вы и задали. В случае, как вы предполагали, когда вы передаете переменную - интерпретатор ее таковой не воспринимает, а читает то что в строке указано - символ “y”. Поэтому и не работает.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version