Я новичок в мире программирования (как вы, вероятно, можете сказать по моему неэффективному коду и вопросу).
Мой код предназначен для проверки идентичности двух последующих символов в строке. Я не понимаю, почему две фиктивные переменные вызывают ошибку 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 были инициализированы как целые числа.
Проверьте свои ожидания. Добавьте print(i,j) перед if, который не работает.
Точная ошибка, которую вы получаете (которая должна была быть включена в вопрос дословно): if string[i] == string[j]: и TypeError: string indices must be integers, not 'str' с указателями непосредственно на string[i]. Индекс равен i, и ошибка говорит, что это строка, а не целое число. Это явный признак того, что ваши ожидания ошибочны.






Когда вы это делаете 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 Это именно то, что я предоставил, код находит только соседние повторяющиеся буквы, поэтому, например, если предоставленная строка действительно была слоном, результатом будет пустая строка.
for i in stringВы используетеiв качестве переменной цикла, а это значит, что она больше не является целым числом. Если вы хотите использоватьiв качестве индекса, используйтеfor i in range(len(string))