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

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

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

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

Q&A

解決済

5回答

7461閲覧

7の倍数が何個あるか表示する方法

star999

総合スコア4

Python

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

0グッド

0クリップ

投稿2020/10/31 15:06

10,000個の中から7の倍数が何個あるかを数えてくれるようなプログラムを作りたいのですが、

個数をうまく表示することができません。

コード:

a = list (range(1:10001))

for i in a :
if i%7 ==0:
print(i)

このプログラムだと該当する数字が縦に表示されてしまいます。
個数を表示したいのですが行き詰っています。
教えてください。

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

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

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

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

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

guest

回答5

0

ベストアンサー

rangeをうまく使うことで簡単に求めることができます。
7から始まって、10000までの、間隔7のrangeオブジェクト の長さが、求めるものです。

Python

1print(len(range(7, 10001, 7)))

投稿2020/10/31 16:14

toast-uz

総合スコア3266

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

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

star999

2020/11/02 07:04

rangeでこんなことができるなんて知りませんでした。勉強になりました。
toast-uz

2020/11/02 09:20

ありがとうございます。「7の倍数」というお題の構造を崩さない、ギリギリを攻めてみました笑
guest

0

ans = sum(map(lambda x: x%7 == 0), arr)

投稿2020/10/31 15:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lehshell

2020/11/01 09:27

) の位置がおかしいかな #ans = sum(map(lambda x: x%7 == 0), arr) ans = sum(map(lambda x: x%7 == 0, arr)) ですね。つまり ans = sum(map(lambda x: x%7 == 0, range(1,10001))) でいいですね。
star999

2020/11/02 07:07

ありがとうございました。
guest

0

このプログラムだと該当する数字が縦に表示されてしまいます。

for文によるprint()は性質上、都度改行された状態で縦に列挙・出力される仕組みになっています。

その為1度の出力で横並びに出力したいという事であればリストに追加してしまう
または、カウントする為の変数を用意して変数に都度+1してあげるなどが良いでしょう。

sample

1a = list (range(1,10001)) 2b = [] 3cnt = 0 4for i in a : 5 if i % 7 == 0: 6 b.append(i) 7 cnt += 1 8 9print(len(b)) 10print(cnt)

またわざわざfor文を使わずとも
toast-uzさんが回答されているrange関数の活用が一番スマートで素晴らしい出力方法だと思います。

投稿2020/11/01 03:59

編集2020/11/01 09:20
nto

総合スコア1438

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

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

Zuishin

2020/11/01 04:17 編集

for を使わなくて良いならわざわざ range を使わなくても 10000 を 7 で割って小数点以下を切り捨てるのが一番スマートだと思います。いや、10000 と 7 が固定ならむしろ計算をしなくても定数で大丈夫です。
nto

2020/11/01 04:10 編集

質問内容にもあるrange(1:10001)である事を前提とした回答です。
Zuishin

2020/11/01 04:11

それを前提に選んだ理由は?
nto

2020/11/01 04:16

質問内容にあるからです。 「一番スマート」という所に引っかかったのでしょうね。 ニュアンスとしては、ここにある回答の中で~という意味でのものでした。 また「range を使わなくても~」までなってしまうと、質問内容自体全否定になると思うので、できる限りそれにそった形での回答をしたつもりです。
Zuishin

2020/11/01 04:17

質問内容にある間違ったコードの中からその部分だけ前提とした理由を聞いています。
nto

2020/11/01 04:23

ああ、気づきませんでした。今修正しました。ありがとうございます。 コピペを指摘したいなら周りくどく言わずにそう言ってくれればわかりやすいです。 「それを前提に選んだ理由は?」という問いでは「質問内容にある間違ったコードの中からその部分だけ前提とした理由を聞いています」という意図は伝わりません。
Zuishin

2020/11/01 04:27

回りくどいのではなく、そちらが本題です。質問者が間違っていることからも、その部分が重要でないことは明らかです。
nto

