On Fri, 24 Oct 2014 12:55:19 -0700 (PDT), sohcahto...@gmail.com wrote:

>On Friday, October 24, 2014 12:36:23 PM UTC-7, Seymore4Head wrote:
>> On Fri, 24 Oct 2014 12:25:33 -0700 (PDT), sohcahto...@gmail.com wrote:
>> 
>> >On Friday, October 24, 2014 12:12:10 PM UTC-7, Seymore4Head wrote:
>> >> On Fri, 24 Oct 2014 11:57:12 -0700 (PDT), sohcahto...@gmail.com wrote:
>> >> 
>> >> >On Friday, October 24, 2014 11:17:53 AM UTC-7, Seymore4Head wrote:
>> >> >> On Fri, 24 Oct 2014 11:52:15 -0600, Ian Kelly <ian.g.ke...@gmail.com>
>> >> >> wrote:
>> >> >> 
>> >> >> >On Fri, Oct 24, 2014 at 11:03 AM, Seymore4Head
>> >> >> ><Seymore4Head@hotmail.invalid> wrote:
>> >> >> >> Actually I was a little frustrated when I added that line back in as
>> >> >> >> the other lines all work.
>> >> >> >> Using list(range(10)) Doesn't throw an error but it doesn't work.
>> >> >> >>
>> >> >> >> http://i.imgur.com/DTc5zoL.jpg
>> >> >> >>
>> >> >> >> The interpreter.   I don't know how to use that either.
>> >> >> >
>> >> >> >Try both of these in the interpreter, and observe the difference:
>> >> >> >
>> >> >> >7 in range(10)
>> >> >> >
>> >> >> >"7" in range(10)
>> >> >> >
>> >> >> >Do you understand what the difference between 7 and "7" is?
>> >> >> 
>> >> >> I do understand that.  7 is a number and "7" is a string.
>> >> >> What my question was...and still is...is why
>> >> >> Python 3 fails when I try using
>> >> >> y=1 800 get charter
>> >> >> 
>> >> >> y in range str(range(10))
>> >> >> should work because y is a string and str(range(10)) should be
>> >> >> "y" in str(1) fails.
>> >> >> It doesn't give an error it's just not True when y is a number.
>> >> >> 
>> >> >> These hints are just not working.  I am too thick for hints. :)
>> >> >> If you could use it in the code, I might understand.
>> >> >> The other work arounds that were posted work.
>> >> >> I have used them.  str(range(10)) doesn't work.
>> >> >> 
>> >> >> import string
>> >> >> def nametonumber(name):
>> >> >>     lst=[]
>> >> >>     nx=[]
>> >> >>     digit=[]
>> >> >>     digit="".join(str(i) for i in range(10))
>> >> >>     for x in name:
>> >> >>         lst.append(x)
>> >> >>     for y in (lst):
>> >> >>         if y in list(range(1,10)):
>> >> >>         #if y in "1234567890":
>> >> >>         #if y.isdigit():
>> >> >>         #if y in digit:       
>> >> >>         #if y in string.digits:
>> >> >>             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(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 dialaho"
>> >> >> print (nametonumber(a))
>> >> >> 
>> >> >> Please
>> >> >
>> >> >Your code here is actually pretty close to a correct answer.  Just a few 
>> >> >things to consider...
>> >> >
>> >> >- Why are you converting your name string to a list?  It is unnecessary. 
>> >> > When you do "for y in <some string>", then y will still be single 
>> >> >characters on each iteration of the loop.
>> >> >
>> >> >- "if y in string.digits" should work fine.
>> >> >
>> >> >- "if y in list(range(1,10)" won't work for two reasons: First, it 
>> >> >creates a list of numbers, not strings.  Second, even if it did, it 
>> >> >would be missing the "0" digit.
>> >> >
>> >> >- At the end, when you convert your list to a string, you don't need to 
>> >> >use list comprehension, since nx is already a list.  number = 
>> >> >"".join(nx) should work fine.
>> >> >
>> >> >Also, in general, you need to stop and slow down and think like a 
>> >> >programmer.  If you get an error, your instinct shouldn't be to just 
>> >> >hack at it to make the error go away.  Look at the error and try to make 
>> >> >sense of it.  Learn what the error means and try to fix the core problem.
>> >> >
>> >> >And for @#$%'s sake...stop saying "It isn't working" and not 
>> >> >elaborating.  You've been told by every other post in this thread to 
>> >> >show us what you did and what the error was.  You've also been told to 
>> >> >*NOT* retype what you see and to copy/paste your code and the error 
>> >> >because when you make a typo when copying, we might see a problem that 
>> >> >doesn't exist and then you just get more confused.
>> >> 
>> >> Ok  I think I may have the question you guys are looking for.
>> >> I just posted it.
>> >> See above.
>> >> 
>> >> But it's still broke.  :(
>> >
>> >str(range(10)) doesn't do what you think it does.
>> >
>> >Run 'print(str(range(10)))' and look at what you get.
>> 
>> Yeah, I know that.  My question is why?
>> The answer was that Python 3 only stores the min and max values but
>> you can still iterate over them.
>> I don't think that means what I think it means.
>
>"You can iterate over them" pretty much just means you can use them as the 
>source of a 'for' loop.  But in your case, when you're calling 'for y in 
>str(range(10))', you're not using 'range(10)' as the source of your loop, 
>you're using the result of a str() function call, and you're calling str() on 
>range(), which doesn't return a concrete value in Python 3.  If you try to 
>print a range(), you're just getting a string containing your original call to 
>range.
>
>And that's why you're seeing the 1 and a in your output.  str(range(10)) 
>returns the string 'range(10)'.
>
>Like I said in a previous post, use 'string.digits'.  Try this test code and 
>see what you get:
>
>import string
>name="123-xyz-abc" 
>print("string.digits is", string.digits)
>for x in name: 
>    if x in range(10): 
>        print ("Range",(x)) 
>    if x in string.digits: 
>        print ("string.digits",(x)) 

Your example works.
With range(10) you don't expect to see an "a" either.
Thanks
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to