I am out of trial and error again Lists
Larry Hudson
orgnut at yahoo.com
Thu Oct 23 03:10:28 EDT 2014
More information about the Python-list mailing list
Thu Oct 23 03:10:28 EDT 2014
- Previous message (by thread): I am out of trial and error again Lists
- Next message (by thread): I am out of trial and error again Lists
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 -=-
- Previous message (by thread): I am out of trial and error again Lists
- Next message (by thread): I am out of trial and error again Lists
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list