hola...
No lei completamente el codigo que escribiste solo lo mire por encima pero me imagino que lo que deseas hacer es crear un diccionario que tiene unas cualidades predeterminadas (fuerza, inteligencia, etc) y asignar un valor a cada una de dichas cualidades cumpliendo con lo siguiente:
- el valor no debe ser mayor que 10
- el valor no debe ser menor que 2
pero te interesa tambien que dicho diccionario este relacionado con el nombre de "personaje" que va a ingresar el usuario..
como comenta
srmagno no creo que se puedas hacer que el usuario te pase el nombre de una variable, pero lo que si puedes es usar diccionarios como valores dentro de un diccionario.
un ejemplo seria lo siguiente:
Código python:
Ver originalbase_datos = {'nombre_usuario1': {'inteligencia': 5, 'fuerza': 5, 'destreza': 5, 'percepcion': 5},
'nombre_usuario2': {'inteligencia': 6, 'fuerza': 6, 'destreza': 6, 'percepcion': 6}}
de esa manera estas creando un diccionario que dentro tiene a todos los nombres de personajes y sus respectivos valores son un diccionario con las "habilidades".
aqui te dejo el codigo para hacerlo(ojo pruebalo porque yo tambien estoy iniciandome en python
):
Código Python:
Ver originalbase_datos={}
cualidades = {"fuerza":0, "destreza":0, "inteligencia":0, "percepcion":0}
def asignar_valores():
temp = {}
for x in cualidades:
while True:
try:
valor = int(raw_input("%s: " %x))
except:
print "Debe ingresar un valor numerico"
else:
if valor > 10:
print "%s debe ser menor o igual que 10" % x
elif valor < 2:
print "%s debe ser mayor o igual que 2" % x
else:
temp[x] = valor
break
return temp
nombre_personaje = raw_input("ingrese nombre de personaje: ")
base_datos[nombre_personaje]= asignar_valores()
#print base_datos
solo le faltaria anexar al final la parte donde sumas la cantidad de puntos para ver si es igual, mayor o menor a 40 pero eso ya sabes como agregarlo
PD: como bien dijo
razpeitia no uses
eval para evaluar lo que ingresa el usuario porque es peligroso, si el usuario ingresa un codigo escrito en python ese codigo se va a ejecutar en el equipo
PD: el codigo esta escrito en python 2.5 por lo que tienes que modificarlo para python 3.1 (raw_input seria input solamente y el print va dentro de parentesis si no me equivoco)