为什么我得到" isupper没有被定义"错误?

时间:2018-06-13 06:01:09

标签: python string python-3.x

学习python并使用一些基本的字符串方法。

我有这个程序,它在字符串中找到第一个小写字符的索引:

def find_lower(word):
i = 0
while not isupper(word[i]):
    i = i+1
return i

然而,当我运行此代码时,我收到错误

builtins.NameError: name 'isupper' is not defined

我是否需要为isupper()导入模块或其他内容才能正常工作?

4 个答案:

答案 0 :(得分:3)

isupper是一种字符串方法。所以,你应该在字符串上使用它

例如,

a = "Hello"

#You can check upper on this as follows
print(a.isupper())

在您的情况下,请更改以下内容

while not isupper(word[i]):

while not word[i].isupper():
    print("Your x here")

答案 1 :(得分:2)

isupper是一个字符串方法,应由该对象调用:word[i].isupper()

答案 2 :(得分:2)

您错误地使用了isupper。它不是内置的独立功能。这是str的一种方法。文档是here

对于您不确定的任何功能,您可以参考python文档。它很好地被谷歌索引,因此当您想要了解如何使用某个功能时,谷歌搜索是一个很好的起点。

一旦完成此操作,您的find_lower会遇到更多问题。它实际上是由于逻辑错误而找到第一个大写字母的索引。

while not word[i].isupper():

如果字符不是大写字母,则继续循环,如果字符大小则停止。因此,您需要删除not

def find_lower(word):
    i = 0
    while word[i].isupper():
        i = i+1
    return i

print(find_lower('ABcDE')) # prints 2

下一个错误是,如果没有小写字符,它会离开字符串的末尾并引发异常

>print(find_lower('ABCDE'))
Traceback (most recent call last):
  File "./myisupper.py", line 11, in <module>
    print(find_lower('ABCDE'))
  File "./myisupper.py", line 5, in find_lower
    while word[i].isupper():
IndexError: string index out of range

要解决此问题,您需要将迭代次数限制为字符串的长度,这是一个需要修复的练习。

答案 3 :(得分:1)

它应该像

def find_lower(word):
  i = 0
  while not word[i].isupper():
      i = i+1
  return i