overactive

dFsd

Jul 22nd, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.10 KB | None | 0 0
  1. import random
  2. import sys
  3. import argparse
  4.  
  5. class Question():
  6.     def __init__(self, q, a, c):
  7.         self.question = q
  8.         self.answers = a
  9.         self.correct = c
  10.  
  11. class Quiz():
  12.     def __init__(self, fileName, playersNo):
  13.         self.playersNo = playersNo
  14.         self.entries = self.loadQuestions(fileName)
  15.         print('Witamy w grze')
  16.  
  17.     def loadQuestions(self,fileName):
  18.         entries = []
  19.         try:
  20.             with open(fileName, 'r') as file:
  21.                 data = file.readlines()
  22.         except IOError:
  23.           print ('Nie można otworzyc pliku')
  24.           sys.exit(1)
  25.        
  26.         for i in range(0, len(data), 4):
  27.             q = data[i].rstrip()
  28.             a = data[i + 1].rstrip().split(';')
  29.             c = data[i + 2].rstrip()
  30.             entries.append(Question(q, a, c))
  31.  
  32.         return entries
  33.        
  34.     def askQuestion(self, question, answers):
  35.         print(question)
  36.         random.shuffle(answers)
  37.         self.printAnswers(answers)
  38.  
  39.         print('Twoja odpowiedź to (wpisz literę):')
  40.         self.userAnswer = input()
  41.        
  42.     def printAnswers(self, answers):
  43.         for i in range(len(answers)):
  44.             print('{}) {}'.format(chr(i + 97), answers[i]))
  45.  
  46.     def getCorrectLetter(self, answers, correct):
  47.         return chr(answers.index(correct) + 97)
  48.        
  49.     def printScore(self):
  50.         questionCount = len(self.entries)
  51.         print('Koniec gry!\n')
  52.  
  53.         playersHeader = ''
  54.         for i in range(self.playersNo):
  55.             playersHeader += ' Gracz {} |'.format(i + 1)
  56.  
  57.         header = 'Numer pytania |' + playersHeader
  58.         print(header)
  59.         print('-' * len(header))
  60.  
  61.         for question in range(questionCount):
  62.             results = ''
  63.             for player in range(self.playersNo):
  64.                 results += ' {:^7} |'.format(self.points[player][question])
  65.             print(' {:^12} |'.format(question + 1) + results)
  66.  
  67.     def start(self):
  68.         self.points={}
  69.         for i in range(self.playersNo):
  70.             self.points[i] = []
  71.             for entry in self.entries:
  72.                 self.askQuestion(entry.question, entry.answers)
  73.                 correctLetter = self.getCorrectLetter(entry.answers, entry.correct)
  74.                 if correctLetter == self.userAnswer:
  75.                     self.points[i].append(1)
  76.                 else:
  77.                     self.points[i].append(0)
  78.                
  79.                 print('')
  80.  
  81. parser = argparse.ArgumentParser()
  82. parser.add_argument('file',
  83.                     help='Wprowadź ściężkę do pliku z pytaniami')
  84. parser.add_argument('-p','--players',type=int, choices=[1, 2, 3], default=1,
  85.                      help='podaj liczbę graczy z zakresu <1,3>')
  86. args = parser.parse_args()
  87.  
  88. file = args.file
  89. if args.players:
  90.     players = args.players
  91.     if 1 <= players <= 3:
  92.         print('Liczba graczy: ' ,players)
  93.     else:
  94.         print('Liczba graczy musi zawierać się w przedziale <1,3>')
  95.         sys.exit(1)  
  96. else:
  97.     print('Liczba graczy: ' ,players)
  98.  
  99. game = Quiz(file, players)
  100. game.start()
  101. game.printScore()
Advertisement
Add Comment
Please, Sign In to add comment