fork download
  1. def get_filename(message):
  2. forbidden='*|\\:"<>?/'
  3. while True:
  4. line=input(message)
  5. for i in forbidden:
  6. if i in line:
  7. print('Symbols {} are forbidden to use'.format(forbidden))
  8. break
  9. else:
  10. break
  11. if not line.endswith('.lst'): line+='.lst'
  12. return line
  13.  
  14. def get_int(message,i_c):
  15. error_line='Only numbers {} are allowed'.format(range(i_c))
  16. while True:
  17. try:
  18. i=int(input(message))
  19. if i in range(i_c+1):
  20. return i
  21. else:
  22. print(error_line)
  23. except ValueError:
  24. print(error_line)
  25.  
  26. def options(changed,empty):
  27. line='[A]dd '+('[S]ave ' if changed else '')+('[D]elete ' if not empty else '')+'[Q]uit [a]: '
  28. answers='Aa'+('Ss' if changed else '')+('Dd' if not empty else '')+'Qq'
  29. while True:
  30. answer=input(line)
  31. if answer:
  32. if answer in answers:
  33. return answer.lower()
  34. else:
  35. print('-Invalid choice. Print one of: \'{}\'-'.format(answers))
  36. else:
  37. return 'a'
  38. def options_quit():
  39. line='Unsaved changes were made. Do you want to save them?\n[Y]es [N]o [C]ancel: '
  40. answers='YyNnCc'
  41. while True:
  42. answer=input(line)
  43. if answer in answers and answer:
  44. return answer.lower()
  45. else:
  46. print('Answer only {}'.format(answers))
  47.  
  48. def save_list(filename,items):
  49. file=open('data\\'+filename,'w')
  50. for i in items:
  51. file.write(i+'\n')
  52.  
  53. def print_list(lst):
  54. for i,j in enumerate(lst,start=1):
  55. print('{}: {}'.format(i,j))
  56.  
  57. def add(items):
  58. items.append(input('Add item: '))
  59. items.sort(key=str.lower)
  60.  
  61. def delete(items):
  62. item_number=get_int('Number of item to delete or 0 to cancel:',len(items))
  63. if item_number==0:
  64. return
  65. else:
  66. items.pop(item_number-1)
  67.  
  68. def main():
  69. import os
  70. files=[i for i in os.listdir('data') if i.endswith('.lst')]
  71. if files:
  72. print_list(files)
  73. option=get_int('Print the number of file to load or 0 to create a new one: ',len(files))
  74. else:
  75. print('-No .lst files were found-')
  76. option=0
  77. if not option:
  78. filename=get_filename('Print name for a new .lst file: ')
  79. items=[]
  80. else:
  81. filename=files[option-1]
  82. items=[i.rstrip('\n') for i in open('data\\'+filename,'r')]
  83. ITEMS,changed=tuple(items),0
  84. print(filename)
  85. while True:
  86. if items:
  87. print_list(items)
  88. empty=0
  89. else:
  90. print('-list is empty-')
  91. empty=1
  92. option=options(changed,empty)
  93. if option=='a':
  94. add(items)
  95. changed=1
  96. elif option=='d':
  97. delete(items)
  98. changed=1
  99. elif option=='s':
  100. save_list(filename,items)
  101. changed=0
  102. break
  103. else:
  104. if changed:
  105. option=options_quit()
  106. if option=='y':
  107. save_list(filename,items)
  108. break
  109. elif option=='n':
  110. break
  111. else:
  112. break
  113.  
  114. main()
Runtime error #stdin #stdout #stderr 0.02s 28384KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 114, in <module>
  File "./prog.py", line 70, in main
FileNotFoundError: [Errno 2] No such file or directory: 'data'