class Character: classes = [ 'Barbarian', 'Bard', 'Cleric', 'Druid', 'Fighter', 'Monk', 'Paladin', 'Ranger', 'Rogue', 'Sorcerer', 'Warlock', 'Wizard' ] def __init__(self, name): self.name = name self.class_name = self.chooseClass() self.race = Race() self.rolls = [] self.scores = { 'Strength': 0, 'Dexterity': 0, 'Constitution': 0, 'Intelligence': 0, 'Wisdom': 0, 'Charisma': 0, } self.rollStats() self.assignScores() self.modifiers = { 'Strength': 0, 'Dexterity': 0, 'Constitution': 0, 'Intelligence': 0, 'Wisdom': 0, 'Charisma': 0, } self.getMods() self.printStats() def chooseClass(self): classes = self.classes while True: classChoice = input('Please select a class: ') if classChoice.capitalize() in classes: return classChoice else: print('Please select a valid class.') def assignScores(self): scores = self.scores rolls = self.rolls for k, v in list(scores.items()): print(f"Assign a score for {k}: ") print(rolls) while True: choice = int(input()) if choice in rolls: rolls.remove(choice) break else: print('Please select a valid score.') print(rolls) scores[k] = choice def rollStats(self): value = [] for i in range(6): for i in range(4): roll = [randint(1, 6)] value.append(roll.pop()) value.remove(min(value)) self.rolls.append(sum(value)) value.clear() self.rolls.sort() # Adds race modifiers to Ability Scores if applicable def getAbilityScore(self, ability): return self.scores[ability] + self.race.getRaceAdjustments(ability) ### prints Race, Class, ability scores, and modifiers def printStats(self): #for k, v in self.scores.items(): #print(f'{k} is {v}') print(f'Your race is {self.race}') print(f"You're class is {self.class_name.capitalize()}") print(self.modifiers) for k, v in self.scores.items(): print(f'{k} is {v + Race.getRaceAdjustments(k)}') ### determines modifiers def getMods(self): for k, v in self.scores.items(): mod = -4 score = 3 while score < 20: if v <= score: self.modifiers[k] = mod score = 21 else: mod += 1 score += 2