OLD = ['Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy', 'Joshua',
'Judges', 'Ruth', '1 Samuel', '2 Samuel', '1 Kings', '2 Kings',
'1 Chronicles', '2 Chronicles', 'Ezra', 'Nehemiah', 'Esther', 'Job',
'Psalm', 'Proverbs', 'Ecclesiastes', 'Song of Solomon', 'Isaiah',
'Jeremiah', 'Lamentations', 'Ezekiel', 'Daniel', 'Hosea', 'Joel',
'Amos', 'Obadiah', 'Jonah', 'Micah', 'Nahum', 'Habakkuk', 'Zephaniah',
'Haggai', 'Zechariah', 'Malachi']
NEW = ['Matthew', 'Mark', 'Luke', 'John', 'Acts', 'Romans', '1 Corinthians',
'2 Corinthians', 'Galatians', 'Ephesians', 'Philippians', 'Colossians',
'1 Thessalonians', '2 Thessalonians', '1 Timothy', '2 Timothy', 'Titus',
'Philemon', 'Hebrews', 'James', '1 Peter', '2 Peter', '1 John', '2 John',
'3 John', 'Jude', 'Revelation']
ALL = OLD + NEW
################################################################################
def main():
bible_text = get_bible()
bible_array = parse_bible(bible_text)
iterator = Bible_Iter(bible_array)
words = iterator.total / 365
index = words
try:
while True:
print(iterator.get_reference())
temp = int(index)
while temp != iterator.index:
iterator.next_word()
iterator.next_vers()
index += words
except:
input('DONE')
def get_bible():
return open('bible13.txt').read()
def parse_bible(string):
'Parse Bible and return 3D array.'
book = chap = vers = 1
form = '%02u:%03u:%03u'
book_s, chap_s, vers_s = [], [], []
start = 0
while True:
try:
start = string.index(form % (book, chap, vers), start) + 11
end = string.index('\n\n', start)
vers_s.append(' '.join(string[start:end].split()))
start = end
vers += 1
except:
if vers != 1:
chap_s.append(vers_s)
vers_s = []
chap += 1
vers = 1
elif chap != 1:
book_s.append(chap_s)
chap_s = []
book += 1
chap = 1
elif book != 1:
return book_s
else:
raise EOFError
################################################################################
class Bible_Iter:
def __init__(self, bible_3D):
self.bible = bible_3D
self.total = 0
self.__book = 0
self.__chap = 0
self.__vers = 0
self.__word = 0
self.index = 0
for book in bible_3D:
for chapter in book:
for index, verse in enumerate(chapter):
words = verse.split()
chapter[index] = words
self.total += len(words)
def get_word(self):
return self.bible[self.__book][self.__chap][self.__vers][self.__word]
def next_word(self):
self.index += 1
self.__word += 1
if len(self.bible[self.__book][self.__chap][self.__vers]) == self.__word:
self.__word = 0
self.__vers += 1
if len(self.bible[self.__book][self.__chap]) == self.__vers:
self.__vers = 0
self.__chap += 1
if len(self.bible[self.__book]) == self.__chap:
self.__chap = 0
self.__book += 1
if len(self.bible) == self.__book:
self.__book = 0
raise EOFError
def next_vers(self):
vers = self.__vers
while vers == self.__vers:
self.next_word()
def get_reference(self):
book = ALL[self.__book]
reference = '{0} {1}:{2}'.format(book, self.__chap + 1, self.__vers + 1)
return reference
################################################################################
if __name__ == '__main__':
main()