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

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

詳細はこちら
Python 3.x

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

Q&A

解決済

3回答

573閲覧

for文を使いリストの要素すべての積の求め方

GuMasi

総合スコア73

Python 3.x

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

0グッド

0クリップ

投稿2020/01/05 05:56

for文を使いリストの要素すべての積を求め答えは変数answerとし最後にprint()するにはどのようにすれば可能でしょうか?

(例)

python3

1list = [1,3,5,7,9] 2 3answer = 1 4 5

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

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

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

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

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

guest

回答3

0

ベストアンサー

こんにちは

まず、本題とは関係ありませんが、ご質問のコードにある listという変数名は、組み込み型のlistと被るので、避けたほうがよいかと思います。ですので下記では lis という変数名にしています。

ご質問のコードは、他の回答者の方々もお答えされているように、ひとまず以下でよいかと思います。

python

1lis = [1, 3, 5, 7, 9] 2 3answer = 1 4 5for x in lis: 6 answer *= x 7 8print(answer)

ただ、上記だと、初期値が 1 である answer に lis の最初から最後の要素までを掛けていくので

  • 1 × 1 × 3 × 5 × 7 × 9

という掛け算を計算していることになります。これを、lis の要素だけの掛け算

  • 1 × 3 × 5 × 7 × 9

をしているコードにするには、answer = 1 の行を修正して、例えば以下のようにします。

python

1lis = [1, 3, 5, 7, 9] 2 3answer, *lis = lis # このように修正 4 5for x in lis: 6 answer *= x 7 8print(answer)

上記のコードにある

python

1answer, *lis = lis

によって answer にもともとのリストの先頭要素である 1 が入り、 2番目の要素以降のリスト [3, 5, 7, 9]lis に再代入されます。これによって、次からの for ループでは、もともとのリストの2番目以降の要素が、(もともとのリストの先頭要素の入っている) answer に、順次掛け合わされていきます。

以上、参考になれば幸いです。

投稿2020/01/05 08:14

jun68ykt

総合スコア9058

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

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

GuMasi

2020/01/05 12:45

こんばんわ。 回答してくださりありがとうございます。 > listという変数名は、組み込み型のlistと被るので、避けたほうがよいかと思います。 >>ご指摘いただきましてありがとうございます。 >answer にもともとのリストの先頭要素である 1 が入り、 2番目の要素以降のリスト [3, 5, 7, 9] がlis に再代入されます。これによって、次からの for ループでは、もともとのリストの2番目以降の要素が、(もともとのリストの先頭要素の入っている) answer に、順次掛け合わされていきます。 >>そうなのですね、ご丁寧に教えていただきましてありがとうございます。 とても勉強になりました。
jun68ykt

2020/01/05 13:06

どういたしまして。参考になれば幸いです。
guest

0

3 つの方法でかいてみました。(3 つ目はおまけ的)

m.py

python3

1 2answer = 1 3for e in nums: 4 answer *= e 5 6print(answer) 7 8answer = 1 9for i in range(len(nums)): 10 answer *= nums[i] 11 12print(answer) 13 14answer = [nums[0:-1], nums[-1]] 15for i in range(len(answer[0])): 16 print(answer) 17 answer = [answer[0][0:-1], answer[1] * answer[0][-1]] 18 19print(answer[1])

実行例:
イメージ説明

投稿2020/01/05 07:22

katoy

総合スコア22324

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

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

GuMasi

2020/01/05 12:30

回答してくださりありがとうございます。 複数の方法を教えていただきまして大変勉強になりました。
guest

0

単純に答えを出すだけでしたら…

Python

1# forを使う場合 2list = [1,3,5,7,9] 3 4answer = 1 5 6for i in list: 7 answer *= i 8 9print(answer) 10 11 12# forを使わない場合 13import functools 14import operator 15 16list = [1,3,5,7,9] 17 18answer = functools.reduce(operator.mul, list) 19 20print(answer)

投稿2020/01/05 06:03

編集2020/01/05 06:25
frederick_1974

総合スコア303

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

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

GuMasi

2020/01/05 06:19

回答していただきましてありがとうございます。 forからはじまります記述で同じ答えの結果を出すようにとかも可能でしょうか?
frederick_1974

2020/01/05 06:26

失礼しました。forを使って計算するというのが質問でしたね。コードを修正しました。
GuMasi

2020/01/05 12:06

ありがとうございます、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問