2020/11/01 04:36

誤植を指摘したいという事ならば、そのままコピペによる誤植をご指摘ください。 選んだ理由についてということならば、返答は差し上げたはずです。 どちらも指摘したいと言う事ならば以後はその折りにその旨をどちらもご指摘いただければ幸いです。
Zuishin

2020/11/01 04:44 編集

質問者は、これが課題の丸投げであることを隠すために、その課題によって生徒に何が求められているのかを隠しています。私は for と if こそが最も重要な部分だと認識しました。基本中の基本だからです。 課題の丸投げであるが故に常連から無視されている質問で、課題の本質を無視した上で、O(1) でできる質問に O(n) の解法がスマートだと言うのは的外れです。
nto

2020/11/01 05:07

「「恐らくは課題の丸投げだろう」と憶測を抱く」というのは理解ができます。 ただ、あくまでその憶測を元で批判を行うべきではないと思います。 回答が的を射ていない・お門違いと感じたならば低評価ボタンを押しましょう。 そういった回答の優位性や情報としての価値をあげない為のボタンです。 不要な投稿であると感じたら通報ボタンを押したり、コメントで回答者に対して回答の削除のリクエストを行う等も1つの案ではないでしょうか。 低評価が付けば私としても回答として間違えた回答をしていたのだなと理解がしやすいでしょう。
Zuishin

2020/11/01 05:52

間違っているので低評価しました。
Zuishin

2020/11/01 06:06 編集

あと、課題でないという前提で書いているようですが、そうであれば無駄すぎます。こんなことをしなくても既に書いた通り print(10000 // 7) で一行で済みます。行数だけでなく計算量も O(1) になります。
nto

2020/11/01 07:32 編集

Zuishinさんがおっしゃる様に質問内容だけを見れば端的にprint(10000//7)という回答がベストでしょう。 私は掲示されているコードを元に質問内容に回答をしただけです。掲題のコードでは1~10000までの整数を列挙したリストを参照したコードを提示して質問を提起されていた為、元々のコードを極力改変しすぎない程度に回答をしました。 低評価や回答例については今後の回答時の参考になります。ご指摘ありがとうございました。
Zuishin

2020/11/01 08:59 編集

低評価したのは間違っているからです。文法エラーがあります。これまではこの回答の間違ったところを度外視して「スマートではない」という話をしていましたが、低評価してほしいということなので。
star999

2020/11/02 07:02

お二人方、コメントありがとうございます。 プログラミングを先週から初めまして、わからない箇所があったため お聞きしました。 決して課題をサボっているわけではありません。プログラミングを教えてくれる人が身近にいないため、こちらで質問いたしました。。。
guest

0

こんな感じのことでしょうか。

python

1a = range(1,10001) 2c = 0 3for i in a : 4 if i%7 ==0: 5 c += 1 6print(c)

投稿2020/10/31 15:20

QuickSolver

総合スコア12

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

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

star999

2020/11/02 07:04

うまくできました。ありがとうございます。
guest

0

p.py

pythpn3

1import random 2 3data = range(1, 100) 4count = 0 5for x in data: 6 if x % 7 == 0: 7 count +=1 8print(count) 9 10data = [random.randint(0, 7) for _x in range(0, 10)] 11print(data) 12count = 0 13for x in data: 14 if x % 7 == 0: 15 count +=1 16print(count) 17 18print(list(filter(lambda x: x % 7 == 0, data))) 19print(len(list(filter(lambda x: x % 7 == 0, data))))

他にもいろりおな方法が可能です。
以下のページなどを参照してみてください、

参考情報

  • PythonのCounterでリストの各要素の出現個数をカウント

https://note.nkmk.me/python-collections-counter/

投稿2020/11/01 22:37

katoy

総合スコア22324

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

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

star999

2020/11/02 07:06

色んなやり方があるんですね。参考にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問