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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

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

Q&A

4回答

1224閲覧

atcoder ABC122 B "ATcoder" 自分のコードの誤りがわからない(python)

takuma1229

総合スコア11

Python 3.x

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

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

0グッド

0クリップ

投稿2021/06/30 08:41

編集2021/06/30 12:54

前提・実現したいこと

atcoder beginner contest122のB問題"ATcoder"を解いています。
ABC122 B ATcoder

他の人のコード等を見て解き方は理解できたのですが、自分のソースコードのどこが誤っていて動いていないのかが理解できません。
具体的には、li.append(count)をしているのに、リストにcountが追加されていないようです。

間違いを教えてくださるとありがたいです。

追記:
皆様のアドバイスを受けて、コードを変更しました。
具体的には、入力が1文字であった時にエラーが起こらないように修正いたしました。

修正後のコードを追記します

ソースコード(修正前)

python

1S = list(input()) 2n = len(S) 3count = 0 4li = [] 5for i in range(n): 6 if S[i] == "A" or "C" or "G" or "T": 7 count += 1 8 else: 9 li.append(count) 10 count = 0 11print(max(li))

###ソースコード(修正後)

python

1S = list(input()) 2n = len(S) 3count = 0 4li = [] 5for i in range(n): 6 if i != n-1: 7 if S[i] == "A" or S[i] == "C" or S[i] == "G" or S[i] == "T": 8 count += 1 9 else: 10 li.append(count) 11 count = 0 12 if i == n-1: 13 count += 1 14 li.append(count) 15if len(S) == 1: 16 if S[0] == "A" or S[0] == "C" or S[0] == "G" or S[0] == "T": 17 print(1) 18 else: 19 print(0) 20else: 21 print(max(li))

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

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

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

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

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

guest

回答4

0

テストケースがatcoder_testcasesで公開されています。
SHINJUKUの正答は0ですが1となります。より単純な例ではZZも。
難しく処理しすぎていると思います。もう少し単純に判定できます。

投稿2021/06/30 13:38

can110

総合スコア38341

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

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

0

他の人が書いてる条件のところは修正したとして、Sの末尾が "A" or "C" or "G" or "T" の文字列の場合どうなりますか?

投稿2021/06/30 09:55

satoshih

総合スコア799

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

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

takuma1229

2021/06/30 12:54

回答ありがとうございます! ご指摘の通り、Sの末尾がacgtだとlistにcountが追加されておらずエラーが出ていました! 修正後のコードを追記します。 しかし、まだWAが3つ出てしまっています。。。 何が問題か教えていただけると大変ありがたいです。
satoshih

2021/07/01 00:57

if i == n-1: count += 1 li.append(count) の部分、末尾がなんの文字でも+1してるので、Sが "AZ" とかだと2になりませんか?
guest

0

S[i] == ("A" or "C" or "G" or "T")
では間違いでしょうね。

python

1>>> print(("A" or "C" or "G" or "T")) 2A 3>>> print('T' == ("A" or "C" or "G" or "T")) 4False

これを修正してもしなくても、入力が1文字の場合は実行時エラーになります。
自分の書いたコードにいろいろな入力をして結果を確認しましょう。

投稿2021/06/30 09:35

ppaul

総合スコア24670

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

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

takuma1229

2021/06/30 12:49

ありがとうございます!その通りだったようです。 ご指摘のケースに対応できるよう修正しました。
guest

0

if S[i] == "A" or "C" or "G" or "T":

って、
if (S[i] == "A") or "C" or "G" or "T":
って動作になるけど、そんでいいんでしょうか

投稿2021/06/30 08:45

y_waiwai

総合スコア88042

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

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

takuma1229

2021/06/30 08:48

なるほど!!! いえ、求めている動作はif S[i] == ("A" or "C" or "G" or "T")です! ちょっと変更してみます!
takuma1229

2021/06/30 08:50

変更したらリストにcount自体は追加されたのですが、 サンプルケースの"ATCODER"を標準出力に設定すると、3になるはずの出力が1と返ってきてしまいます。。。
y_waiwai

2021/06/30 08:53

求めてる動作ってのは S[i] == "A" or S[i]=="C" or S[i]==なんたら... ってのなんでは。
takuma1229

2021/06/30 08:58

そのように実装したのですが、テストケースでWAが2つ、REが3つ出てしまいました。。。どうやらどこか間違いがあるようです
y_waiwai

2021/06/30 09:00

まあ、別のとこにもなんかあるんでしょうね #問題読んでない
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問