🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

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

Q&A

解決済

2回答

590閲覧

範囲外のエラーが出てしまう

katotai1219

総合スコア5

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

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

0グッド

0クリップ

投稿2019/12/17 13:48

大学に通っているものです。課題が出てプログラミングをやっているのですが、まだまだ初心者で一日中やっててもできませんでした、、 こちらで質問するのも初めてですので説明不足だったら申し訳ございません。 課題の内容ですがファイルをダウンロードしてきてその行数と指定した行の 文を表示させるというものです。(inputを使ってやるのかなと思っています。) プログラムを実行したときに以下の結果になるようにプログラムを作りたいのです。 入力ファイルの行数= 21 表示したい行の番号を入力して下さい。:3 Beautiful is better than ugly. ### 発生している問題・エラーメッセージ indexerror list index out range エラーメッセージ

該当のソースコード>

python

1f="zen-of-python.txt" 2fp=open(f,"r") 3count=0 4a=input("いくつの行数を表示させますか?") 5for line in fp: 6 count+=1 7st=fp.readlines()[int(a)] 8fp.close 9print("入力ファイルの行数=",count) 10print(st)

> ヘディングのテキスト-

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

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

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

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

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

kyoya0819

2019/12/17 13:50

何を調べましたか? txtの内容はどのようなものですか?
katotai1219

2019/12/17 14:13

readlinesの使い方やrangeの使い方などを調べてみたのですがまだ理解しきることができませんでした txtの内容ですが The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more このような内容のものです。回答が早くてとても助かっています。ありがとうございます
guest

回答2

0

初心者かつ課題ということなので,甘めに回答をさせていただきます.
まず,ファイルの読み込みについて理解をするとよいでしょう.

  1. ファイルを読み込んだ結果,変数にはどのような内容が格納されるのか.
  2. 変数に格納されたtypeは何になるのか(list型なのか,str型なのかetc)
  3. 変数の型がわかったら,通常通りに処理を行えば良いです.例えば,list型ならば,添字をつけてlist内の要素にアクセスする.またstrなどであれば,splitlineなどを用いて行ごとに分割をするなどの処理をする

pythonには様々な関数がすでに実装されているので,関数を調べて関数の使用目的と,関数の返り値と型を丁寧に理解することが大切だと思います.

投稿2019/12/17 14:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

katotai1219

2019/12/17 16:46

mashgriさんありがとうございます。今後の勉強する時に心がけていきたいと思います。ありがとうございました!
退会済みユーザー

退会済みユーザー

2019/12/17 16:50

どういたしまして,お役に立てていれば幸いです!
guest

0

ベストアンサー

課題ということなので助言程度に回答しておきます(答えのコードそのまま載せる訳にもいかんだろうし)。

私が追加したコメントを読んで参考にしてください。

python

1f="zen-of-python.txt" 2fp=open(f,"r") 3count=0 4a=input("いくつの行数を表示させますか?") 5for line in fp: # 一行ずつ読んで行数をカウントした 6 count+=1 # (本筋とは関係なし)インデントを修正 7st=fp.readlines()[int(a)] # fpはバッファで読むと状態が変わります。読み終えると空です 8 # つまり上のforで使い果たしてしまったfpを再度使おうとしているので問題がある 9fp.close # (本筋とは関係なし)メソッド呼び出しのかっこつけ忘れ 10print("入力ファイルの行数=",count) 11print(st) 12 13# あとエラーとは関係ないので私にとってはどうでもいいが(提出するときはよくもないと思うが)、 14# そもそも質問文に示されている理想の動作とinput時の印字が一致していない

投稿2019/12/17 14:14

編集2019/12/17 14:17
hayataka2049

総合スコア30935

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

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

katotai1219

2019/12/17 14:41

hayatakaさん回答ありがとうございます。修正してなんとか回答までたどり着くことができました。しかしまた問題が出てきてしまって、リストなので0から数えるとおもうのですが1からに範囲を直さなくてはいけなくて、そのやり方にも困っていました(rangeを使うのかなと思うのですがやはりまだやり方が分かり切ってないです)もしよければヒントをお願いします。 f="zen-of-python.txt" fp=open(f,"r") count=0 a=input("表示したい行の番号を入力してください") for line in fp: count+=1 fp.close() b=open(f,"r") st=b.readlines()[int(a)] print("入力ファイルの行数=",count) print(st) ちなみにこのように修正しました。 よろしくお願いしますm(__)m
hayataka2049

2019/12/17 14:45

入力された行数を整数に変換してから1引けば良いでしょう。 # 力技で対処されている・・・一回ファイルを読めばできるので、時間があれば挑戦してみてください。
katotai1219

2019/12/17 16:45

ご返答ありがとうございます。しっかり見直したら無事できました。きちんとファイルを読む事を今後心がけていきたいと思います。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問