I am out of trial and error again Lists
Larry Hudson
orgnut at yahoo.com
Thu Oct 23 03:10:28 EDT 2014
On 10/22/2014 03:30 PM, Seymore4Head wrote:
> On Wed, 22 Oct 2014 16:30:37 -0400, Seymore4Head
> <Seymore4Head at Hotmail.invalid> wrote:
>
> One more question.
> if y in str(range(10)
> Why doesn't that work.
> I commented it out and just did it "long hand"
>
> def nametonumber(name):
> lst=[]
> nx=[]
> for x in (name):
> lst.append(x)
> for y in (lst):
> #if y in str(range(10)):
> if y in "1234567890":
> nx.append(y)
> if y in " -()":
> nx.append(y)
> if y in "abc":
> nx.append("2")
> if y in "def":
> nx.append("3")
> if y in "ghi":
> nx.append("4")
> if y in "jkl":
> nx.append("5")
> if y in "mno":
> nx.append("6")
> if y in "pqrs":
> nx.append("7")
> if y in "tuv":
> nx.append("8")
> if y in "wxyz":
> nx.append("9")
> number="".join(str(e) for e in nx)
> return (number)
> a="1-800-getcharter"
> print (nametonumber(a))#1800 438 2427 837
> a="1-800-leo laporte"
> print (nametonumber(a))
> a="1 800 callaprogrammer"
> print (nametonumber(a))
>
I know you are trying to explore lists here, but I found myself somewhat intrigued with the
problem itself, so I wrote a different version. This version does not use lists but only
strings. I'm just presenting it as-is to let you try to follow the logic, but if you ask, I'll
explain it in detail. It turns your long sequence of if's essentially into a single line --
unfortunately 's' and 'z' have to be handled as special-cases, which turns that single line into
a six-line if/elif/else set. You might consider this line 'tricky', but I'll just say it's just
looking at the problem from a different viewpoint. BTW, this version accepts upper-case as well
as lower-case. isdigit() and isalpha() are standard string methods.
#------ Code ----------
def name2number(name):
nstr = '' # Phone-number string to return
codes = 'abcdefghijklmnopqrtuvwxy' # Note missing s and z
for ch in name:
if ch in " -()":
nstr += ch
elif ch.isdigit():
nstr += ch
elif ch.isalpha():
ch = ch.lower()
# S and Z are special cases
if ch == 's':
nstr += '7'
elif ch == 'z':
nstr += '9'
else:
nstr += str(codes.index(ch) // 3 + 2)
return nstr
#------- End of Code ---------
A possible variation would be to make nstr a list instead of a string, and use .append() instead
of the +=, and finally return the string by using join() on the list. Also, the if and first
elif in the for could be combined: if ch in " -()" or ch.isdigit():
-=- Larry -=-
More information about the Python-list
mailing list