Advertisement
br0wdie

[Aleshkina] Lab 4

Dec 11th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.39 KB | None | 0 0
  1. # _*_ coding:utf-8 _*_
  2. from os import listdir
  3. import sys
  4.  
  5. def get_string(message, name="Строка", default=None,
  6.                minimum_length=0, maximum_length=80):
  7.     message += ": " if default is None else " [{0}]: ".format(default)
  8.     while True:
  9.         try:
  10.             line = input(message)
  11.             if not line:
  12.                 if default is not None:
  13.                     return default
  14.                 if minimum_length == 0:
  15.                     return ""
  16.                 else:
  17.                     raise ValueError("{0} не должна быть пустой".format(name))
  18.             if not (minimum_length <= len(line) <= maximum_length):
  19.                 raise ValueError("{0} должно быть больше {1} и "
  20.                 "меньше {2} символов".format(
  21.                 name, minimum_length, maximum_length))
  22.             return line
  23.         except ValueError as err:
  24.             print("ERROR", err)
  25.  
  26. def get_integer(message, name="целое число", default=None, minimum=0,
  27.                 maximum=100, allow_zero=True):
  28.  
  29.     class RangeError(Exception): pass
  30.  
  31.     message += ": " if default is None else " [{0}]: ".format(default)
  32.     while True:
  33.         try:
  34.             line = input(message)
  35.             if not line and default is not None:
  36.                 return default
  37.             i = int(line)
  38.             if i == 0:
  39.                 if allow_zero:
  40.                     return i
  41.                 else:
  42.                     raise RangeError("{0} не должен быть 0".format(name))
  43.             if not (minimum <= i <= maximum):
  44.                 raise RangeError("{0} должен быть между {1} и {2} "
  45.                                  "включительно {3}".format(name, minimum, maximum,
  46.                                                            (" (или 0)" if allow_zero else "")))
  47.             return i
  48.         except RangeError as err:
  49.             print("ОШИБКА", err)
  50.         except ValueError as err:
  51.             print("ОШИБКА {0} должно быть целым числом".format(name))
  52.  
  53. def print_list(inlist):
  54.     if (len(inlist) == 0):
  55.             print("-- Список не содержит элементов --")
  56.     for i in range(0, len(inlist)):
  57.                 print(i+1, ": ", inlist[i])
  58.  
  59.  
  60. def create_new_file():
  61.     name = get_string("Введите имя файла: ", "Название", "New_file", 1, 50)
  62.     file = open(name + ".lst","w+")
  63.     file.close()
  64.     return name + ".lst"
  65.  
  66. def open_file(name):
  67.     try:
  68.         file = open(name, "r")
  69.         lines = file.read().splitlines()
  70.        
  71.         while 1:
  72.             print("Список строк: ")
  73.             print_list(lines)
  74.             choice = get_string("[Д]обавить [У]далить [С]охранить [В]ыйти :", "Буква", None, 1, 1) #need to fix!
  75.             if (choice == "Д" or choice == "д"):
  76.                 string = get_string("Добавить строку: ", "Строка", None, 0, 50)
  77.                 lines.append(string)
  78.             if (choice == "У" or choice == "у"):
  79.                 num = get_integer("Введите номер строки для удаления: ", "Номер", None, 1, len(lines))
  80.                 lines.pop(num) # NEED TO FIX
  81.             if (choice == "С" or choice == "с"):
  82.                 file.close()
  83.                 file = open(name, "w+")
  84.                 for item in lines:
  85.                     file.write(item)
  86.                 file.close()
  87.                 file = open(name, "r")
  88.                 print("Сохранение ", len(lines), " строк в файл ", name)
  89.             if (choice == "В" or choice == "в"):
  90.                 file.close()
  91.                 sys.exit(0)
  92.     except IOError:
  93.         print("Не могу открыть файл")
  94.         sys.exit(0)
  95.  
  96. def menu():
  97.     files = listdir(".")
  98.     files = list(filter(lambda x : x[-4:] == '.lst', files))
  99.     print("Список файлов: \n")
  100.     print_list(files)
  101.  
  102.     choice = get_integer("Выберите номер файла (или 0 для создания нового файла): ", "Номер", 0, 1,len(files))
  103.     if (choice == 0):
  104.             open_file(create_new_file())
  105.     else:
  106.             if (choice <= len(files)):
  107.                     open_file(files[choice-1])
  108.             else:
  109.                     print("Error!")
  110.  
  111.  
  112. menu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement