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

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

ただいまの
回答率

88.60%

pythonで、引数を、関数内にでてくる変数の一部にしたい

解決済

回答 4

投稿 編集

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

fu_3823

score 56

以下のようなことはできないでしょうか。

def cost(size):
    c_1_size = 50 + (0 * size)
    c_2_size = 50 + (9 * size)
    c_3_size = 100 + (9 * size)


↑こんな感じに書いたコードで、引数sizeに9を入れたとき、
 
c_1_9 = 50
c_2_9 = 131
c_3_9 = 181

このような結果を期待したいのです。
左辺は文字列として、右辺は計算結果を返してくるようにできないでしょうか。


加筆します。
c_1_size = 50 + (0 * size)
c_2_size = 50 + (9 * size)
c_3_size = 100 + (9 * size)
:::
c_9_size = 500 + (36 * size)
このような数式セットにおいて、sizeが1~9まで変わります。
右辺にsizeを代入した時の値をコストとして、合計81個のコスト計算します。それを昇順にソートして、[数式、size、コスト]を整理したいのです。
「c_2_9 = 50 + (9 * 9) = 131」であれば、第2式でsizeが9の時のコストが131、
「c_3_2 = 100 + (9 * 2) = 118」なら、第3式でsizeが2のときのコストが118という具合です。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • quickquip

    2019/12/17 11:52

    情報は質問を編集して追記しましょう。ここは"質問への追記・修正の依頼"欄です。

    キャンセル

  • quickquip

    2019/12/17 12:06

    途中 (c_4_〜c_8_)が抜けているので全部は分からないですけれど最後に欲しいのは
    [
    ('c_1_1', 1, 50),
    ('c_1_2', 2, 50),
    ('c_1_3', 3, 50),
    ('c_1_4', 4, 50),
    ('c_1_5', 5, 50),
    ('c_1_6', 6, 50),
    ('c_1_7', 7, 50),
    ('c_1_8', 8, 50),
    ('c_1_9', 9, 50),
    ('c_2_1', 1, 59),
    ('c_2_2', 2, 68),
    ('c_2_3', 3, 77),
    ('c_2_4', 4, 86),
    ('c_2_5', 5, 95),
    ('c_2_6', 6, 104),
    ('c_3_1', 1, 109),
    ('c_2_7', 7, 113),
    ('c_3_2', 2, 118),
    ('c_2_8', 8, 122),
    ('c_3_3', 3, 127),
    ('c_2_9', 9, 131),
    ('c_3_4', 4, 136),
    ('c_3_5', 5, 145),
    ('c_3_6', 6, 154),
    ('c_3_7', 7, 163),
    ('c_3_8', 8, 172),
    ('c_3_9', 9, 181),
    ('c_9_1', 1, 536),
    ('c_9_2', 2, 572),
    ('c_9_3', 3, 608),
    ('c_9_4', 4, 644),
    ('c_9_5', 5, 680),
    ('c_9_6', 6, 716),
    ('c_9_7', 7, 752),
    ('c_9_8', 8, 788),
    ('c_9_9', 9, 824),
    ]
    こういう「データ」でしょうか?

    自分で組み立てられないアルゴリズムを説明できないのは「当たり前」なわけですから、3×4 ぐらいの小さい例で、途中の式と、最終的に欲しいデータを、ぜんぶ手で書き下した方が伝わりますよ。

    キャンセル

  • fu_3823

    2019/12/17 12:37 編集

    仰る通りのデータが欲しいです。
    質問の方も追記しました。

    キャンセル

回答 4

checkベストアンサー

0

そのような目的には、普通は、辞書を使います。
おそらくこんなことがしたいのではないかと思います。

c = [{},{},{}]
def cost(size):
    global c
    c[0][size] = 50 + (0 * size)
    c[1][size] = 50 + (9 * size)
    c[2][size] = 100 + (9 * size)

cost(5)
cost(9)
cost(10)
print(c)
print(c[0][9])

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/12/17 07:04

    この場合global文は必要無いように思います。

    キャンセル

  • 2019/12/17 07:16

    あ、代入してなければいいんでしたっけ。

    キャンセル

  • 2019/12/17 08:15

    はい。副作用のある操作でも問題無くできます。

    キャンセル

0

変数名をそのまま使いたいということでしょうか・・・?
そうでしたらlocals関数を使う必要があると思いますが煩雑になると思います。

その結果を出すだけなら、

    print(f'c_1_{size} = {c_1_size}')
    print(f'c_2_{size} = {c_2_size}')
    print(f'c_3_{size} = {c_3_size}')

をcostメソッド内に追記すれば出力されます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

このような感じでどうでしょうか?

def cost(size):
    print(f'c_1_{size} = {50 + (0 * size)}')
    print(f'c_2_{size} = {50 + (9 * size)}')
    print(f'c_3_{size} = {100 + (9 * size)}')

if __name__ == "__main__":
    cost(9)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

execを使えばできるかと思います。

execとは

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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