Hola
Crear un diccionario que tenga como nombre el valor de una variable creo que no se puede hacer, por supuesto que tampoco cambiar el nombre a uno ya existente, por lo menos hasta donde yo se. por eso te sugiero la siguiente solucion:
(las llamadas a las funciones que aparecen al final del codigo es para probar que funcionan):
Código PHP:
#! /usr/bin/python
# Otra solucion. No se como cambiar el nombre de un diccionario ya creado o crear uno a partir del valor de una variable
# te sugiero crees un diccionario de personajes con la siguiente definicion dic_personajes={personaje:dic_cualidades}
dic_cualidades = {'fuerza': 0, 'resistencia': 0, 'destreza': 0, 'inteligencia': 0, 'percepcion': 0} #Diccionario para las cualidades
dic_Karma={} # diccionario que contiene el total del karma de cada personaje
dic_personajes={} # diccionario de personajes
def asigna_Cualidades():
# Inicializando variables temporales q seran usadas para el control de las preguntas y crear una copia del diccionario de cualidades
Si=1; No=0; dic_CualidadTemp={}
dic_CualidadTemp=dic_cualidades.copy()
for cualidad in dic_CualidadTemp.keys(): # Ciclo para asignar valor a cada cualidad
faltaValorCualidad=Si # inicializando la falta de valor para cada cualidad
while faltaValorCualidad: # preguntar por el valor de la cualidad mientras no este entre 2 y 10 (o sea, mientras falte)
try:
dic_CualidadTemp[cualidad]=int(input('Entra el valor de %s ' % (cualidad)))
if not (1<dic_CualidadTemp[cualidad]<=10): # Si el valor de la cualidad no esta entre 2 y 10
raise ValueError # genero un error de valor.
else: # si el valor es correcto paso
print 'Ok!, puntos asignados para %s' % (cualidad) # para la otra cualidad
faltaValorCualidad=No # ya no falta valor, asi que deja de preguntar!!
except (ValueError, NameError): # error en el valor de la cualidad por lo que
print 'El valor de %s debe estar entre 2 y 10' % (cualidad) # aun falta el valor de la misma y vuelvo a preguntar
return dic_CualidadTemp # retorno un diccionario de cualidades para un personaje x
def crea_Personaje():
strPersonaje=raw_input('nombre personaje:')
dic_personajes[strPersonaje]=asigna_Cualidades()
# aqui si quieres puedes verificar que el karma sea igual a 40 y si no es asi volver a exigir los valores para las cualidades del mismo personaje
# eso te lo dejo a ti para que lo implementes.
def muestra_Cualidades():
for personaje in dic_personajes.keys():
print '%s sus cualidades son:' % (personaje), dic_personajes[personaje]
def KarmaUnPersonaje(personaje):
total=0
for cualidad in dic_personajes[personaje].keys():
total += dic_personajes[personaje][cualidad]
return total
def calcula_KarmaTodos():
for personaje in dic_personajes.keys():
dic_Karma[personaje]=KarmaUnPersonaje(personaje)
def muestra_KarmaTodos():
for personaje in dic_Karma.keys():
print '%s tiene %s de karma' % (personaje, str(dic_Karma[personaje]))
if __name__=='__main__':
otroPersonaje=1
while otroPersonaje:
crea_Personaje()
otroPersonaje=input('otro personaje (Si=1, No=0)?:')
calcula_KarmaTodos()
muestra_Cualidades()
muestra_KarmaTodos()
Ojala te sirva de algo, un saludo.