2016-05-10 12 views
0

私は戻り値に達するまでユーザーに単語を促し続けるその関数にしようとしています。その時点で、プログラムはユーザーが入力した大文字の単語の数を返す必要があります。入力された単語がPython 3のループ内の大文字であるかどうかを調べる

これまでの内容

def upper(): 
    while True: 
     x = input('Please enter word: ') 
     if x.strip() == "": 
      break 
    print(len(x.split())) 
upper() 

大文字がループするたびに正確にどのようにカウントされますか?私はprint(len(x.split()))を試しましたが、それは最後の繰り返しに対してゼロを返すだけです。

-------------------------------編集

def upper(): 
    while True: 
     x = input('Please enter word: ') 
     if x.strip() == "": 
      break 
    capitalLetters = 0 
    for letter in x: 
     if letter.isupper(): 
      capitalLetters += 1 
    upper() 

答えて

1

このソリューションでは、リストの内包表記を作成し、

capitalLetters = 0 
for letter in word: 
    if letter.isupper(): 
     capitalLetters += 1 
:その後、資本とされている文字は、そのリストの長さ

capitalLetters = len([letter for letter in x if letter.isupper()]) 
print(capitalLetters) 

ます。また、各文字をループとforループを定期的に使用し、その資本かどうかを確認し、変数をインクリメント可能性を取得しますあなたのコードの場合

def upper(): 
    while True: 
     x = input('Please enter word: ') 
     if x.strip() == "": 
      break 
     capitalLetters = 0 
     for letter in x: 
      if letter.isupper(): 
       capitalLetters += 1 
     print(capitalLetters) 
upper() 
+0

ブレーク後に実装されていますか? –

+0

あなたはそれを前または後に置くことができ、それでも動作すると思いますが、ベストプラクティスは後になると思います。 if文の内部にないことを確認してください。 – Keatinge

+0

私は間違って追加する必要があります。私は "NameError:name 'word'が定義されていません。 –

2

ここでは、アイデアはこれです

numUppers = lambda s: sum(map(lambda c: 65 <= ord(c) <= 90, s)) 
+0

どうして 'map(str.isupper、...)'? – zondo

+1

私は宿題についての複雑な答えを与えたくない、とidunno。 –

1

をバディ行く:

count=0 
countTotal=0 
for c in x: 
    if c >= 'A' and c <= 'Z': 
     count++ 
countTotal += count 

あなたが入力された各単語のカウントを行う必要があり、その後、キープcountTotal変数を使用して、すべての単語の大文字を集計します。

関連する問題