Teammasik

lr2 bz

Jan 27th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 18.89 KB | Food | 0 0
  1. class Printer:
  2.     def __init__(self):
  3.         self.printers = [
  4.             {
  5.                 "Название": "Creality3D HALOT-R6",
  6.                 "Тип": "3Д-принтер",
  7.                 "Цена": 15999,
  8.                 "Отзывы": "да",
  9.                 "Фирма": "Creality3D",
  10.                 "Материал": ["фотополимерная смола"],
  11.                 "Скорость": 60,
  12.             },
  13.             {
  14.                 "Название": "Anycubic Kobra 2 Neo",
  15.                 "Тип": "3Д-принтер",
  16.                 "Цена": 22999,
  17.                 "Отзывы": "да",
  18.                 "Фирма": "Anycubic",
  19.                 "Материал": ["petg, pla", "abs"],
  20.                 "Скорость": 150,
  21.             },
  22.             {
  23.                 "Название": "Elegoo Mars 5",
  24.                 "Тип": "3Д-принтер",
  25.                 "Цена": 29999,
  26.                 "Отзывы": "да",
  27.                 "Фирма": "Elegoo",
  28.                 "Материал": ["фотополимерная смола"],
  29.                 "Скорость": 70,
  30.             },
  31.             {
  32.                 "Название": "Flying bear Ghost 6",
  33.                 "Тип": "3Д-принтер",
  34.                 "Цена": 37999,
  35.                 "Отзывы": "нет",
  36.                 "Фирма": "Flying bear",
  37.                 "Материал": ["petg, pla", "abs"],
  38.                 "Скорость": 150,
  39.             },
  40.             {
  41.                 "Название": "Wanhao Duplicator 11 CGR 4K",
  42.                 "Тип": "3Д-принтер",
  43.                 "Цена": 129900,
  44.                 "Отзывы": "нет",
  45.                 "Фирма": "Wanhao",
  46.                 "Материал": ["фотополимерная смола"],
  47.                 "Скорость": 60,
  48.             },
  49.             {
  50.                 "Название": "Epson lx350",
  51.                 "Тип": "Матричный",
  52.                 "Цена": 26199,
  53.                 "Отзывы": "да",
  54.                 "Иглы": 9,
  55.                 "Скорость": 347,
  56.             },
  57.             {
  58.                 "Название": "Epson lq350",
  59.                 "Тип": "Матричный",
  60.                 "Цена": 27999,
  61.                 "Отзывы": "да",
  62.                 "Иглы": 24,
  63.                 "Скорость": 347,
  64.             },
  65.             {
  66.                 "Название": "Epson FX-890II",
  67.                 "Тип": "Матричный",
  68.                 "Цена": 106499,
  69.                 "Отзывы": "нет",
  70.                 "Иглы": 18,
  71.                 "Скорость": 738,
  72.             },
  73.             {
  74.                 "Название": "HP LaserJet Pro 500 M501dn",
  75.                 "Тип": "Лазерный",
  76.                 "Цена": 48999,
  77.                 "Отзывы": "да",
  78.                 "Фирма": "HP",
  79.                 "Печать": "черно-белая",
  80.                 "Разрешение": "600x600",
  81.                 "Скорость": 43,
  82.                 "wifi": "да",
  83.                 "Формат": "A4",
  84.             },
  85.             {
  86.                 "Название": "Xerox Cumshot-2217",
  87.                 "Тип": "Лазерный",
  88.                 "Цена": 121999,
  89.                 "Отзывы": "нет",
  90.                 "Фирма": "Xerox",
  91.                 "Печать": "цветная",
  92.                 "Разрешение": "1200x1200",
  93.                 "Скорость": 32,
  94.                 "wifi": "да",
  95.                 "Формат": "A4",
  96.             },
  97.             {
  98.                 "Название": "Brother HL-1110",
  99.                 "Тип": "Лазерный",
  100.                 "Цена": 10199,
  101.                 "Отзывы": "да",
  102.                 "Фирма": "Brother",
  103.                 "Печать": "черно-белая",
  104.                 "Разрешение": "2400x600",
  105.                 "Скорость": 20,
  106.                 "wifi": "нет",
  107.                 "Формат": "A4",
  108.             },
  109.             {
  110.                 "Название": "Pantum P2200",
  111.                 "Тип": "Лазерный",
  112.                 "Цена": 10799,
  113.                 "Отзывы": "нет",
  114.                 "Фирма": "Pantum",
  115.                 "Печать": "черно-белая",
  116.                 "Разрешение": "1200x1200",
  117.                 "Скорость": 20,
  118.                 "wifi": "нет",
  119.                 "Формат": "A4",
  120.             },
  121.             {
  122.                 "Название": "Canon Yana3800",
  123.                 "Тип": "Лазерный",
  124.                 "Цена": 32999,
  125.                 "Отзывы": "да",
  126.                 "Фирма": "Canon",
  127.                 "Печать": "цветная",
  128.                 "Разрешение": "2400x600",
  129.                 "Скорость": 16,
  130.                 "wifi": "нет",
  131.                 "Формат": "A3",
  132.             },
  133.         ]
  134.  
  135.  
  136. class PrinterQuestionnaire:
  137.     def __init__(self):
  138.         self.questions = {
  139.             "printer_type": {
  140.                 "question": "Какой тип принтера вам нужен?",
  141.                 "options": ["3Д-принтер", "Матричный", "Лазерный"],
  142.                 "multi_choice": False
  143.             },
  144.             "printer_budget": {
  145.                 "question": "Какой у вас бюджет?",
  146.                 "options": ["до 10", "до 30", "до 100", "до 200"],
  147.                 "multi_choice": False
  148.             },
  149.             "printer_reviews": {
  150.                 "question": "Важна ли вам оценка принтера согласно другим пользователям (средняя оценка принтера)?",
  151.                 "options": ["да", "нет"],
  152.                 "multi_choice": False
  153.             },
  154.             "printer_use": {
  155.                 "question": "Для каких нужд вам нужен 3д принтер?",
  156.                 "options": ["любительская печать 3д моделей", "печать 3д моделей для производства", "профессиональная 3д печать"],
  157.                 "multi_choice": False
  158.             },
  159.             "printer_manufacture": {
  160.                 "question": "Какой фирме вы отдаете предпочтение?",
  161.                 "options": ["Creality3D", "Anycubic", "Elegoo", "Flying bear", "Wanhao", "не важно"],
  162.                 "multi_choice": True
  163.             },
  164.             "printer_material": {
  165.                 "question": "Какой материал вы будете использовать?",
  166.                 "options": ["фотополимерная смола", "abs, asa, ptg", "petg, pla", "Carbon", "не важно"],
  167.                 "multi_choice": True
  168.             },
  169.             "printer_speed": {
  170.                 "question": "Какая скорость нужна?",
  171.                 "options": ["до 150", "до 300", "от 300", "не важно"],
  172.                 "multi_choice": False
  173.             },
  174.             "printer_needle_count": {
  175.                 "question": "Сколько игл вам нужно в принтере?",
  176.                 "options": ["не важно", "от 9", "от 20"],
  177.                 "multi_choice": False
  178.             },
  179.             "printer_print_type": {
  180.                 "question": "Какой тип печати нужен?",
  181.                 "options": ["цветной", "черно-белый"],
  182.                 "multi_choice": False
  183.             },
  184.             "printer_resolution": {
  185.                 "question": "Какое разрешение нужно?",
  186.                 "options": ["600x600", "1200x1200", "2400x600", "не важно"],
  187.                 "multi_choice": False
  188.             },
  189.             "printer_wifi": {
  190.                 "question": "Важно ли наличие WI-FI?",
  191.                 "options": ["да", "нет"],
  192.                 "multi_choice": False
  193.             },
  194.             "printer_format": {
  195.                 "question": "Какой формат печати нужен?",
  196.                 "options": ["A4", "A3"],
  197.                 "multi_choice": False
  198.             }
  199.         }
  200.         self.printer = Printer()
  201.  
  202.     def ask_question(self, question_key):
  203.         question_data = self.questions.get(question_key)
  204.         if not question_data:
  205.             return None
  206.  
  207.         question = question_data["question"]
  208.         options = question_data["options"]
  209.         is_multi_choice = question_data["multi_choice"]
  210.  
  211.         print(question)
  212.         for i, option in enumerate(options, 1):
  213.             print(f"{i}) {option}")
  214.  
  215.         while True:
  216.             try:
  217.                 choice = list(map(int, input("Введите номера через запятую: ").strip().lower().split(",")))
  218.             except ValueError:
  219.                 print("Ошибка: введите только числа, разделенные запятыми.")
  220.                 continue
  221.  
  222.             if len(choice) > 1 and not is_multi_choice:
  223.                 print("Введите только одно число")
  224.                 continue
  225.  
  226.             is_correct = True
  227.             for i in choice:
  228.                 if i > len(options) or i < 1:
  229.                     print("Ошибка: введите номер из списка")
  230.                     is_correct = False
  231.                     break
  232.  
  233.             if is_correct:
  234.                 selected_options = [options[i - 1] for i in choice]
  235.                 return choice, selected_options
  236.  
  237.     def filter_printers(self, answers):
  238.         filtered_printers = []
  239.         total_conditions = len(answers)  # Общее количество условий
  240.  
  241.         for printer in self.printer.printers:
  242.             match_count = 0  # Счетчик совпадений
  243.  
  244.             if "printer_type" in answers and printer["Тип"].lower() == answers["printer_type"][0].lower():
  245.                 match_count += 1
  246.  
  247.             if "printer_budget" in answers:
  248.                 budget = answers["printer_budget"][0]
  249.                 if budget == "до 10" and printer["Цена"] <= 10000:
  250.                     match_count += 1
  251.                 elif budget == "до 30" and printer["Цена"] <= 30000:
  252.                     match_count += 1
  253.                 elif budget == "до 100" and printer["Цена"] <= 100000:
  254.                     match_count += 1
  255.                 elif budget == "до 200" and printer["Цена"] <= 200000:
  256.                     match_count += 1
  257.  
  258.             if "printer_reviews" in answers and answers["printer_reviews"][0].lower() == printer["Отзывы"].lower():
  259.                 match_count += 1
  260.  
  261.             if printer["Тип"] == "3Д-принтер":
  262.                 if "printer_use" in answers and answers["printer_use"][0].lower() in [u.lower() for u in
  263.                                                                                       printer.get("Предназначение",
  264.                                                                                                   [])]:
  265.                     match_count += 1
  266.                 if "printer_manufacture" in answers:
  267.                     if "не важно" in answers["printer_manufacture"] or printer["Фирма"].lower() in [m.lower() for m in
  268.                                                                                                     answers[
  269.                                                                                                         "printer_manufacture"]]:
  270.                         match_count += 1
  271.                 if "printer_material" in answers:
  272.                     if "не важно" in answers["printer_material"] or any(
  273.                             material.lower() in [m.lower() for m in answers["printer_material"]] for material in
  274.                             printer["Материал"]):
  275.                         match_count += 1
  276.                 if "printer_speed" in answers:
  277.                     speed = answers["printer_speed"][0]
  278.                     if speed == "до 150" and printer["Скорость"] <= 150:
  279.                         match_count += 1
  280.                     elif speed == "до 300" and printer["Скорость"] <= 300:
  281.                         match_count += 1
  282.                     elif speed == "от 300" and printer["Скорость"] >= 300:
  283.                         match_count += 1
  284.  
  285.             if printer["Тип"] == "Матричный":
  286.                 if "printer_needle_count" in answers:
  287.                     needles = answers["printer_needle_count"][0]
  288.                     if needles == "не важно":
  289.                         match_count += 1
  290.                     elif needles == "от 9" and printer["Иглы"] >= 9:
  291.                         match_count += 1
  292.                     elif needles == "от 20" and printer["Иглы"] >= 20:
  293.                         match_count += 1
  294.                 if "printer_speed" in answers:
  295.                     speed = answers["printer_speed"][0]
  296.                     if speed == "347" and printer["Скорость"] == 347:
  297.                         match_count += 1
  298.                     elif speed == "738" and printer["Скорость"] == 738:
  299.                         match_count += 1
  300.  
  301.             if printer["Тип"] == "Лазерный":
  302.                 if "printer_manufacture" in answers:
  303.                     if "не важно" in answers["printer_manufacture"] or printer["Фирма"].lower() in [m.lower() for m in
  304.                                                                                                     answers[
  305.                                                                                                         "printer_manufacture"]]:
  306.                         match_count += 1
  307.                 if "printer_print_type" in answers and printer["Печать"].lower() == answers["printer_print_type"][
  308.                     0].lower():
  309.                     match_count += 1
  310.                 if "printer_resolution" in answers:
  311.                     if "не важно" in answers["printer_resolution"] or printer["Разрешение"].lower() == \
  312.                             answers["printer_resolution"][0].lower():
  313.                         match_count += 1
  314.                 if "printer_speed" in answers:
  315.                     speed = answers["printer_speed"][0]
  316.                     if speed == "до 20 стр/мин" and printer["Скорость"] <= 20:
  317.                         match_count += 1
  318.                     elif speed == "до 30 стр/мин" and printer["Скорость"] <= 30:
  319.                         match_count += 1
  320.                     elif speed == "до 40 стр/мин" and printer["Скорость"] <= 40:
  321.                         match_count += 1
  322.                     elif speed == "выше 40 стр/мин" and printer["Скорость"] > 40:
  323.                         match_count += 1
  324.                 if "printer_wifi" in answers and printer["wifi"].lower() == answers["printer_wifi"][0].lower():
  325.                     match_count += 1
  326.                 if "printer_format" in answers and printer["Формат"].lower() == answers["printer_format"][0].lower():
  327.                     match_count += 1
  328.  
  329.             # Проверяем, соответствует ли принтер 70% условий
  330.             if match_count / total_conditions >= 0.7:
  331.                 filtered_printers.append(printer)
  332.  
  333.         return filtered_printers
  334.  
  335.     def run_questionnaire(self):
  336.         print("Вас приветствует программа выбора принтера!")
  337.         print("Отвечайте на вопросы, написанием цифры")
  338.  
  339.         answers = {}
  340.         answers["printer_type"] = self.ask_question("printer_type")[1]
  341.         answers["printer_budget"] = self.ask_question("printer_budget")[1]
  342.         answers["printer_reviews"] = self.ask_question("printer_reviews")[1]
  343.  
  344.         if answers["printer_type"][0] == "3Д-принтер":
  345.             answers["printer_use"] = self.ask_question("printer_use")[1]
  346.             answers["printer_manufacture"] = self.ask_question("printer_manufacture")[1]
  347.             answers["printer_material"] = self.ask_question("printer_material")[1]
  348.             answers["printer_speed"] = self.ask_question("printer_speed")[1]
  349.  
  350.         elif answers["printer_type"][0] == "Матричный":
  351.             answers["printer_needle_count"] = self.ask_question("printer_needle_count")[1]
  352.             answers["printer_speed"] = self.ask_question("printer_speed")[1]
  353.  
  354.         elif answers["printer_type"][0] == "Лазерный":
  355.             answers["printer_manufacture"] = self.ask_question("printer_manufacture")[1]
  356.             answers["printer_print_type"] = self.ask_question("printer_print_type")[1]
  357.             answers["printer_resolution"] = self.ask_question("printer_resolution")[1]
  358.             answers["printer_speed"] = self.ask_question("printer_speed")[1]
  359.             answers["printer_wifi"] = self.ask_question("printer_wifi")[1]
  360.             answers["printer_format"] = self.ask_question("printer_format")[1]
  361.  
  362.         recommended_printers = self.filter_printers(answers)
  363.  
  364.         if recommended_printers:
  365.             print("\nРекомендуемые принтеры:")
  366.             for printer in recommended_printers:
  367.                 print(f"\nНазвание: {printer['Название']}")
  368.                 print(f"Тип: {printer['Тип']}")
  369.                 print(f"Цена: {printer['Цена']} руб.")
  370.                 if "Фирма" in printer:
  371.                     print(f"Фирма: {printer['Фирма']}")
  372.                 if "Материал" in printer:
  373.                     print(f"Материалы: {', '.join(printer['Материал'])}")
  374.                 if "Скорость" in printer:
  375.                     print(f"Скорость: {printer['Скорость']}")
  376.                 if "Иглы" in printer:
  377.                     print(f"Иглы: {printer['Иглы']}")
  378.                 if "Печать" in printer:
  379.                     print(f"Тип печати: {printer['Печать']}")
  380.                 if "Разрешение" in printer:
  381.                     print(f"Разрешение: {printer['Разрешение']}")
  382.                 if "wifi" in printer:
  383.                     print(f"Wi-Fi: {printer['wifi']}")
  384.                 if "Формат" in printer:
  385.                     print(f"Формат: {printer['Формат']}")
  386.         else:
  387.             print("\nК сожалению, подходящих принтеров не найдено.")
  388.  
  389.         print("\nБюджет:", ', '.join(answers["printer_budget"]))
  390.         print("Важны ли отзывы:", ', '.join(answers["printer_reviews"]))
  391.  
  392.  
  393. questionnaire = PrinterQuestionnaire()
  394. questionnaire.run_questionnaire()
Add Comment
Please, Sign In to add comment