Sözlük içerisindeki öğeleri kısa bir yöntemle arttırmak

import random 
class Champion:
    def __init__(self, attack_damage, ability_damage, defence, magic_resist):
        self.AD = attack_damage
        self.AP = ability_damage
        self.AR = defence
        self.MR = magic_resist

enemies = {
    "Enemy 1": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 2": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 3": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
}

Öncelikle iyi forumlar. Yukarıda gördüğünüz enemies adlı sözlük yapısındaki öğeleri kolay bir yöntemle arttırmak istiyorum. Aklıma direkt for loop’u geldi elbette ki. Fakat burada nasıl kullanacağım hakkında hiçbir fikrim yok ve hatta burada kullanabilecekmişim gibi gelmiyor.
Arttırmaktan kastım şu oluyor:

enemies = {
    "Enemy 1": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 2": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 3": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 4": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 5": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
    "Enemy 6": Champion(random.randint(57, 88), random.randint(1, 10), random.randint(50, 80), random.randint(40, 60)),
     ...
}

Bu şekilde;basit bir yöntemle, 50 tane öğe olsun istersem 50 tane, 30 tane öğe olsun istersem 30 tane öğe yükleyebilmek istiyorum. Yardımcı olacak kullanıcılara şimdiden teşekkür ediyorum.


Anlaşılabilirliği arttırmak amaçlı şöyle örnek göstereyim:

#önce
enemies = {

}
[KODLAR]
#sonra

sözlük üreteçleri ile yapılabilir:

# değiştirmesi kolay olsun diye
attack_damage_range = (57, 88)
ability_damage_range = (1, 10)
defence_range = (50, 80)
magic_resist_range = (40, 60)

# toplu dururlarsa pek kalabalık yapmazlar aşağıda 
ranges = (attack_damage_range, ability_damage_range, defence_range,
          magic_resist_range)
dusman_sayisi = 13

# dict-comprehension (bir de generator-expression var Champion'ları oluşturmak
# adına)
enemies = {f"Enemy {j}": Champion(*(random.randint(*a_range)
                                  for a_range in ranges))
           for j in range(1, dusman_sayisi+1)}

Yine for dönüyor tabii ki arkalarda bir yerlerde ama bu daha hızlı ve daha okunaklı olabilir. Şuna denk:

enemies = {}
for j in range(1, dusman_sayisi + 1):
    enemies[f"Enemy {j}"] = Champion(...)
1 Beğeni