Initial Commit
This commit is contained in:
131
Python/Login/login_cod.py
Normal file
131
Python/Login/login_cod.py
Normal file
@@ -0,0 +1,131 @@
|
||||
import getpass
|
||||
import os
|
||||
import pickle
|
||||
import time
|
||||
|
||||
nope = "I didn't quite get that. Mind trying again?"
|
||||
yn = {'y': True, 'n': False}
|
||||
|
||||
if os.path.exists('players'):
|
||||
with open('players', 'rb') as f:
|
||||
if os.stat('players').st_size == 0:
|
||||
accounts = {}
|
||||
else:
|
||||
accounts = pickle.loads(f.read())
|
||||
else:
|
||||
f = open('players', 'wb')
|
||||
f.close()
|
||||
accounts = {}
|
||||
|
||||
class Player(object):
|
||||
|
||||
def __init__(self):
|
||||
self.name = ""
|
||||
self.email = ""
|
||||
self.password = ""
|
||||
self.age = ""
|
||||
self.gender = ""
|
||||
|
||||
def write(self):
|
||||
accounts[p.name] = [p.email, p.password, p.age, p.gender]
|
||||
with open('players', 'wb') as f:
|
||||
pickle.dump(accounts, f)
|
||||
|
||||
p = Player()
|
||||
|
||||
def askChoices(question, options, errorMessage):
|
||||
while True:
|
||||
answer = str(input(question)).lower()
|
||||
if answer in options:
|
||||
return options[answer]
|
||||
else:
|
||||
print(errorMessage)
|
||||
|
||||
def register():
|
||||
|
||||
print("\nWelcome, new player!")
|
||||
|
||||
while True:
|
||||
p.name = input("What is your name? ")
|
||||
if p.name in accounts:
|
||||
print("Name already taken. Please try again.")
|
||||
else:
|
||||
break
|
||||
|
||||
isEmailValid = False
|
||||
while not isEmailValid:
|
||||
p.email = str(input("What is your email address? "))
|
||||
if '@' in p.email and '.' in p.email:
|
||||
isEmailValid == True
|
||||
break
|
||||
else:
|
||||
print(nope, "(Input must contain '@' and '.')")
|
||||
|
||||
p.password = getpass.getpass('Please enter a password. ')
|
||||
|
||||
while True:
|
||||
try:
|
||||
p.age = int(input("How old are you? "))
|
||||
break
|
||||
except ValueError:
|
||||
print(nope, "(Input must be an integer)")
|
||||
|
||||
p.gender = askChoices("What gender are you? ('m' for male, 'f' for female, 'o' for other) ", # it was not my idea to add the 'other' option
|
||||
{'m': "Male", 'f': "Female", 'o': "Other"},
|
||||
nope)
|
||||
|
||||
print("\nName:", p.name,
|
||||
"\nEmail:", p.email,
|
||||
"\nPassword:", ('*' * len(p.password)),
|
||||
"\nAge:", p.age,
|
||||
"\nGender:", p.gender)
|
||||
|
||||
correct = askChoices("Is this information correct? (y/n) ",
|
||||
yn, nope)
|
||||
|
||||
if correct:
|
||||
print("\nRegistration successful!")
|
||||
p.write()
|
||||
login()
|
||||
elif not correct:
|
||||
tryAgain = askChoices("\nWould you like to try again? (y/n) ",
|
||||
yn, nope)
|
||||
if tryAgain:
|
||||
register()
|
||||
else:
|
||||
main()
|
||||
|
||||
def login():
|
||||
while True:
|
||||
name = input("What is your player name? ")
|
||||
if name in accounts:
|
||||
pw = getpass.getpass("Please enter your password. ")
|
||||
if pw == accounts[name][1]:
|
||||
print(accounts[name]) # debug placeholder until quiz functionality is added
|
||||
break
|
||||
else:
|
||||
print("Account not found.")
|
||||
registerNew = askChoices("Would you like to register a new account? (y/n) ",
|
||||
yn, nope)
|
||||
if registerNew:
|
||||
register()
|
||||
break
|
||||
else:
|
||||
pass
|
||||
|
||||
def main():
|
||||
if os.stat('players').st_size == 0:
|
||||
register()
|
||||
else:
|
||||
player = askChoices("Would you like to REGISTER or LOG IN? ",
|
||||
{'register': True, 'log in': False, 'login': False},
|
||||
nope)
|
||||
if player:
|
||||
register()
|
||||
else:
|
||||
login()
|
||||
print("\nShutting down...")
|
||||
time.sleep(3)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user