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

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

ただいまの
回答率

90.47%

  • Python 2.7

    1308questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

なぜかout of rangeになります

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,209

dialbird

score 323

こんにちは

checkIOの問題を解いていて、どうしてもわからないので質問しました。
引数に入れたarrayの偶数要素だけを足しあわせたものに、最後の要素の数字を掛け合わせた結果を出力するという簡単なものなのですが、謎のout of rangeが出てこまっています

def checkio(array):
  #array = [0,1,2,3,4,5]
    """
        sums even-indexes elements and multiply at the last
    """
    wa = 0
    for i in range(0,len(array)):
        if i%2 == 0:
            wa += array[i]
    return array[-1]*wa  #list index out of range


となってしまいます

さらに訳のわからないことにはreturnをprintにすると、なんの問題もなく出てきます

なお、これはcheckIOないのエディターで打っているのですが、自分のエディター(brackets)では正常に起動します

何が間違っているのかどなたかご指摘お願い致します

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hiro-k

    2016/04/11 15:12 編集

    CheckIO の中のなんという問題ですか? ・・・・ 見つけました。 Elementary の中の Even the last ですね。

    キャンセル

  • dialbird

    2016/04/11 21:29

    hiro-kさん 返信が遅れました! そうですそれです!

    キャンセル

回答 3

checkベストアンサー

+1

この問題には「空の配列については、結果は常に0(ゼロ)になるでしょう。 」という付帯条件があります。

このため len(array) が 0 の場合があります。その場合には、 array[-1] も array[len(array)-1] もどちらも「list index out of range」になります。

array が空の配列だった場合に、結果を0 にするようなコードも加えてみましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/11 21:36

    hiro-kさん

    お見事です!
    解決しました!ありがとうございます!

    キャンセル

0

Ubuntu の python 2.7 で試してみましたが、out of range になることなく、結果が表示されました。
checkIO内のエディタというのがよくわかりませんが、実行もそこでやってるのでしょうか。
それならそこの特有の仕様とか問題が関係しているかもしれません。

例えば、
return array[-1]
としても out of range になるのでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/10 14:07

    yoshiさん
    ご返答ありがとうございます

    なぜかそれは通ります
    ついでにwaだけでも通ります
    しかし、かける(*)が入るとout of rangeになってしまうのです........

    キャンセル

  • 2016/04/10 14:24

    かけるだけがエラーになるというのは、ますます変ですね。
    やっぱりそこの特有の問題が絡んでると思うので、これ以上はわからないです。
    すみません。

    キャンセル

  • 2016/04/10 21:11

    そうですか........

    しかしご返答、誠にありがとうございました!
    また機会があれば是非ともお願い致します!

    キャンセル

0

array[-1]という表記に意味はあるのでしょうか?
配列の範囲外にアクセスしようとすることは思わぬ挙動を生む原因になると思いますが。

引数に入れたarrayの偶数要素だけを足しあわせたものに、最後の要素の数字を掛け合わせた結果を出力

上記の要件であれば、下記で十分ではないかと。

return  array[len(array)-1]*wa


 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/10 21:10

    Odacchiさん
    ご返答ありがとうございます

    その方法も試してはいるのですが、結果はおなじでした........
    ちなみに-1でも指定できるらしいです
    http://qiita.com/komeiy/items/971ead35d33c25923222

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonで実行時間を求めたい

    実現したいこと 10種類の疑似乱数をバブルソートで実行。 その実行時間をしりたい。 エラーメッセージ t=timeit.Tiimer("Bublesort(Random

  • 受付中

    関数の実装、matmulを利用

    追記:print(np.matmul(A, x)) まではできたのですが、それ以降はどのように書けば良いでしょうか?

  • 解決済

    pythonの画像の読み込みについて

    pythonの勉強をしています。ある画像を読み込み、それを配列化してテキストデータとしてファイルに保存したいです。 下記のようなコードを描いたのですが、これが正しく出力がされ

  • 解決済

    タプルの中の配列の連続した合計値を算出したい

    タプルの中の配列の連続した合計値を算出したいです。 total_ans =[ ( sum( [ dict( zip( a, b ) )[v] for i, v in enume

  • 解決済

    UnboundLocalError: local variable 'count' referenc...

    UnboundLocalError: local variable 'count' referenced before assignmentのエラーの原因 がわかりません。 #

  • 解決済

    Python 内包表記

    jupyter notebookでとある数列を求めるプログラムを作りました。 for文の中にあるfor文(for j in range(compare.size + 1)...)を

  • 解決済

    Python 3.x 辞書のキー値によって変換する場合の高速化

    Pythonにて、辞書(dict({key,value})を使って、list型の全要素をValue値に変換する際の、 高速化が可能かどうかをご教授いただきたいです。 dict1

  • 解決済

    DTWを実装する方法

    DTWをpythonで実装しようと思い、コードを書いてみたのですがエラーが出てしまい、理由がわからないので教えていただきたいです。 def dtw(vec1, vec2):

同じタグがついた質問を見る

  • Python 2.7

    1308questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。