前提・実現したいこと
英文を受け取って母音の数をカウントし、頻度の多い順にタプルで返す関数を作りたい。
発生している問題・エラーメッセージ
関数が定義できていないと言われてしまう
###言語名
Python
Python
1def vowels_sort(s): 2 #大文字に統一 3 ups = s.upper() 4 5 #母音文字の出現回数をカウント 6 c_a = ups.count('A') 7 c_e = ups.count('E') 8 c_i = ups.count('I') 9 c_o = ups.count('O') 10 c_u = ups.count('U') 11 12 rdic = {} 13 rdic[c_a]=['A'] 14 15 if c_e not in rdic: 16 rdic[c_e]=[] 17 rdic[c_e].append('E') 18 19 if c_i not in rdic: 20 rdic[c_i]=[] 21 rdic[c_i].append('I') 22 23 if c_o not in rdic: 24 rdic[c_o]=[] 25 rdic[c_o].append('O') 26 27 if c_u not in rdic: 28 rdic[c_u]=[] 29 rdic[c_u].append('U') 30 31 #出現回数の降順に逆引き辞書を引いていき、その回数出現した文字を得る 32 freq_to_char_keys = list(rdic.keys()) #逆引き辞書のキー、出現頻度、のリストをつくる。 33 freq_to_char_keys.sort(reverse=True) #キーを降順で整列する。 34 35 result = [] #空リストを作成 36 for freq in freq_to_char_keys: #キーから頻度を一つづつ取り出す。 37 result += rdic[freq] # 頻度に対応するリストを連結していく。 38 39 #タプルにして返す 40 return tuple(result)
###入力
Python
1print((vowels_sort("Is this a pen?") == ('I', 'A', 'E', 'O', 'U')) 2 or (vowels_sort("Is this a pen?") == ('I', 'A', 'E', 'U', 'O')) 3 or (vowels_sort("Is this a pen?") == ('I', 'E', 'A', 'O', 'U')) 4 or (vowels_sort("Is this a pen?") == ('I', 'E', 'A', 'U', 'O')))
エラーメッセージ
NameError Traceback (most recent call last) <ipython-input-6-0632e14ec1e2> in <module> ----> 1 print((vowels_sort("Is this a pen?") == ('I', 'A', 'E', 'O', 'U')) 2 or (vowels_sort("Is this a pen?") == ('I', 'A', 'E', 'U', 'O')) 3 or (vowels_sort("Is this a pen?") == ('I', 'E', 'A', 'O', 'U')) 4 or (vowels_sort("Is this a pen?") == ('I', 'E', 'A', 'U', 'O'))) NameError: name 'vowels_sort' is not defined
補足情報(FW/ツールのバージョンなど)
別のエラーメッセージも出てしまいました。
------------------------------------------------------------------------ IndexError Traceback (most recent call last) <ipython-input-11-0632e14ec1e2> in <module> ----> 1 print((vowels_sort("Is this a pen?") == ('I', 'A', 'E', 'O', 'U')) 2 or (vowels_sort("Is this a pen?") == ('I', 'A', 'E', 'U', 'O')) 3 or (vowels_sort("Is this a pen?") == ('I', 'E', 'A', 'O', 'U')) 4 or (vowels_sort("Is this a pen?") == ('I', 'E', 'A', 'U', 'O'))) <ipython-input-9-aba722a3ba90> in vowels_sort(s) 23 result = [] 24 ---> 25 result.append(rdic[freq[0]].pop(0)) 26 result.append(rdic[freq[1]].pop(0)) 27 result.append(rdic[freq[2]].pop(0)) IndexError: pop from empty list
コードが読みづらいです。読めるように編集していただけないでしょうか。
コードブロックのマークダウンをつかってください。
https://teratail.com/help#about-markdown
```python
ここにコードを書く
```
また、実際に出力されるエラーを書いてください。
このサイトの仕様ではコードブロックのマークダウンを使わないとインデントがすべて消えます。逆に、使えば#などはそのまま表示されます。
ご指摘ありがとうございます。編集したのでよろしくお願いします。
とりあえず最後の行のdef vowels_sort(s):
は要らない気がします
追記に関してはーエラー部分のコードが載ってないと回答無理です
コードはこれで全部です。
result.append(rdic[freq[0]].pop(0))のような記述が示されているコードに見当たりませんが?
回答1件
あなたの回答
tips
プレビュー