2011-09-08 93 views
10

我想创建一个函数来检查字符串的第一个字母是否大写。这就是我想出迄今:检查字符串的第一个字母是否大写

def is_lowercase(word): 
    if word[0] in range string.ascii_lowercase: 
     return True 
    else: 
     return False 

当我尝试运行它,我得到这个错误:

if word[0] in range string.ascii_lowercase 
          ^
SyntaxError: invalid syntax 

有人可以看看,并建议我做错了什么?

+0

'range'是一个内置函数,它返回一个数字范围,并且在该代码中没有任何地方。 – geoffspear

+2

避免模式'if [bool]:return True:else return False'。你可以简单地使用'return [bool]' – wim

回答

30

为什么不使用str.isupper();

In [2]: word = 'asdf' 
In [3]: word[0].isupper() 
Out[3]: False 

In [4]: word = 'Asdf' 
In [5]: word[0].isupper() 
Out[5]: True 
+0

这是一个很好的答案,但我期待了解我在编写的代码中做了什么错误,而不仅仅是寻找针对同一问题的不同解决方案。不管怎样,谢谢你。 –

+0

@gameFace好点。有时最好的解决方案是不同的解决方案。 ;) – AlG

14

这是内置字符串:

word = "Hello" 
word.istitle() # True 

但要注意,str.istitle看起来字符串中的每一个字是否是冠军套管,所以这可能会给你一个惊喜:

"Hello world".istitle() # returns False! 

如果您只是想检查字符串的第一个字符,请使用:

word = "Hello world" 
word[0].isupper() # True 
+0

@Downvoter:小心解释一下? – orlp

+1

内脏反应:在原文中,在编辑之前,你没有说清楚“Hello world”和“HELlo”等短语是否失败。 istitle检查每个单词是否满足<小写字母序列>的格式,并且不清楚这是否是由OP给出的限制。回滚downvote –

+0

谢谢,我已经看到这个,但想自己创造一些东西,而不是使用istitle()。 –

1

语法错误来源于这样的事实,你需要括号:

range(string.ascii_lowercase) 

但事实上,你不应该使用范围。这很简单:

if word[0] in string.ascii_lowercase 
+2

测试它是否在'ascii_lowercase'中可能导致本地化问题 - 最好使用isupper()。例如,如果单词是西里尔文,该怎么办?第一个字符是大写字母,但不会在'ascii_lowercase'中。 –

+0

'string.ascii_lowercase'不是一个整数,也不是'range()'的有效参数。 – geoffspear

+0

@Wooble解释为什么语法错误首先出现。因此,我写了“你不应该使用范围”,以确保我不主张使用该解决方案 –

相关问题