Pythonで特定の値に丸める方法

フレディR

ロールプレイングゲームのキャラクターシートを自動的に作成するアルゴリズムに取り組んでいます。ゲームでは、ポイントを増やしてポイントを増やす属性があります。ただし、特定の値では、実際の属性の値を1増やすのに2ポイントかかります。特定のポイント数から開始し、各属性のデフォルト値は1です。

ポイントをランダムに割り当てるプログラムがありますが、必要に応じて切り捨てるためにこれらの値(辞書にある)を変更する方法がわかりません。

たとえば、「strength」に3ポイントを入力すると、それで問題ありません。「strength」の値は3になります(ベース1を含む)。ただし、4ポイントを入力した場合でも、値は4になります。値5を取得するには、5ポイント(およびベース1)が必要です。次に、値を取得するには、さらに2ポイントかかります。 6、3ポイントで7の値を取得し、3ポイントで8の値を取得します。

現在、属性を割り当てるために使用しているコードは次のようになります。

attributes = {}
row1 = ['strength', 'intelligence', 'charisma']
row2 = ['stamina', 'willpower']
row3 = ['dexterity', 'wits', 'luck']

def assignRow(row, p): # p is the number of points you have to assign to each row
    rowValues = {}
    for i in range(0, len(row)-1):
        val = randint(0, p)
        rowValues[row[i]] = val + 1
        p -= val
    rowValues[row[-1]] = p + 1
    return attributes.update(rowValues)

assignRow(row1, 7)
assignRow(row2, 5)
assignRow(row3, 3)

私が欲しいのは、辞書の「属性」をパラメーターとして受け取り、各属性が持つポイントの数を適切な値に変換する単純な関数です。

つまり、"strength": 4はそのまま"strength": 4ですが、"wits": 6"に下がり"wits": 5""intelligence: 9に下がり"intelligence: 7"ます。

私は辞書の使用に少し慣れていないので、通常これにアプローチする方法は次のとおりです。

def convert(list):
    for i in range(len(list)):
        if list[i] <= 4:
            list[i] = list[i]
        if list[i] in (5, 6):
            list[i] -= 1
        if list[i] in (7, 8):
            list[i] -= 2
        if list[i] in (9, 10):
            list[i] = 6
        if list[i] in (11, 12, 13):
            list[i] = 7
        else:
            list[i] = 8

効率的でもきれいでもありませんが、それでも解決策です。ただし、辞書内のインデックスをループすることはできないため、このような処理を行う方法が完全にはわかりません。

一般的な説明や機能をいただければ幸いです。

スラム

思われる二分はかなりよくスーツニーズアルゴ- 「投資」へのポイントは常にソートされ、定義されています。参照点を使用して配列を作成すると、ifsの束がなくても問題ありません

>>> from bisect import bisect
>>> points_to_invest = [1, 2, 3, 4, 6, 8, 10, 13]
>>> bisect(points_to_invest, 1)
1
>>> bisect(points_to_invest, 4)
4
>>> bisect(points_to_invest, 5)
4
>>> bisect(points_to_invest, 6)
5

このアプローチにより、将来の保守性が大幅に向上します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の数値に丸める方法

分類Dev

Pythonで値を特定の小数点以下の桁数に丸める方法は?

分類Dev

Pythonで値を特定の小数点以下の桁数に丸める方法は?

分類Dev

特定の状況でPythonの任意の数値を丸める方法

分類Dev

Python3.6で特定の数値に丸める

分類Dev

数値を特定の範囲内に丸める方法は?

分類Dev

特定の事前定義された数値に丸める方法は?

分類Dev

小数を特定の精度に丸める方法

分類Dev

値をRの下限に丸める方法

分類Dev

MySQLの値をceilに丸める方法

分類Dev

Pythonで数値を有効数字に丸める方法

分類Dev

Rで特定の10進数に丸める方法

分類Dev

Eigenで特定のしきい値を下回る数値をゼロに丸める

分類Dev

C#で任意の数値に丸める方法は?

分類Dev

JavaScript で負の値に丸める

分類Dev

特定の10進値による数値の丸め

分類Dev

SQLでの結合に丸められた値を使用する方法

分類Dev

0.5以外のしきい値で数値を丸める方法

分類Dev

丸めずにPythonでfloatの2つのndarrayを表にする方法

分類Dev

javascriptで数値を丸める方法(小数部の結果のみ)?

分類Dev

ocamlで数値を丸める方法は?

分類Dev

mongodb集計で値を丸める方法

分類Dev

kotlinで数値を丸める方法

分類Dev

SQLで値を丸める方法は?

分類Dev

Pythonでの数値の丸め

分類Dev

Javaで数値を小数点以下n桁に丸める方法

分類Dev

Rubyで数値を最も近い9に丸める方法

分類Dev

JavaScriptで変数値を2桁に丸める方法

分類Dev

Pythonがこの値を丸めるのはなぜですか?

Related 関連記事

ホットタグ

アーカイブ