如果一个字符具有特定字母,则一个字符一个字符检测,然后计算它们的数量

Detecting a character one by one if it has a specific letter, then calculates the number of them

我正在尝试制作一个程序来检测您键入的单词中有多少个元音字母。 这是我的源代码(我有多个代码):

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")

我正在 Repl.it

上开发 Python 3.6.1

您可以在 my profile 查看完整的源代码。

感谢您的帮助。 谢谢!

在第一个和最后一个示例中,您使用字符串作为索引 (a[str(i)])。然而,指数总是整数。请记住,第一个索引始终为 0,而不是 1。您的 for 循环从 1 开始迭代。由于第一个元素的索引为 0,因此最后一个元素的索引为 len(array) - 1,这意味着您的 for-循环应该只迭代到 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 或未定义。将 value = 0 放在 for 循环之前,它应该可以工作。

注意,索引数组或字符串时需要使用整数:

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)")

您可能想为此使用 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")`

你可以简单地做:

a = input("word - ").lower()
vowels = "aeiou"
len([letter for letter in a if letter in vowels])
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))

您使用 a[str(i)] 访问字符串中的字母,其中 str(i) 是一个字符串并且所有数组索引必须是整数,这就是错误的原因。

i 已经是一个整数,因此您应该使用 a[i] 来访问字母。

也正如@usr2564301所说,你的or陈述是错误的

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

应该是,

if letter in ["a", "e", "i", "o", "u"]: