Skip to content

Commit 2b3e7b7

Browse files
committed
Проект
1 parent 6a26236 commit 2b3e7b7

1 file changed

Lines changed: 147 additions & 44 deletions

File tree

version-3-mini.py

Lines changed: 147 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,83 +2,186 @@
22
import random
33
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout,
44
QPushButton, QLabel, QLineEdit,
5-
QComboBox, QSpinBox)
5+
QComboBox, QSpinBox, QGridLayout,
6+
QMessageBox, QTextEdit)
7+
from PyQt5.QtGui import QFont
68

7-
class SimpleRandomGenerator(QWidget):
9+
class RandomGenerator(QWidget):
810
def __init__(self):
911
super().__init__()
12+
self.is_dark_theme = True
13+
self.history = []
1014
self.initUI()
1115

1216
def initUI(self):
1317
# Настройки окна
1418
self.setWindowTitle('Генератор Случайных Чисел')
15-
self.setGeometry(100, 100, 400, 300)
19+
self.setGeometry(100, 100, 600, 700)
20+
21+
# Кнопки управления
22+
self.theme_button = QPushButton("Светлая тема")
23+
self.theme_button.clicked.connect(self.toggle_theme)
24+
25+
self.help_button = QPushButton("?")
26+
self.help_button.clicked.connect(self.show_help)
27+
28+
self.export_button = QPushButton("Экспорт")
29+
self.export_button.clicked.connect(self.export_history)
1630

1731
# Основной макет
18-
layout = QVBoxLayout()
32+
layout = QGridLayout()
33+
layout.addWidget(self.theme_button, 0, 0)
34+
layout.addWidget(self.help_button, 0, 1)
35+
layout.addWidget(self.export_button, 0, 2)
36+
37+
# Результат
38+
self.result = QTextEdit()
39+
self.result.setReadOnly(True)
40+
self.result.setFont(QFont("Arial", 16))
41+
layout.addWidget(self.result, 1, 0, 1, 5)
1942

2043
# Минимальное значение
21-
layout.addWidget(QLabel('Минимальное значение:'))
44+
layout.addWidget(QLabel('Минимальное значение:'), 2, 0)
2245
self.min_input = QSpinBox()
23-
self.min_input.setRange(-1000, 1000)
24-
layout.addWidget(self.min_input)
46+
self.min_input.setRange(-1000000, 1000000)
47+
layout.addWidget(self.min_input, 2, 1)
2548

2649
# Максимальное значение
27-
layout.addWidget(QLabel('Максимальное значение:'))
50+
layout.addWidget(QLabel('Максимальное значение:'), 2, 2)
2851
self.max_input = QSpinBox()
29-
self.max_input.setRange(-1000, 1000)
52+
self.max_input.setRange(-1000000, 1000000)
3053
self.max_input.setValue(100)
31-
layout.addWidget(self.max_input)
54+
layout.addWidget(self.max_input, 2, 3)
3255

3356
# Тип генерации
34-
layout.addWidget(QLabel('Тип генерации:'))
57+
layout.addWidget(QLabel('Тип генерации:'), 3, 0)
58+
self.generation_type = QComboBox()
59+
self.generation_type.addItems([
60+
'Случайные числа',
61+
'Уникальные числа',
62+
'Взвешенная генерация'
63+
])
64+
layout.addWidget(self.generation_type, 3, 1)
65+
66+
# Тип числа
67+
layout.addWidget(QLabel('Тип числа:'), 3, 2)
3568
self.type_select = QComboBox()
36-
self.type_select.addItems(['Случайное число', 'Последовательность'])
37-
layout.addWidget(self.type_select)
69+
self.type_select.addItems(['Целое', 'Вещественное'])
70+
layout.addWidget(self.type_select, 3, 3)
3871

39-
# Количество чисел
40-
layout.addWidget(QLabel('Количество:'))
72+
# Количество
73+
layout.addWidget(QLabel('Количество:'), 4, 0)
4174
self.count_input = QSpinBox()
42-
self.count_input.setRange(1, 100)
43-
layout.addWidget(self.count_input)
75+
self.count_input.setRange(1, 1000)
76+
self.count_input.setValue(1)
77+
layout.addWidget(self.count_input, 4, 1)
4478

4579
# Кнопка генерации
46-
generate_button = QPushButton('Сгенерировать')
47-
generate_button.clicked.connect(self.generate_numbers)
48-
layout.addWidget(generate_button)
49-
50-
# Результат
51-
self.result_label = QLabel('Результат:')
52-
layout.addWidget(self.result_label)
80+
self.generate_button = QPushButton("Сгенерировать")
81+
self.generate_button.clicked.connect(self.generate_numbers)
82+
layout.addWidget(self.generate_button, 5, 0, 1, 5)
5383

