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 <m...@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@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor