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

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

ただいまの
回答率

90.61%

  • Python 3.x

    5918questions

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

python

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 602

berry

score 52

プログラミング!!!

キーボードからa,b,c,d 4個の数字を入力し、aからbの間の数値で、cで割ってd余る数値の合計を求めなさい。

a=100 b=2000 c=17 d=4

プログラムのソースを教えてください。 yahooの知恵袋でこんな問題を見つけました。

a = int(input('a:'))
b = int(input('b:'))
c = int(input('c:'))
d = int(input('d:'))

while True:
    a = a + 1
    if a == b:
        break
    
    if a % c ==d:
        print(a)
        sum(a)

Traceback (most recent call last):
  File "/home/tkberry/prob1.py", line 13, in <module>
    sum(a)
TypeError: 'int' object is not iterable
というふうになり最後の合計がうまく行きません。どうしたら良いでしょう?
回答のほどよろしくおねがいします。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+1

リスト内包表記をつかって、問題文に従って素直に書けば下記のような感じでしょうか。
("間"の解釈はa以上、b以下にしました)
sum([x for x in range(a, b + 1) if x % c == d])
ただ、sum()に渡す事になる配列は等差数列ですので、最初の値と個数を求めて
等差数列の総和の公式を当てはめるのが一番速いと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/08/04 21:40

    僕も等差数列の和の公式は頭によぎったのですが,さすがにえげつないかと思いました.
    そういえばpythonでは,リスト内包にifが使えるんですね!学ばせていただきました.

    キャンセル

checkベストアンサー

0

私の知識不足なのかもしれませんが,
total = 0
while a < b:
  if a % c == d:
    total += a
  a += 1
print(total)
のようにしないといけないような気がします・・・
sum()関数はint型の変数aには使えないので,sum(a)はおかしいと思います.

sumを使う場合は,リストを使った以下のようなものになるかと重います.
total = []
while a < b:
  if a % c == d:
    total.append(a)
  a += 1
print(sum(total))

ちなみに,「aからbの間の数値」は定義が曖昧です.
a以上b以下なのか,aより大かつbより小,のどちらかが区別できていません.
(私はa以上b以下でコーディングしました)
また,aが最初からb以上である場合には無限ループになります.
あまりよいプログラムではないですね・・・

for文を使うとこんなかんじでしょうか.
total = 0
for i in range(a, b+1):
  if i % c == d:
    total += i
print(total)

賢くやるとこんなかんじでしょうか.
start = int((a - d - 1) / c + 1) * c + d
print(sum(range(start, b+1, c)))
cとbが大きくなれば,値を1つずつ確かめるより,
一度最初にcで割ってd余る最小の数を見つけ,以降はcを足していく,
という方法のほうが高速に値を見つけることができます.

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/08/04 21:36

    ありがとうございました!

    キャンセル

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

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

関連した質問

  • 解決済

    [Laravel]ラジオボタンにInput::oldを適用するには?

    Laravelでサイトを構築しています。 通常は、フォーム入力時にバリデーションに失敗するとフォームに戻り、エラーメッセージを表示し、Input::oldの値を表示するようにしてい

  • 解決済

    JavaScriptでArrayの合計を求めたい

    下記のコードでdata(氏名、年齢)を入力された3つのものの年齢の合計を求めたいです。 どうすればうまくいきますか? var data = new Array(5); data[

  • 解決済

    javascriptで入力チェックをしたいです。

    HTMLのテキストボックスにボタンを押して送信後に、 そのテキストボックスの右か下でもどちらでもよいので appendを利用してabcという値を表示をしたいです。 テキストボック

  • 解決済

    JSで入力された数字を表示して足していくコード

    下記のコードは「つもり貯金」というアプリケーションです 合計の貯金金額を <div id="sum"></div>に表示したいのですがうまくたし算ができません どうすればできますか

  • 解決済

    javascriptによるフォームからの値取得について

    フェームに設問を数十文作りラジオボタンで選択させたvalueを加算したいのですが、上手く動きません。 問1〜〜〜〜〜〜〜〜〜〜〜 <label><input type="rad

  • 解決済

    c# 入力について

    c#初心者です。 以下のような場合にどのようなコードを書けばよいのか分かりません。 ・2つの数値をスペース区切り(改行ではない)で入力し、結果として大きい方を出力するような場合

  • 解決済

    JSPでinputタグのname属性をまとめたい

    お世話になっております。 JSP+Servletで開発を進めています。 フォームの中でINPUTタグのname属性をまとめるような方法があったような気がするのですがどのよう

  • 解決済

    cakephp2 formタグに enctype="multipart/form-data"を入れる...

    追記しました。 cakephp2.10 で、 前回、以下のアップロードプラグインでcakephp2画像アップロードされない旨を質問させていただきましたが、 https://tera

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

  • Python 3.x

    5918questions

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