On 10/22/2014 03:30 PM, Seymore4Head wrote:
On Wed, 22 Oct 2014 16:30:37 -0400, Seymore4Head
<Seymore4Head@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 -=-
--
https://mail.python.org/mailman/listinfo/python-list