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 డి.వి.ఎన్.శర్మ < dvnsa...@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 <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