5484
self.setLayout(layout)
85+
self.apply_theme()
5586

5687
def generate_numbers(self):
57-
# Получаем параметры
58-
min_val = self.min_input.value()
59-
max_val = self.max_input.value()
60-
gen_type = self.type_select.currentText()
61-
count = self.count_input.value()
62-
63-
# Проверка корректности диапазона
64-
if min_val > max_val:
65-
self.result_label.setText('Ошибка: Мин. значение больше макс.')
66-
return
67-
68-
# Генерация
6988
try:
70-
if gen_type == 'Случайное число':
71-
result = random.randint(min_val, max_val)
72-
self.result_label.setText(f'Случайное число: {result}')
73-
else:
74-
result = [random.randint(min_val, max_val) for _ in range(count)]
75-
self.result_label.setText(f'Последовательность: {result}')
89+
min_val = self.min_input.value()
90+
max_val = self.max_input.value()
91+
count = self.count_input.value()
92+
generation_type = self.generation_type.currentText()
93+
num_type = 'int' if self.type_select.currentText() == 'Целое' else 'float'
94+
95+
if min_val > max_val:
96+
self.result.setText("Минимальное значение не может быть больше максимального!")
97+
return
98+
99+
if generation_type == 'Случайные числа':
100+
if num_type == 'int':
101+
numbers = [random.randint(min_val, max_val) for _ in range(count)]
102+
else:
103+
numbers = [round(random.uniform(min_val, max_val), 2) for _ in range(count)]
104+
result_text = f"Сгенерированы числа ({count} шт.):\n{numbers}"
105+
106+
elif generation_type == 'Уникальные числа':
107+
numbers = random.sample(range(min_val, max_val + 1), count)
108+
result_text = f"Сгенерированы уникальные числа:\n{numbers}"
109+
110+
elif generation_type == 'Взвешенная генерация':
111+
numbers = [1, 2, 3, 4, 5]
112+
weights = [0.1, 0.2, 0.3, 0.2, 0.2]
113+
weighted_numbers = random.choices(numbers, weights=weights, k=count)
114+
result_text = f"Сгенерированы взвешенные числа:\n{weighted_numbers}"
115+
116+
self.result.setText(result_text)
117+
self.history.append(result_text)
76118
except Exception as e:
77-
self.result_label.setText(f'Ошибка: {str(e)}')
119+
self.result.setText(f"Ошибка: {str(e)}")
120+
121+
def apply_theme(self):
122+
if self.is_dark_theme:
123+
self.setStyleSheet("""
124+
background-color: #2E2E2E;
125+
color: white;
126+
""")
127+
self.theme_button.setStyleSheet("""
128+
background-color: #4C4C4C;
129+
color: white;
130+
""")
131+
self.help_button.setStyleSheet("""
132+
background-color: #4C4C4C;
133+
color: white;
134+
""")
135+
self.export_button.setStyleSheet("""
136+
background-color: #4C4C4C;
137+
color: white;
138+
""")
139+
self.result.setStyleSheet("""
140+
background-color: #1E1E1E;
141+
color: white;
142+
""")
143+
else:
144+
self.setStyleSheet("""
145+
background-color: #FFFFFF;
146+
color: black;
147+
""")
148+
self.theme_button.setStyleSheet("""
149+
background-color: #CCCCCC;
150+
color: black;
151+
""")
152+
self.help_button.setStyleSheet("""
153+
background-color: #CCCCCC;
154+
color: black;
155+
""")
156+
self.export_button.setStyleSheet("""
157+
background-color: #CCCCCC;
158+
color: black;
159+
""")
160+
self.result.setStyleSheet("""
161+
background-color: #F0F0F0;
162+
color: black;
163+
""")
164+
165+
def toggle_theme(self):
166+
self.is_dark_theme = not self.is_dark_theme
167+
self.apply_theme()
168+
169+
def show_help(self):
170+
QMessageBox.information(self, "Справка",
171+
"Генератор случайных чисел:\n"
172+
"1. Выберите минимальное и максимальное значения.\n"
173+
"2. Выберите тип генерации.\n"
174+
"3. Укажите количество чисел для генерации.\n" "4. Нажмите 'Сгенерировать' для получения результата.")
175+
176+
def export_history(self):
177+
with open("history.txt", "w") as file:
178+
for entry in self.history:
179+
file.write(entry + "\n")
180+
QMessageBox.information(self, "Экспорт", "История генерации экспортирована в history.txt")
78181

79182
def main():
80183
app = QApplication(sys.argv)
81-
generator = SimpleRandomGenerator()
184+
generator = RandomGenerator()
82185
generator.show()
83186
sys.exit(app.exec_())
84187

0 commit comments

Comments
 (0)