Помощь в Python
Помогите пожалуйста.
f'Процесс PID:1 перешел в состояние ВЫПОЛНЕНИЕ:'
f'Класс приоритета: {0}, значение - {x}'
Мне нужно чтобы вместо {0}, ставился класс, в зависимости от значения.
Если 24, то класс Real time class.
Если 12, то класс High class.
Как это можно сделать?
При запуске мы добавляем значения через команды add1 24 затем add2 13. и запускаем через команду start. И в этой строке мы получаем что f'Класс приоритета: {0}, значение - {x} \n \n' вместо {x} ставится 24. А мне нужно чтобы кроме этого еще на месте, где стоит {0} ставился нужный класс. При значении {x} 24 это будет класс Real time class, если {x} 13, то Hight class и так далее
{x} берется из
idx = {}
for x in idx:
#!/usr/bin/env python3
# -*- config: utf-8 -*-
from tkinter import *
import queue
import threading
import time
class QueueThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self) -> None:
print(f'Старт потока {self.name}')
process_queue()
print(f'Завершение потока {self.name}')
def process_queue():
while True:
try:
x = ps_queue.get(block=False)
process1 = idx[x]
y = ps_queue.get(block=False)
process2 = idx2[y]
except queue.Empty:
return
else:
print_factors(x, y, process1, process2, res_list)
time.sleep(1)
def print_factors(x, y, process1, process2, res_list):
try:
for g in results:
res_list = g[x]
except KeyError:
res_list = []
current_res = []
st = time.time()
try:
begin = drop_list[x]
except KeyError:
begin = 1
for i in range(begin, x + 1):
current = time.time()
if i == x:
del idx[x]
term.insert(END, f'Процесс PID:1 перешел в состояние ВЫПОЛНЕНИЕ:\n '
f'Класс приоритета: {0}, значение - {x} \n \n'
f'----------------------------------------------------------------\n \n'
f'Процесс PID:1 перешел в состояние ГОТОВНОСТЬ, в потоке \n'
f'появился процесс PID:2 с более высоким приоритетом: \n \n'
f'Значение приоритета процесса PID:1 = {x} \n'
f'Значение приоритета процесса PID:2 = {y} \n \n'
f'----------------------------------------------------------------\n \n'
f'Процесс PID:2 перешел в состояние ВЫПОЛНЕНИЕ: \n'
f'Класс приоритета: {0}, значение - {y} \n \n'
f'----------------------------------------------------------------\n \n'
f'Процесс PID:2 завершил работу, и перешел в состояние ОЖИДАНИЕ \n '
f'Класс приоритета: {0}, значение - {y} \n \n'
f'----------------------------------------------------------------\n \n'
f'Процесс PID:1 перешел в состояние ВЫПОЛНЕНИЕ \n'
f'Класс приоритета: {0}, значение - {x} \n \n'
f'----------------------------------------------------------------\n \n'
f'Процесс PID:1 завершил работу, и перешел в состояние ОЖИДАНИЕ \n '
f'Класс приоритета: {0}, значение - {x} \n \n'
f'----------------------------------------------------------------\n \n')
break
def entry_get(event):
global idx, cm_list, ps_queue
command = en1.get()
term.insert(END, f'# {command} \n')
cm_list.append(command)
en1.delete(0, 'end')
if command == 'exit':
root.destroy()
elif command.startswith('add1 '):
parts = command.split(' ', maxsplit=3)
num = int(parts[1])
proc = float(0.5)
idx[num] = proc
ps_queue.put(num)
elif command.startswith('add2 '):
parts = command.split(' ', maxsplit=3)
num = int(parts[1])
proc = float(0.5)
idx2[num] = proc
ps_queue.put(num)
elif command == 'clear':
term.delete(0.0, END)
elif command == 'start':
thread1 = QueueThread('A')
thread1.start()
elif command == 'list':
term.insert(END, f'Список приоритетов, состовляющих алгоритм планирования \n')
for i in idx:
term.insert(END, f'{i} \n')
for i in idx2:
term.insert(END, f'{i} \n')
elif command == 'help':
term.insert(END, f'"add1 УРОВЕНЬ ПРИОРИТЕТА" - добавляет уровень приоритета процесса 1.')
term.insert(END, f'"add2 УРОВЕНЬ ПРИОРИТЕТА" - добавляет уровень приоритета процесса 2.')
term.insert(END, f'"list" - выводит список приоритетов, для алгоритма планирования. \n')
term.insert(END, f'"clear" - очищает терминал. \n')
term.insert(END, f'"help" - выводит список команд. \n')
term.insert(END, f'"start" - запускает алгоритм планирования. \n')
term.insert(END, f'"exit" - выход. \n')
else:
term.insert(END, f'{command} -- неизвестная комманда, используйте "help". \n')
if __name__ == '__main__':
idx = {}
idx2 = {}
res_list = []
results = []
drop_list = {}
cm_list = []
ps_queue = queue.Queue()
for x in idx:
ps_queue.put(x)
for y in idx2:
ps_queue.put(y)
r = str('Real time class')
h = str('High class')
a = str('Above normal class')
n = str('Normal class')
b = str('Below normal class')
i = str('Idle class')
info = str('неопределен')
if idx == 24:
print(r)
elif idx == 13:
print(h)
elif idx == 10:
print(a)
elif idx == 8:
print(n)
elif idx == 6:
print(b)
elif idx == 4:
print(i)
if idx2 == 24:
print(r)
elif idx2 == 13:
print(h)
elif idx2 == 10:
print(a)
elif idx2 == 8:
print(n)
elif idx2 == 6:
print(b)
elif idx2 == 4:
print(i)
root = Tk()
root.geometry('570x400')
root.title("Подсистема управления процессами с алгоритмом планирования на основе абсолютных приоритетов")
root.resizable(False, False)
lb1 = Label(text='Командная строка:', width=0)
lb2 = Label(text='Терминал:', width=0)
en1 = Entry(width=68, bg='black', fg='white')
term = Text(bg='black', width=65, height=19, fg='white')
en1.bind('<Return>', entry_get)
en1.bind('<Button-1>', lambda x: print(idx))
lb1.grid(row=0, column=0, sticky=W, pady=10, padx=5)
lb2.grid(row=1, column=1, sticky=W)
en1.grid(row=0, column=1, sticky=W)
term.grid(row=2, column=0, columnspan=2, padx=20, pady=10)
root.mainloop()
Ответы (2 шт):
Я не совсем понял проблему, но вроде сделал:
idx = 1
output = 'Процесс PID:1 перешел в состояние ВЫПОЛНЕНИЕ: ' \
'Класс приоритета: {0}, значение - '
if idx == 1:
output = output.format('Real time class')
print(output)
Краткое пояснение: Мы бросаем текст в переменную, на место знаков вопроса ставим {0} - это ключ, по которому будет проходиться output.format и заменять на то, что передано в функцию. Объяснил как смог, если что-то осталось непонятным, спрашивайте!
Задача не совсем понятна, но можете взять что-то из такого кода:
class_info = {
24: 'Real time class',
13: 'High class',
10: 'Above normal class',
8: 'Normal class',
6: 'Below normal class',
4: 'Idle class'
}
idx = 10
x = 42
class_str = class_info.get(idx, 'неопределен')
print(f'Класс приоритета: {class_str}, значение - {x} \n \n')
Т.е. можно обойтись без множества if просто словарём, и инфу по классу точно так же через f-string подставлять из переменной в строку.