2011-09-08 192 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解釋爲什麼語法錯誤首先出現。因此,我寫了「你不應該使用範圍」,以確保我不主張使用該解決方案 –

相關問題