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

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

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

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

Q&A

2回答

1633閲覧

テキストファイルにある 100 個の数を全部足したときの,最初の 10 桁を求めたいです。

momo.hi

総合スコア15

Python

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

0グッド

0クリップ

投稿2019/07/24 15:42

編集2022/01/12 10:55

はじめに

まだまだpython言語について勉強中ですが、解決できない問題にあたってしまい
お力を借りれたらと思い投稿しました。
お手数ですが、分かる人がいれば教えてください。
宜しくお願い致します!!

目的

numbers.txt にある 100 個の数を全部足したときの,最初の 10 桁を求めたいです。

わからないこと

1.エラーの内容と解決方法
2.10桁目の出力方法

import functools import operator with open("numbers.txt") as f: numbers = list(f.read().strip()) # ファイルを読み込み、各要素が1つの数字を表すリストにする。 numbers = list(map(int, numbers)) # 文字列を int 型に変換 #最初の 10 桁を抽出するプログラム print(sum(numbers))

numbers.txtの値

37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 23067588207539346171171980310421047513778063246676 89261670696623633820136378418383684178734361726757 28112879812849979408065481931592621691275889832738 44274228917432520321923589422876796487670272189318 47451445736001306439091167216856844588711603153276 70386486105843025439939619828917593665686757934951 62176457141856560629502157223196586755079324193331 64906352462741904929101432445813822663347944758178 92575867718337217661963751590579239728245598838407 58203565325359399008402633568948830189458628227828 80181199384826282014278194139940567587151170094390 35398664372827112653829987240784473053190104293586 86515506006295864861532075273371959191420517255829 71693888707715466499115593487603532921714970056938 54370070576826684624621495650076471787294438377604 53282654108756828443191190634694037855217779295145 36123272525000296071075082563815656710885258350721 45876576172410976447339110607218265236877223636045 17423706905851860660448207621209813287860733969412 81142660418086830619328460811191061556940512689692 51934325451728388641918047049293215058642563049483 62467221648435076201727918039944693004732956340691 15732444386908125794514089057706229429197107928209 55037687525678773091862540744969844508330393682126 18336384825330154686196124348767681297534375946515 80386287592878490201521685554828717201219257766954 78182833757993103614740356856449095527097864797581 16726320100436897842553539920931837441497806860984 48403098129077791799088218795327364475675590848030 87086987551392711854517078544161852424320693150332 59959406895756536782107074926966537676326235447210 69793950679652694742597709739166693763042633987085 41052684708299085211399427365734116182760315001271 65378607361501080857009149939512557028198746004375 35829035317434717326932123578154982629742552737307 94953759765105305946966067683156574377167401875275

エラー内容

ValueError Traceback (most recent call last) <ipython-input-57-ab0025f04918> in <module>() 4 with open("numbers.txt") as f: 5 numbers = list(f.read().strip()) # ファイルを読み込み、各要素が1つの数字を表すリストにする。 ----> 6 numbers = list(map(int, numbers)) # 文字列を int 型に変換 7 print(sum(numbers)) ValueError: invalid literal for int() with base 10: '\n'

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

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

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

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

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

kairi003

2019/07/24 16:27

各行に数字が書いてあるテキストファイルなんだろうとは思いますが、numbers.txtの内容も明記するべきでは?
momo.hi

2019/07/24 16:29

遅れてすみません。生データを追記しました。
guest

回答2

0

ファイル読み込み

read()はファイル全体を一つの文字列として読み込みます。行ごとにリストとして読み込みたいならreadlines()を使いましょう。その場合listなのでstrip()はつけられません。
readlines()は改行文字を含んだ文字列の配列(例: ['123\n', '456\n'])を返しますがint()によるキャストは前後の空白文字を無視するので明示的にstrip()する必要はないです。つまりmap()部分はそのままです。

pyhton

1numbers = list(map(int, f.readlines())) 2# または内包表記で 3numbers = [int(n) for n in f.readlines()]

ただし特にリスト化にこだわりがなければ最初からforで加算していったほうがいいと思います。

python

1sum_num = 0 2for line in f.readlines(): 3 sum_num += int(line)

最初の十桁

合計値を文字列に変換して10文字目まででスライスします。スライスとは配列などから特定範囲を切り出す操作です。詳しくはググってください。

python

1sum_num = sum(numbers) 2sum_str = str(sum_num) 3print(sum_str[:10])

投稿2019/07/24 16:45

編集2019/07/24 16:52
kairi003

総合スコア1330

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

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

0

readはファイル全体を単一の文字列として読み込みます。str→listの変換は一文字ずつの文字列に分割されたlistを結果として産みます。

なのでそのコードだと一文字ずつ(0~9)を数字とみなすことになりますが、そういう要件ではないのだと思います(10桁にならないし)。

  • readlinesなどで読み込んで、行末に改行文字が残るはずなのでその対処をする
  • あるいは、readで読んだ後\nなどで区切る
  • どちらにせよ多少空文字列などが入る可能性はあるので、それも予め除く

といった前処理が必要ですかね。

投稿2019/07/24 15:49

hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問