Python – почему мой код возвращает TypeError

Я новичок в мире программирования (как вы, вероятно, можете сказать по моему неэффективному коду и вопросу).

Мой код предназначен для проверки идентичности двух последующих символов в строке. Я не понимаю, почему две фиктивные переменные вызывают ошибку TypeError при ссылке в операторе if (if string[i] == string[j]:). Они были инициализированы как int. Почему Python интерпретирует это как тип str при использовании в операторе if?

Спасибо за ваше время.

#Get string from user
string = str(input("Enter a phrase: "))

#initialise i and the empty string doubleoccurrences
i = 0
j = i + 1

doubleOccurrences = str("N/A")

#loop through the string, which checks if two consecutive characters match
for i in string:
    if string[i] == string[j]:
        doubleOccurrences = doubleOccurrences.replace("N/A","")
        doubleOccurrences = (doubleOccurrences + string[i] + string[j])
        j = j + 1
    else:
         doubleOccurrences = doubleOccurrences
         j = j + 1

#print the output
print("Your input contains the following double occurrences: " + doubleOccurrences)


Я ожидал, что Python интерпретирует

if string[i] == string[j]:

в качестве проверки того, равен ли символ с индексом i символу с индексом j, учитывая, что и i, и j были инициализированы как целые числа.

for i in string Вы используете i в качестве переменной цикла, а это значит, что она больше не является целым числом. Если вы хотите использовать i в качестве индекса, используйте for i in range(len(string))
John Gordon 23.03.2024 03:47

Проверьте свои ожидания. Добавьте print(i,j) перед if, который не работает.

Mark Tolonen 23.03.2024 04:42

Точная ошибка, которую вы получаете (которая должна была быть включена в вопрос дословно): if string[i] == string[j]: и TypeError: string indices must be integers, not 'str' с указателями непосредственно на string[i]. Индекс равен i, и ошибка говорит, что это строка, а не целое число. Это явный признак того, что ваши ожидания ошибочны.

Mark Tolonen 23.03.2024 04:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Когда вы это делаете for i in string:, вы по сути перезаписываете переменную i строковым итератором для переменной «строка». Это означает, что вы перебираете каждую букву в строке и сохраняете символ в «i». Правильный способ сделать это — использовать перечислять . Вы также можете использовать диапазон вот так range(len(string)). Вот рабочий пример того, что вы пытаетесь сделать:

string = str(input("Enter a phrase: "))

doubleOccurrences = str("N/A")

#loop through the string, which checks if two consecutive characters match
for i in range(len(string)):
    for j in range(i + 1, len(string)):
        if string[i] == string[j]:
            doubleOccurrences = doubleOccurrences.replace("N/A","")
            doubleOccurrences = (doubleOccurrences + string[i] + string[j])
        else:
            doubleOccurrences = doubleOccurrences

#print the output
print("Your input contains the following double occurrences: " + doubleOccurrences)

Обратите внимание: я не уверен, что именно вы пытаетесь сделать, поэтому я не проверял, был ли результат правильным, я только убедился, что он работает. Мне также пришлось изменить часть вашей логики, поскольку вы не учитываете выход буквы «j» за пределы. Использование цикла double for позволит избежать этой проблемы.

Я понимаю, что вы пытаетесь сделать, но ваш код Python этого не сделает и обязательно выдаст ошибку. Вместо этого попробуйте этот упрощенный код:

# Get string from user
string = input("Enter a phrase: ")
doubleOccurrences = ""

# loop through the string, which checks if two consecutive characters match
for i in range(len(string) - 1):
    if string[i] == string[i + 1]:
        doubleOccurrences += string[i] * 2
# print the output
print("Your input contains the following double occurrences:", doubleOccurrences)

Чтобы объяснить этот код, мы берем введенные пользователем данные и сохраняем их в string, затем устанавливаем doubleOccurences в пустую строку, затем выполняем цикл 0 to len(string) - 2 включительно (обратите внимание, что за символом в позиции len(arr) - 1 нет следующего символа после него, который нужно проверить!) , затем мы проверяем, выполнено ли условие, добавляем 2 раза символ в doubleOccurrences doubleOccurrences += string[i] * 2 и, наконец, печатаем результат.

@ user19077881 Это именно то, что я предоставил, код находит только соседние повторяющиеся буквы, поэтому, например, если предоставленная строка действительно была слоном, результатом будет пустая строка.

Rida Zouga 23.03.2024 16:52

Другие вопросы по теме