質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

583閲覧

listの中の要素の一つが実行されない

Kiri3

総合スコア17

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2グッド

2クリップ

投稿2020/03/12 13:43

編集2020/03/14 12:37

IDLEを使用

目的

words.txtの中からそれぞれのアルファベットから始まる言葉の数をカウントしてprintし、最後に一番多いアルファベットをもう一度printする(英語を無理やり翻訳したので間違っていたらすいません)

python

1words = open('words.txt','r') 2letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 3x = 0 4cnt = 0 5num = 0 6y = 0 7for w in words: 8 l = letters[x] 9 w = w.lower() 10 11 if w[0] == l: 12 cnt += 1 13 else: 14 print(letters[x],':',cnt) 15 if num < cnt: 16 num = cnt 17 cnt = 0 18 y = letters[x] 19 x += 1 20 else: 21 cnt = 0 22 x += 1 23print(y,':',num) 24

試したこと

学校の授業でやったものです。
今まで習ったものを使って作っていて、コードは先生に確認したのであってると思います。
しかし、実行した時にzの結果だけが表示されずに、yで止まってしまい、最後のprintが実行されてしまいます。エラーの表示はありません。先生も原因はわからないと言っていました。友達も同じ状況になっているので、自分だけではないと思います。他のテキストエディタ(Atom, Xcord)も試しました。

解決法と原因を知りたいです。

使ったファイル

words.txt

追記:
’他のユーザからのアドバイスにより追加検証’
listの後ろの部分を抜いてやると、 ’l = letters[x] IndexError: list index out of range’ というエラーが表示され、前の部分を抜いてやると、結果が全て’0’で表示され、前者と同じエラーが出ました。

DrqYuto, s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/03/12 14:02 編集

「a」「b」「b」の3行のみのような単純なファイル例を試してみれば明らかですが コードに問題があるように思えます。 コード(先生?)があっていることはどのようにして確認されましたか?あるいは問題は正しいですか?
Kiri3

2020/03/14 12:32

そういう検証はやっていませんでした。貴重な情報ありがとうございます。 試したところ、listの後ろの部分を抜いてやると、 ’l = letters[x] IndexError: list index out of range’ というエラーが表示され、前の部分を抜いてやると、結果が全て’0’で表示され、前者と同じエラーが出ました。
can110

2020/03/14 13:46

リストというのがlettersを指しているのであれば、入力データ(a~zすべてが含まれる)においてエラーが出るのは試すまでもなく明らかだと分かるのですが、なぜそれを試そうと思われたのでしょうか?
Kiri3

2020/03/15 09:43

26字の中でひとつでもかけていればエラーが出るけど、Lettersにアルファベットa~zが全て含まれる場合、'エラー'は出ないんです。理由は分かりませんが...
guest

回答2

0

ベストアンサー

異なる文字が出てきたときに、プリントするようになっていますが、zの次は異なる文字が出てこないのでプリントされません。
安易に修正すると、

Python

1ords = open('/home/t/lib/words','r') 2letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 3x = 0 4cnt = 0 5num = 0 6y = 0 7for w in words: 8 l = letters[x] 9 w = w.lower() 10 11 if w[0] == l: 12 cnt += 1 13 else: 14 print(letters[x],':',cnt) 15 if num < cnt: 16 num = cnt 17 cnt = 0 18 y = letters[x] 19 x += 1 20 else: 21 cnt = 0 22 x += 1 23print(letters[x],':',cnt) 24if num < cnt: 25 num = cnt 26 y = letters[x] 27print(y,':',num)

投稿2020/03/12 14:17

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kiri3

2020/03/16 00:25

うまくいきました!ありがとうございます。
guest

0

変数名前を変えて すこしわかりやすくしてみました。
wc.py

python3

1import string 2 3LETTERS = list(string.ascii_lowercase[0:26]) 4 5words = open('words.txt','r') 6count = 0 7ch_idx = 0 8max_count = 0 9max_ch = ' ' 10 11ch = LETTERS[ch_idx] 12for w in words: 13 if w.lower()[0] == ch: 14 count += 1 15 continue 16 17 print(ch, ':', count) 18 if max_count < count: 19 max_count = count 20 max_ch = ch 21 22 count = 0 23 ch_idx += 1 24 ch = LETTERS[ch_idx] 25 26print(ch, ':', count) 27if max_count < count: 28 max_count = count 29 max_ch = ch 30 31print(max_ch, ':', max_count)

実行例
イメージ説明

投稿2020/03/14 02:03

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kiri3

2020/03/16 00:27

import stringバージョンも真似して作らせてもらいました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問