Compare commits
5 Commits
e0c9da1dff
...
f47fa4a8d2
Author | SHA1 | Date |
---|---|---|
Ezekiel | f47fa4a8d2 | |
Ezekiel | 585cf255d6 | |
Hawai | 492a245c34 | |
Hawai | 2b53ec62dc | |
Hawai | 40fda0fb25 |
|
@ -80,7 +80,7 @@ LEVEL,ANSWER,QUESTION,1,2,3,4,5
|
|||
010-160,1,True or false: User accounts have higher UID numbers than do system accounts.,True,False,,,
|
||||
010-160,2,True or false: Command-line users should normally use `usermod` to change their passwords.,True,False,,,
|
||||
010-160,1,True or false: After deleting an account the files formerly owned by the deleted account may remain on the computer.,True,False,,,
|
||||
010-160,1,What command would you type (as `root`) to change the ownership of `somefile.txt` from `ralph` to `tony`? ,`chown ralph:tony somefile.txt`,`chmod somefile.txt tony`,`chown somefile.txt tony`,`chown tony somefile.txt`,`chmod tony somefile.txt`
|
||||
010-160,4,What command would you type (as `root`) to change the ownership of `somefile.txt` from `ralph` to `tony`? ,`chown ralph:tony somefile.txt`,`chmod somefile.txt tony`,`chown somefile.txt tony`,`chown tony somefile.txt`,`chmod tony somefile.txt`
|
||||
010-160,1 2,Typing `ls -ld wonderjaye` reveals a symbolic file mode of `drwxr-xr-x`. Which of the following are true? (Select all that apply.) ,`wonderjaye` is a symbolic link.,`wonderjaye` is an executable program.,`wonderjaye` is a directory.,`wonderjaye` may be read by all users of the system.,`wonderjaye` may be written by any member of the file's group.
|
||||
010-160,4,Which of the following commands can you use to change a file's group?,`groupmod`,`chmod`,`ls`,`chown`,
|
||||
010-160,1,"True or false: A file with permissions of 755 can be read by any user on the computer, assuming all users can read the directory in which it resides.",True,False,,,
|
||||
|
|
|
|
@ -0,0 +1,137 @@
|
|||
import os
|
||||
import csv
|
||||
import random
|
||||
import time
|
||||
|
||||
from rich.console import Console
|
||||
from rich.markdown import Markdown
|
||||
|
||||
# Error codes :
|
||||
# exit (1) = function _open_csv
|
||||
|
||||
|
||||
def _open_csv(filename):
|
||||
# Return True + csv list ===> all ok
|
||||
# with added "done" : "False" ===> Did the user already replied to this qst?
|
||||
# with added "correct" : "False" ===> Was the answer of the user right or wrong
|
||||
# or
|
||||
# Return False + error message ===> problem
|
||||
try:
|
||||
with open(filename) as csv_fp:
|
||||
data = []
|
||||
data_fp = csv.DictReader(csv_fp)
|
||||
for item in data_fp:
|
||||
data.append(item)
|
||||
item["done"] = False
|
||||
item["correct"] = False
|
||||
return data
|
||||
except Exception as error:
|
||||
#print(error)
|
||||
#log("csv opening", error)
|
||||
exit(1)
|
||||
|
||||
|
||||
def _user_conf(max_qst):
|
||||
nb_qst = "0"
|
||||
name = input("Enter your name please : ")
|
||||
while not nb_qst.isnumeric() or int(nb_qst) <= 0 or int(nb_qst) > max_qst:
|
||||
nb_qst = input("How many question do you want (max {}) : ".format(max_qst))
|
||||
return name, nb_qst
|
||||
|
||||
|
||||
def _display_question(question):
|
||||
os.system("clear")
|
||||
console = Console()
|
||||
display_qst = "# {}".format(question["QUESTION"])
|
||||
display_qst = Markdown(display_qst)
|
||||
console.print(display_qst)
|
||||
answer = ""
|
||||
for i in question.keys():
|
||||
if i.isnumeric():
|
||||
answer += "1. {} \n".format(question[i])
|
||||
answer += "\n\n[Q]uit"
|
||||
answer = Markdown(answer)
|
||||
console.print(answer)
|
||||
|
||||
|
||||
def _wait_user_answ(answer):
|
||||
if len(answer["ANSWER"]) > 1: # if ===> several answers
|
||||
real_answer = []
|
||||
user_answer = []
|
||||
# Build list of right answers
|
||||
for i in str(answer["ANSWER"]):
|
||||
if i.isnumeric():
|
||||
real_answer.append(i)
|
||||
# Wait answers of the user
|
||||
result = input("\nWhat are your choices : ")
|
||||
if result.lower() == "q" or result.lower() == "quit":
|
||||
return 3
|
||||
# Build list of user answers
|
||||
for i in result:
|
||||
if i.isnumeric():
|
||||
user_answer.append(i)
|
||||
# Compare
|
||||
real_answer.sort()
|
||||
user_answer.sort()
|
||||
if real_answer == user_answer:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else: # ===> if only one possible answer
|
||||
result = input("\nWhat is your choice : ")
|
||||
|
||||
if result.lower() == "q" or result.lower() == "quit":
|
||||
return 3
|
||||
if result in answer["ANSWER"] and len(result) != 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def _stats(stats_list, player):
|
||||
count_qst = 0
|
||||
count_right_answ = 0
|
||||
os.system("clear")
|
||||
console = Console()
|
||||
display = "# Hi {}\nYour exam test is finished !!!\n".format(player)
|
||||
display = Markdown(display)
|
||||
console.print(display)
|
||||
for item in stats_list:
|
||||
if item["done"] is True:
|
||||
count_qst += 1
|
||||
if item["correct"] is True:
|
||||
count_right_answ += 1
|
||||
display = "# You replied to {} questions, with {} right answers!!!".format(count_qst, count_right_answ)
|
||||
display = Markdown(display)
|
||||
console.print(display)
|
||||
|
||||
|
||||
def main():
|
||||
filename = 'data/list_book1.csv'
|
||||
# csv_list = list of dictionaries :
|
||||
csv_list = _open_csv(filename)
|
||||
random.shuffle(csv_list) # shuffle the list.
|
||||
# Collects the name of the player AND the number of questions wished :
|
||||
player, nb_qst = _user_conf(len(csv_list))
|
||||
count = int(nb_qst)
|
||||
# The loop :
|
||||
get_out_while = False
|
||||
while count > 0 and get_out_while is False:
|
||||
count -= 1
|
||||
_display_question(csv_list[count])
|
||||
# Check if correct answer
|
||||
result = _wait_user_answ(csv_list[count])
|
||||
|
||||
if result == 3: # quit!
|
||||
get_out_while = True
|
||||
elif result: # right answer!
|
||||
csv_list[count]["correct"] = True
|
||||
csv_list[count]["done"] = True
|
||||
else: # wrong answer!
|
||||
csv_list[count]["done"] = True
|
||||
# End of while
|
||||
_stats(csv_list, player)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue