我正在研究一種爲角色扮演遊戲自動創建角色表的算法。在遊戲中,你可以添加點數來增加它們的屬性。但是,在某個值時,需要2點才能將實際屬性的值增加1.您以一定數量的點開始,並且每個屬性的默認值爲1如何四捨五入到Python中的特定值
我有一個程序隨機分配點,但是我堅持如何改變這些值(在字典中)以在必要時舍入。例如,如果我在「強度」中放3分,那很好,我得到3的「強度」值(包括基數1)。然而,如果我輸入4分,我仍然應該只有一個值4.它應該需要5分(加上基數1)才能得到5的值。然後再花2分得到6,3分拿到7個3點的值來獲得的8
的代碼我目前使用分配的attibutes值如下:
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
效率不高或漂亮,但仍然是一個solutuion。但是,你不能只循環字典中的索引,所以我不完全確定如何去做這樣的事情。
一般的解釋或功能,將不勝感激。
我明白,作爲一個初學者,你花時間和精力的方式更容易維護在問問題之前制定自己的解決方案。不管效率如何低下,您都可以更好地理解其他解決方案,並且您已經成長爲程序員。 –
也就是說,不要使用內建名稱'list'的名稱。傳統上至少使用'list_'。這並不是說你的代碼會立即崩潰,但是你將無法調用內置函數來將事物轉換爲列表。而且,'row = list'行幾乎沒有用處。只需調用輸入參數'row'並且用一塊石頭就可以殺死兩隻鳥。 –
@MadPhysicist謝謝,我已經更新了程序 –