#!/usr/bin/python3 import re import sys from pathlib import Path from random import shuffle class Color: PURPLE = '\033[95m' CYAN = '\033[96m' DARKCYAN = '\033[36m' BLUE = '\033[94m' GREEN = '\033[92m' YELLOW = '\033[93m' RED = '\033[91m' BOLD = '\033[1m' UNDERLINE = '\033[4m' END = '\033[0m' #print color.BOLD + 'Hello World !' + color.END cardRegex = "CARD: " prefixLength = len(cardRegex) # Returns a list of Path objects, containing the path to each valid file provided def getFileList(): fileList = [] if len(sys.argv) > 1: for f in sys.argv[1:]: path = Path(f) if path.exists() and path.is_file(): fileList.append(f) return fileList else: print("Missing arguments") sys.exit() # Returns cards in the form [(front, back)] def createCardList(files): cards = [] for f in files: cards = cards + extractCards(f) return cards # Extracts cards from a single file into a list of the form [(front, back)] def extractCards(f): front = "" back = "" cards = [] with open(f) as cardFile: for l in cardFile: match = re.match(cardRegex, l) if match: if front != "": cards.append([front.strip(), back.strip()]) back = "" front = match.string[prefixLength:] else: back += l # do the last front-back pair before returning cards.append([front.strip(), back.strip()]) return cards # Waits for user input and reacts accordingly def wait(): cmd = input().strip() if cmd.startswith("q") or cmd.startswith("quit") or cmd.startswith("exit"): sys.exit(0) # Loops serving cards to the user until the program is exited def serveCards(cards): while True: for i, card in enumerate(cards): print("----------------------------------------------------------------------------(" + str(i + 1) + "/" + str(len(cards)) + ")") print(Color.BLUE + Color.BOLD + card[0] + Color.END) wait() print(card[1]) wait() def debugCards(cardList): for c in cardList: print("Front:", c[0]) print("Back:", c[1]) def main(): files = getFileList() cards = createCardList(files) shuffle(cards) serveCards(cards) if __name__ == "__main__": main()