Created
March 1, 2017 15:15
-
-
Save yhaskell/88b80d0a4a7701db252c4c51195ed2f1 to your computer and use it in GitHub Desktop.
adds-edits-list.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
class InvIn(ValueError): pass | |
def main(): | |
filename = get_string("Choose filename", name = "filename", default = "test") | |
flagNS = False | |
Editing = False | |
TheSet = set() | |
User = None | |
MakeOrFind(filename) | |
while(True): | |
User = get_string("{0} {1} [Q]uit".format(lambda Editing: "[A]dd, [D]elete" if Editing == True else "", lambda flagNS : "[S]ave" if flagNS == True else ""), | |
name = "entity", default = "a" if Editing ==True else None).lower() | |
if Editing == True: | |
if User == "a": | |
AddNote(get_string("Add an item:")) | |
WriteAll() | |
flagNS = True | |
if User == "d": | |
RemNote(get_integer("position of removing? 0 to cancel:")) | |
WriteAll() | |
flagNS = True | |
if User == "s": | |
Saving() | |
flagNS = False | |
break | |
if User == "q" and flagNS == True: | |
answer = get_string("save changes? y/n", name = "answer", defailt = "y") | |
if answer = "y": | |
Saving() | |
Quit() | |
print("wrong command") | |
#code else -- "invalid entity" | |
def MakeOrFind(filename): | |
try: | |
#makes or finds files | |
stream = open(filename.lst , 'a') | |
Editing = True | |
except: InvIn | |
"sorry, start again" | |
def MakeASet(): #done | |
#makes the set TheSet | |
TheSet = set(stream.read().split()) | |
def AddNote(addname): | |
#just add the note done | |
TheSet.add(addname) | |
def RemNote(number): | |
#remove from file and sort done | |
if number ! = 0: | |
try: | |
deleted = sorted(TheSet)[number-1] | |
TheSet.remove(deleted) | |
except: KeyError: | |
print("wrong number") | |
def Saving(): | |
#saves when S pressed done | |
filename.write( " ".join(TheSet) | |
print( "Saved {0} item{s} in {1}.lst".format(len(TheSet), filename, s = "" if len(TheSet) = 1 else "s" ) | |
def Quit(): | |
#quitting done | |
sys.exit(0) | |
def WriteAll(): | |
#takes a set, sorts it and writes it with numbers done | |
if len(TheSet) == 0: print("{0}no elements{0}".format("----------") | |
pos = 1 | |
for item in sorted(TheSet): | |
print( "{0}: {1}".format( pos , item)) | |
pos += 1 | |
# additional functions, they are OK | |
def get_string(message, name="string", default=None, | |
minimum_length=0, maximum_length=80): | |
message += ": " if default is None else " [{0}]: ".format(default) | |
while True: | |
try: | |
line = input(message) | |
if not line: | |
if default is not None: | |
return default | |
if minimum_length == 0: | |
return "" | |
else: | |
raise ValueError("{0} may not be empty".format( | |
name)) | |
if not (minimum_length <= len(line) <= maximum_length): | |
raise ValueError("{0} must have at least {1} and " | |
"at most {2} characters".format( | |
name, minimum_length, maximum_length)) | |
return line | |
except ValueError as err: | |
print("ERROR", err) | |
def get_integer(message, name="integer", default=None, minimum=0, | |
maximum=100, allow_zero=True): | |
class RangeError(Exception): pass | |
message += ": " if default is None else " [{0}]: ".format(default) | |
while True: | |
try: | |
line = input(message) | |
if not line and default is not None: | |
return default | |
i = int(line) | |
if i == 0: | |
if allow_zero: | |
return i | |
else: | |
raise RangeError("{0} may not be 0".format(name)) | |
if not (minimum <= i <= maximum): | |
raise RangeError("{0} must be between {1} and {2} " | |
"inclusive{3}".format(name, minimum, maximum, | |
(" (or 0)" if allow_zero else ""))) | |
return i | |
except RangeError as err: | |
print("ERROR", err) | |
except ValueError as err: | |
print("ERROR {0} must be an integer".format(name)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment