Обнаружение символа один за другим, если у него есть конкретная буква, а затем вычисление количества их - PullRequest
0 голосов
/ 29 декабря 2018

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

a = input("word - ").lower()
for i in range(1, len(a)+1):
  if a[str(i)] == "a" or "e" or "i" or "o" or "u":
    print("ok")
else:
  print("no")`

И я получаю ошибку:

TypeError: string indices must be integers

Второй:

a = input("word - ").lower()
for letter in a:
  if letter == "a" or "e" or "i" or "o" or "u":
    value = 0
    value = value + 1
print(value)

Также даетмне ошибка:

TypeError: string indices must be integers

Третий немного сложнее:

a = input("rec - ").lower()
for i in range(1, len(a)+1):
  if a[str(i)] == "a":
    print("yes a")
  elif a[str(i)] == "e":
    print("yes e")
  elif a[str(i)] == "i":
    print("yes i")
  elif a[str(i)] == "o":
    print("yes o")
  elif a[str(i)] == "u":
    print("yes u")

Я работаю над Python 3.6.1 на Repl.it

Вы можете проверить полный исходный код на моем профиле .

Я ценю вашу помощь.Спасибо!

Ответы [ 6 ]

0 голосов
/ 29 декабря 2018

вы использовали a[str(i)] для доступа к буквам в строке, где str (i) - строка, и все индексы массива должны быть целыми числами, поэтому ошибка.

i уже является целым числом, поэтому выследует использовать [i] для доступа к буквам.

также, как сказал @ usr2564301, ваши or утверждения неверны

if letter == "a" or "e" or "i" or "o" or "u":

должно быть,

if letter in ["a", "e", "i", "o", "u"]:
0 голосов
/ 29 декабря 2018
vowels=['a','e','i','o','u']
count=0
a = input("word - ").lower()
for i in range(0, len(a)): #or simply range(len(a))
  if a[i] in vowels:
    count+=1
print("Number of vowels:"+str(count))
  1. строковые индексы должны быть целыми числами a[i] не a[str(i)]
  2. or операторы не могут использоваться таким образом (возможно, использовать in?)
  3. Неправильный диапазон for. Индекс начинается с 0, а не с 1, поэтому он должен быть range(0, len(a)) просто range(len(a))
0 голосов
/ 29 декабря 2018

Вы можете sipmly fo:

a = input("word - ").lower()
vowels = "aeiou"
len([letter for letter in a if letter in vowels])
0 голосов
/ 29 декабря 2018

Возможно, вы захотите использовать ключевое слово in для этого.

value = 0
for letter in a:
  if letter in ['a','e','i','o','u']:
    value = value + 1
print("Number of values: %d" % value)

Что касается ошибки типа.Как кто-то еще указал, вам нужно использовать целое число:

a = input("word - ").lower()
for i in range(1, len(a)+1):
  if a[i] == "a" or a[i] == "e" or a[i] == "i" or a[i] == "u":
    print("ok")
  else:
    print("no")`
0 голосов
/ 29 декабря 2018

Обратите внимание, что вам нужно использовать целые числа при индексации массива или строки:

a = input("word - ").lower()
for i in range(len(a)):
    if a[i] == "a" or "e" or "i" or "o" or "u":
        print("ok")
else:
    print("no")

И это должно решить вашу проблему:

vowels = set("aeiou")
user_input = input("word - ").lower()
vowels_count = len([letter for letter in user_input if letter in vowels])

print(f"you typed {vowels_count} vowel(s)")
0 голосов
/ 29 декабря 2018

В первом и последнем примере вы использовали строку в качестве индекса (a [str (i)]).Тем не менее, индексы всегда целые числа.И помните, что первый индекс всегда равен 0, а не 1. Ваш цикл for повторяется от 1. Так как первый элемент имеет индекс 0, последний имеет индекс len (массив) - 1, что означает, что вашцикл должен повторяться только до len (a).Проблема с индексом цикла for также относится к последнему примеру.

Во втором примере вы неправильно использовали операторы or.Вы не можете сравнивать их так.Вы должны написать это так:

if letter == "a" or letter == "e" or letter == "i" or letter == "o" or letter == "u":

Чтобы сократить это, просто напишите:

if letter in "aeiou":

Здесь вы проверяете, находится ли буква в строке «aeiou».

Во втором примере вы также сбрасываете значение на ноль при каждом обнаружении гласного.Это приведет к тому, что значение будет либо 1, либо не определено.Поместите значение = 0 перед циклом for, и оно должно работать.

...