[Tutor] Problem with variables

Karl Pflästerer sigurd at 12move.de
Wed Nov 5 13:37:08 EST 2003

```On 24 Oct 2003, docnova <- docnova at charter.net wrote:

> There are several problems that I need to figure out how to address. The first
> (and biggest) is the inuput of the users name. In numerology the one of the
> core numbers is acheived by adding each letter of the users full name
> together. As of now the only solution is for the user to enter the name as
> such "J+O+H+N+S+M+I+T+H".

> The ideal scenario would be for "John Smith" to be translated into
> "J+O+H+N+S+M+I+T+H"

> How would I make this action possible?

> Here is the source i have so far:

> #This program will give a complete numerology rating :)
> #Each letter represents a number. Each letter is given its proper value.
> a=1;  A=1
> b=2;  B=2
> c=3; C=3
[...]
> y=1; Y=1
> z=7; Z=7

Remeber: characters in Python have to be enclosed in either single or
double quotes.

> print "Welcome"
> print "This program will give you a complete numerology rating :)"
> name = raw_input("Please enter your full name (first, middle, last): ")
> print "Hello there", name +"."

For all these tasks where you have to do the same action again and again
it can be good to work with a list.

So first you'd have to transform the string from raw_input into a list.
That's easy: simply use the function `list'.

Then you'd have to walk through that list and find the the value for
each character and finally sum these values up.

To have a mapping between your characters and their values you could use
a dictionary.  That's a special kind of table (hash table) where you can
use eg. characters as keys to store and later retrieve values.

So let's start (the following solution is only a raw sketch but should
give you a hint how to solve your problem).

table = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 8, 'g' : 3,
'h' : 5, 'i' : 1, 'j' : 1, 'k' : 2, 'l' : 3, 'm' : 4, 'n' : 5,
'o' : 7, 'p' : 8, 'q' : 1, 'r' : 2, 's' : 3, 't' : 4, 'u' : 6,
'v' : 6, 'w' : 6, 'x' : 6, 'y' : 1, 'z' : 7}

# here we have the dictionary; as the case doesn't matter we only use
# lower case letters

print "Welcome"
print "This program will give you a complete numerology rating :)"
print "Hello there", name +"."

# here we convert our string to a list of chars

name = list(name)

# now we iterate through the list and sum up the values; we convert each
# char to lowercase

# the following can (and should IMO) be written as a function.  But as we
# use it here only once and it's very simple it's also ok like that.
# We use here try ... except because the spaces are also converted to list
# members

summ = 0
for char in name:
try:
summ += table[char.lower()]
except KeyError:
pass

print sum

Karl
--
Please do *not* send copies of replies to me.