2012-10-22 72 views
-2

標題中的問題。我必須能夠確定在raw_input語句中是否有大寫字母。我不能使用循環。只是如果和字符串的方法。在字符串中找到大寫字母。沒有循環。只有在語句和字符串方法python

+4

那麼你嘗試過什麼? – Yuushi

+0

字符串是否有任何限制?它可以包含空白嗎?它可以包含數字嗎?其他人物?它保證是ascii? – mgilson

+1

歡迎來到Stackoverflow。我們不是「做我的作業」論壇。請發佈一個結構良好的問題,並試圖解決它,以便我們可以幫助您 – inspectorG4dget

回答

5

沒有循環 - 使用遞歸

has_capital = lambda s:s[0].isupper() or has_capital(s[1:]) if s else False 
+0

不錯的一個:)方法來解決循環問題... –

+1

功能程序員會感到驕傲: )(Answer_score ++)。任何原因,你做這個'lambda'函數,而不是一個普通的函數(我期望OP更熟悉)? – mgilson

+0

@mgilson,那就是我首先想到的。通常我是告訴別人給予lambda函數名稱的人:) –

4

如果您將只有小寫字母的字符串轉換爲小寫字母,它會自行匹配。所以,以下內容會給你帶有大寫字符串的TRUE。

mystring.lower() != mystring 
+0

如果有大寫字母,這將是False,這聽起來像問題的反面。聰明的想法,但。 –

+0

@ScottHunter - 正確。事實上,'has_upper = mystring.lower()!= mystring'絕對是我認爲可以做到的最穩健的方式。 – mgilson

+0

雖然我同意你們都提到的觀點,但問題是「找到一個資本」。對我來說,這意味着「返回大寫輸入中的字符」。這就是爲什麼「無循環」的條件使我困惑(列表理解是否被認爲是循環練習?) – inspectorG4dget

0
filter(lambda x:x.isupper(),my_string) 

雖然引擎蓋下的過濾器將是一個循環結構

也許......或

set(my_string) - set(my_string.lower()) 

轉換設置也是循環遍歷my_string所有的字母(至少我認爲)

2

使用交集操作

import string 
if set(raw_input()) & set(string.ascii_uppercase): 
    # hello 
+0

或者只編譯1個set:'set(raw_input())。intersection(string.ascii_uppercase)' – mgilson

相關問題