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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

2723閲覧

不正解の理由が分からない(文字列処理問題)

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

1グッド

0クリップ

投稿2017/05/17 12:34

編集2017/05/17 12:42

会津オンラインジャッジ(AOJ)の問題を解いています。
AOJ上で処理された出力結果(下記)を見ると、正解と一致しているように見えるのですが不正解となってしまいます。
色々試したのですが原因がわかりません。なぜ不正解となってしまうのでしょうか?

問題: AOJ ITP1_8 文字のカウント

私の解答

import sys # { 英字1文字 : 0 } の辞書をa-zまで作成 abc = "abcdefghijklmnopqrstuvwxyz" Dict = { chr:0 for chr in abc} # 入力された文字を全て小文字化 Str = [] for line in sys.stdin: Str += line.lower() # 空白やアポストロフィなど、英文字以外の除去 StrReplace = "" for chr in Str: if chr.isalpha(): StrReplace += chr # 辞書で文字の出現回数をカウント for chr in StrReplace: Dict[chr]+=1 # コロン区切りで結果の出力 for k,v in Dict.items(): print("{} : {}".format(k,v))

AOJ上での出力結果(テストケース1)

Judge Output #1 ( out1.txt | 156 B) a : 1 b : 0 c : 0 d : 0 e : 1 f : 0 g : 0 h : 1 i : 2 j : 0 k : 0 l : 0 m : 0 n : 1 o : 0 p : 1 q : 0 r : 0 s : 2 t : 1 u : 0 v : 0 w : 0 x : 0 y : 0 z : 0

追記:以下は他の解答で、正解となっている出力結果です。(スペース等含め、私には同じように見えるのですが..)

Judge Output #1 ( out1.txt | 156 B) a : 1 b : 0 c : 0 d : 0 e : 1 f : 0 g : 0 h : 1 i : 2 j : 0 k : 0 l : 0 m : 0 n : 1 o : 0 p : 1 q : 0 r : 0 s : 2 t : 1 u : 0 v : 0 w : 0 x : 0 y : 0 z : 0
honami👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

Python

1for k,v in Dict.items():

この順序が不定だからだと思います。ソートしてください。

投稿2017/05/17 13:14

Zuishin

総合スコア28660

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

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

退会済みユーザー

退会済みユーザー

2017/05/17 13:41

ご指摘の通り該当部分を以下に変更したら正解しました。ありがとうございました。 以前もソートがネックで躓いているところを助けて頂いたので、今後は辞書のソートに注意します。 SortKey = sorted(Dict.keys()) for key in SortKey: print("{} : {}".format(key,Dict[key])) しかし、元のコードでもAOJ上で出力された結果(Judge Output)は正解と全く同じに見えます。 出力結果(Judge Output)は同じなのに、ソートの有無でエラーが出るのはどうしてでしょうか? (出力結果を出力するマシンとは別の環境で正誤判定をしているとかでしょうか)
Zuishin

2017/05/17 13:49

うーん、中の人に聞かないとわかりませんね。しかし、辞書の性質上、アルファベット順に出力される確率は大変低いので、その出力結果は提出したプログラムのものではないのかもしれません。
退会済みユーザー

退会済みユーザー

2017/05/17 14:00

追記有難うございます。 辞書の順番が保証されないことをしっかり理解し、出力時にはソートすることを心がけます。
退会済みユーザー

退会済みユーザー

2017/05/18 14:17

> その出力結果は提出したプログラムのものではないのかもしれません。 すみません、私の勘違いでした。その後色々と試してみると、ご指摘の通り「Judge Output」は正解を表示しているだけで提出コードの実行結果とは無関係でした。本当にすみません。
guest

0

Pythonでコードを書いたことが無いので的外れかも知れませんが、paizaで実行するとアルファベット順では出力されませんでした。
辞書って、入力順の並びは保障してくれるのでしょうか?

後は、制限事項に関する考察が無いからとか?

Constraints

英文が含む文字の数 < 1200

投稿2017/05/17 13:16

hirohiro

総合スコア2068

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

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

退会済みユーザー

退会済みユーザー

2017/05/17 13:46

コメント頂きありがとうございます。ご指摘のようにソートを使う事で正解できました。 ただ、AOJは(Judge Output)として実行結果を出力してくれるのですが、出力結果はソートの有無に関わらず同じなのに、ソートを使った場合だけ正解となり、少し不思議です。
hirohiro

2017/05/17 14:14

全数値ランダムで出力しても、たまたま正解の回答を出すケースだってありますしね。 むしろ精度の高い評価をしていると言えるのではないでしょうか? もし実際に使うプログラムを作成した場合、こういう不具合こそ発見が難しく重要なタイミングで再現して問題になったりします。
退会済みユーザー

退会済みユーザー

2017/05/17 15:16

そうですね、AOJの厳密な判定に感謝しつつ、辞書の使い方をしっかり覚えたいと思います。 追記頂きありがとございました。
退会済みユーザー

退会済みユーザー

2017/05/18 14:18

すみません、「Judge Output」はただ正解を表示しているだけで、提出コードとは無関係でした。 今後はコード以前に、単純な勘違いにも気を付けたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問