[Tutor] Count for loops

D.V.N.Sarma డి.వి.ఎన్.శర్మ dvnsarma at gmail.com
Mon Apr 3 20:13:49 EDT 2017


Small correction.

file_path = "C:/Users/Rafael/PythonCode/PiDigits.txt"
with open(file_path) as a:
    b = a.read()

get_year = input("What year were you born? ")

count = 0
b= '3'+b[2:]
n = len(b)
for i in range(n-3):
    if b[i:i+4] == get_year:
        count += 1
print("Your birth date occurs %s times in PI!" % (count))


regards,
Sarma.

On Tue, Apr 4, 2017 at 5:07 AM, D.V.N.Sarma డి.వి.ఎన్.శర్మ <
dvnsarma at gmail.com> wrote:

> I will go for this modification of the original code.
>
> file_path = "C:/Users/Rafael/PythonCode/PiDigits.txt"
> with open(file_path) as a:
>     b = a.read()
>
> get_year = input("What year were you born? ")
>
> count = 0
> b= '3'+b[2:]
> n = len(b)
> for i in range(n-4):
>     if b[i:i+4] == get_year:
>         count += 1
> print("Your birth date occurs %s times in PI!" % (count))
>
> regards,
> Sarma.
>
> On Tue, Apr 4, 2017 at 12:54 AM, Mats Wichmann <mats at wichmann.us> wrote:
>
>> On 04/03/2017 10:16 AM, Alan Gauld via Tutor wrote:
>> > On 03/04/17 16:42, D.V.N.Sarma డి.వి.ఎన్.శర్మ wrote:
>> >> Sorry. That was  stupid of me. The loop does nothing.
>> >
>> > Let me rewrite the code with some different variable names...
>> >
>> >>>> with open(file_path) as a:
>> >>>>     b = a.read()
>> >
>> > with open (file_path) as PI_text:
>> >      PI_as_a_long_string = PI_text.read()
>> >
>> >>>> for year in b:
>> >
>> > for each_char in PI_as_a_long_string:
>> >
>> >>>>     if get_year in b:
>> >>>>         count += 1
>> >
>> >       if get_year in PI_as_a_long_string:
>> >           count += 1
>> >
>> >>>> print("Your birth date occurs %s times in PI!" % (count))
>> >
>> > if count:
>> >    print("Your birth date occurs in PI, I checked, count, "times!")
>> >
>> >
>> > Aren't meaningful variable names great? We should all do
>> > them more often.
>>
>>
>> So the takeaways here are:
>>
>> in the first ("non-counting") sample, there's no need to use a loop,
>> because you're going to quit after the outcome "in" or "not in" right
>> away - there's no loop behavior at all.
>>
>> for year in b:
>>     if get_year in b:
>>         print("Your year of birth occurs in PI!")
>>         break
>>     else:
>>         print("Your year of birth does not occur in PI.")
>>         break
>>
>> for the counting version you could do something that searches for the
>> year repeatedly, avoiding starting over from the beginning so you're
>> actually finding fresh instances, not the same one (hint, hint). There
>> are several ways to do this, including slicing, indexing, etc.  Alan's
>> suggestion looks as good as any.
>>
>> Or, if you don't care about overlapping cases, the count method of a
>> string will do just fine:
>>
>> PI_as_a_long_string.count(year)
>>
>> If you're talking about 4-digit year numbers using a Western calendar in
>> digits of PI, the overlap effect seems unlikely to matter - let's say
>> the year is 1919, do we think PI contains the sequence 191919? count
>> would report back one instead of two in that case. In other cases it
>> might matter; count is written specifically to not care about overlaps:
>> "Return the number of (non-overlapping) occurrences"  So that's worth
>> keeping in mind when you think about what you need from
>> substrings-in-strings cases.
>>
>>
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> https://mail.python.org/mailman/listinfo/tutor
>>
>
>


More information about the Tutor mailing list