RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-443460

Effex's questions

Martin Hope
Effex
Asked: 2023-09-28 01:08:47 +0000 UTC

CodeWars 挑战:一个简单的汇编解释器

  • 5

我不明白我在哪里犯了错误。这是问题的情况(我通过翻译器运行了所有内容,因此可能存在一些小错误):

Мы хотим создать простой интерпретатор ассемблера, который будет поддерживать следующие инструкции:

 - mov x y - копирует y(либо постоянное значение, либо содержимое регистра) в регистр x
 - inc x - увеличивает содержимое реестра x на единицу
 - dec x - уменьшает содержимое регистра x на единицу
 - jnz x y - переходит к инструкции y на шаг вперед (положительное значение означает вперед, отрицательное означает назад, y может быть регистром или константой), но только если x(константа или регистр) не равна нулю

Имена регистров указываются в алфавитном порядке (только буквы). Константы всегда являются
целыми числами (положительными или отрицательными).

Примечание: jnz инструкция перемещается относительно самой себя. Например, смещение -1 будет
продолжаться с предыдущей инструкции, а смещение 2 будет пропускать следующую инструкцию.

Функция примет входной список с последовательностью инструкций программы и выполнит их.
Программа завершается, когда больше нет инструкций для выполнения, и возвращает словарь
(таблицу в COBOL) с содержимым регистров.

Кроме того, каждому inc// в регистре всегда будет предшествовать a в регистре, поэтому вам
не нужно беспокоиться о неинициализированных регистрах dec jnz mov.

例子:

["mov a 5"; "inc a"; "dec a"; "dec a"; "jnz a -1"; "inc a"]

visualized:

mov a 5
inc a
dec a
dec a
jnz a -1
inc a

上面的代码换句话说:

установите a для регистрации значение 5,
увеличить его стоимость на 1,
уменьшить его значение на 2,
затем уменьшайте его значение, пока оно не станет равным нулю ( jnz a -1 переход к предыдущей инструкции, если a оно не равно нулю)
а затем увеличить его значение на 1, оставив регистр a равным 1

该函数应该返回:

{'a': 1}

我的决定:

class Interpreter:
    counter = 0
    program = None

    def __init__(self):
        self.regs = {}

    def mov(self, val_1: str, val_2: str):
        if val_2.isalpha():
            val_2 = self.regs[val_2]
        self.regs[val_1] = int(val_2)

    def inc(self, reg: str):
        self.regs[reg] += 1

    def dec(self, reg: str):
        self.regs[reg] -= 1


def simple_assembler(program):
    len_ = len(program)
    ex = Interpreter()
    Interpreter.program = program
    while Interpreter.counter < len_:
        spl = Interpreter.program[Interpreter.counter].split()
        try:
            controller(spl[0], spl[1], spl[2], ex=ex)
        except IndexError:
            controller(spl[0], spl[1], ex=ex)
    Interpreter.counter = 0
    Interpreter.program = None
    return ex.regs


def controller(instruction, val_1, val_2=None, ex=None):
    if not val_2:
        match instruction:
            case 'inc':
                ex.inc(val_1)
            case 'dec':
                ex.dec(val_1)
    else:
        match instruction:
            case 'mov':
                ex.mov(val_1, val_2)
            case 'jnz':
                if val_1.isalpha():
                    val = val_1
                    if ex.regs[val] <= 0:
                        Interpreter.counter += 1
                        return
                else:
                    val = int(val_1)
                    if val <= 0:
                        Interpreter.counter += 1
                        return

                if val_2.isalpha():
                    step = ex.regs[val_2]
                else:
                    step = int(val_2)

                next_instruction = Interpreter.program[Interpreter.counter + step].split()[0]
                controller(instruction=next_instruction, val_1=val, ex=ex)
                Interpreter.counter = Interpreter.counter + step
                return
    Interpreter.counter += 1


# первая тестовая строка, тут все ок, при ее передаче в simple_assembler() ответ должен быть: {'a': 1}
s1 = '''\
mov a 5
inc a
dec a
dec a
jnz a -1
inc a'''

# вторая и последняя тестовая строка из базовых тестов, у меня получается ответ: 
# {'c': 12863, 'b': 12863, 'a': 12863}, а правильный: {'a': 409600, 'c': 409600, 'b': 409600}
s2 = '''\
mov c 12
mov b 0
mov a 200
dec a
inc b
jnz a -2
dec c
mov a b
jnz c -5
jnz 0 1
mov c a'''
# print(simple_assembler(s1.splitlines()))
print(simple_assembler(s2.splitlines()))

我想了解我做错了什么:我是否误解了某些指令的逻辑?例如,jnz x y据我了解,它必须根据符号将执行“指针”抛出y步骤,并选择位于结果位置的指令x(如果数量有限)x != 0或它的内容(如果x它是有限的)。是一个寄存器。此后,指令是否也按顺序进行,还是控制直接返回jnz?

python
  • 2 个回答
  • 96 Views
Martin Hope
Effex
Asked: 2023-09-13 12:17:33 +0000 UTC

如何通过 subprocess.Popen() 在 Python 脚本中使用正在运行的 bash 脚本中的变量值?

  • 6

我试图通过 启动脚本中的一个进程python,subprocess.Popen([path])并在启动该进程后立即检索它PID以便获取ID该进程的后续窗口。当我直接执行此操作时,即不path直接使用我要运行的程序的路径,而是使用Popen(). 但如果这个程序通过bash脚本运行,我只能用它"$$"来获取PID当前进程。问题是,是否有可能以某种方式在 python 脚本中获取该变量的值并在内部使用它?

这是我的代码片段python:

pid = subprocess.Popen([path])
path_to_sh = Path(__file__).absolute().parent
time.sleep(0.2)
id_ = os.popen(f'{path_to_sh}/getWinID.sh {pid.pid}')
# получение первого ID окна
window_id = id_.readlines()[0][:-1]

这是一个run.sh简单运行程序的脚本,其路径位于path脚本变量python中,我尝试在其中通过 echo 显示当前的 PID。一切顺利,但不幸的是它超出了脚本python:

#!/bin/bash
<абсолютный путь к программе> &
echo "$$"

getWinID.sh以下是用于获取窗口 ID 的bash 脚本:

#!/bin/bash
while IFS= read line; do
  if [[ "${line}" =~ (0x)([0-9a-z]+)([ ][- ][0-9]+[ ])([0-9]*) ]]; then
    winId="${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
    pid="${BASH_REMATCH[4]}"
    if [[ "${pid}" -eq "${1}" ]]; then
      WIND_IDS+=("${winId}")
    fi
  fi
done < <(wmctrl -lp)

if [ "${#WIND_IDS[@]}" -gt 0 ]; then
  echo "${WIND_IDS[@]}"
fi

执行顺序:

script.py运行 ->run.sh运行程序并将其返回PID到 ->script.py传输PID->将窗口getWinID.sh返回ID到 -> script.py。

如果变量path包含 sh 脚本的路径,则该变量pid将包含:<Popen: returncode: None args: ...

我正在考虑将输出重定向echo到文件,然后将其读入python. 但在我看来,有一种更短、更优化的方法来解决这个问题。

PS:要执行脚本,您需要安装该实用程序wmctrl

python
  • 1 个回答
  • 25 Views
Martin Hope
Effex
Asked: 2023-08-30 16:38:42 +0000 UTC

如何撤消 PyQt6 中子窗口的 setWindowFlag(Qt.WindowType.WindowStaysOnTopHint) 方法?

  • 6

任务是使主程序窗口始终位于其他窗口之上。
标题中指出的方法非常有效。但问题是,现在所有子窗口也显示在其他窗口之上,这变得非常不方便。
例如,有一个按钮可以打开一个窗口,其中有一行QLineEdit将在资源管理器中选择的路径复制到其中。当您打开资源管理器时,这个小窗口仍保留在其顶部。我使用 制作了这个窗口QDialog。

我试图用与其他人相同的方法来解决问题WindowType,只将其应用于自己dialog,但没有帮助。这是主窗口的代码片段:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.central = QWidget()
        self.central.setObjectName('centralWidget')
        self.setCentralWidget(self.central)
        self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)

    def show_path_select_dialog(self, id_, name) -> None:
        """
        Метод создающий диалоговое окно для выбора пути к модулю.
        :param id_: Идентификатор модуля
        :param name: Название модуля
        :return: None
        """
        def check_data(id_m=id_, name_m=name, path=None):
            # валидация данных после нажатия на кнопку "Подтвердить"
            if path and path != '':
                add_path_to_local_storage(id_m, name_m, path)
            else:
                select_dialog.info_label.setVisible(True)
            select_dialog.close()

        select_dialog = QDialog(self)

        select_dialog.setWindowTitle('Укажите расположение модуля')
        select_dialog.setFixedSize(360, 130)
        v_layout = QVBoxLayout(select_dialog)

        path_label = QLabel('Путь')
        v_layout.addWidget(path_label)

        path_line = QLineEdit()
        path_line.setObjectName('modulesLine')
        path_line.setReadOnly(True)
        v_layout.addWidget(path_line)

        select_dialog.info_label = QLabel('Путь не указан!')
        select_dialog.info_label.setVisible(False)
        select_dialog.info_label.setObjectName('infoLabel')
        v_layout.addWidget(select_dialog.info_label)
        v_layout.addStretch(1)

        h_box = QHBoxLayout()
        v_layout.addLayout(h_box)

        button_accept = QPushButton('Подтвердить')
        button_accept.clicked.connect(lambda: check_data(id_m=id_, name_m=name, path=path_line.text()))
        h_box.addWidget(button_accept)

        button_set_path = QPushButton('Указать путь')
        h_box.addWidget(button_set_path)
        button_set_path.clicked.connect(lambda: self.set_path(path_line, name))

        button_cancel = QPushButton('Отмена')
        button_cancel.clicked.connect(select_dialog.close)
        h_box.addWidget(button_cancel)

        select_dialog.exec()
   
    def set_path(self, line_edit, name: str) -> None:
        """
        Метод, устанавливающий путь к модулю, выбранный пользователем в проводнике.
        :param name: Имя модуля.
        :param line_edit: Строка, в которую будет записываться выбранный путь.
        :return: None
        """
        dir_ = str(Path.home())
        input_ = QFileDialog.getOpenFileName(self, f'Укажите путь к модулю "{name}"', dir_)
        line_edit.setText(input_[0])
        line_edit.setToolTip(input_[0])

添加:

  1. 这就是我现在所拥有的: 在此输入图像描述

路径选择线所在的窗口与资源管理器重叠。在这种情况下,我需要资源管理器在所有窗口顶部打开,包括在主窗口顶部

  1. 我的目标: 在此输入图像描述
python
  • 1 个回答
  • 18 Views
Martin Hope
Effex
Asked: 2023-06-08 14:34:00 +0000 UTC

如何控制元素在 QToolBar 中的位置?

  • 6

toolbar我在应用程序窗口的左侧创建了一个侧边栏。
添加了各种actions. 我想在最后(底部)添加一张图片.svg。

我渲染了图像,将其添加到toolbar,正如预期的那样,它是在最后一个之后添加的action。
之后我试图将图像移动到底部,但都是徒劳的。该图像没有响应setGeometry()并且没有setAlignment().
我唯一能做的就是去做resize(),幸运的是它有效。

这就是我实现图像本身的方式:

class SvgWidget(QSvgWidget):
    def __init__(self):
        super().__init__()
        self.text = open('logo.svg', 'r')
        self.svg_render = QSvgRenderer(QXmlStreamReader(self.text.read()))
        self.resize(50, 50)

    def paintEvent(self, event) -> None:
        qp = QPainter(self)
        self.svg_render.render(qp)

我在 MainWindow 类中创建了此类的一个实例:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("2D Map")
        self.resize(800, 600)
        self.widget = QWidget()
        self.setCentralWidget(self.widget)
        self.box = QVBoxLayout(self.widget)
        self.box.setContentsMargins(30, 30, 30, 30)
        self.testAction = QAction(QIcon('imgs/exit.png'), 'Exit', self)
        self.testAction.triggered.connect(app.quit)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.setObjectName('toolbar')
        self.addToolBar(Qt.ToolBarArea.LeftToolBarArea, self.toolbar)
        self.toolbar.setMovable(False)
        self.toolbar.addAction(self.testAction)
        # вот здесь:
        self.svg = SvgWidget()
        self.toolbar.addWidget(self.svg)
        self.svg.setFixedSize(70, 60)

有什么办法可以将它推到工具栏窗口的底部吗?

python
  • 1 个回答
  • 19 Views
Martin Hope
Effex
Asked: 2023-05-31 19:51:00 +0000 UTC

PyQt 中 QProgressBar 的动态样式

  • 6

我需要根据程序中发生的操作更改样式。HTML页面上JS的模拟,您可以在CSS中添加、删除类,仅在PyQt中。

我试着做这样的事情:

if strength < 33:
    self.reliability.setObjectName('rel-0')
elif strength < 66:
    self.reliability.setObjectName('rel-1')
else:
    self.reliability.setObjectName('rel-2')

之前在样式文件中编写了这些选择器:

#rel-0, #rel-1, #rel-2 {
    border: 2px solid #453e3e;
    border-radius: 5px;
    text-align: center;
    background-color: #453e3e;
    color: rgba(69, 62, 62, 0);
}

#rel-0::chunk {
    background-color: #ed0909;
}

#rel-1::chunk {
    background-color: #e3c010;
}

#rel-2::chunk {
    background-color: #44d111;
}

但是,显然,在更改时,ObjectName元素不会更新这些标识符中固有的样式。

我也试过做repaint()and update()。但显然他们也没有“看到”风格的变化。

PS:你真的必须每次都这样做吗setStylesheet()?

python
  • 1 个回答
  • 25 Views
Martin Hope
Effex
Asked: 2023-03-09 16:17:06 +0000 UTC

如何使类似于单选按钮的窗口菜单项的动作可检查行为?

  • 5

也许问题的措辞不是很明显(事实上,这就是为什么我不能谷歌它),但我会尽量用我自己的话来表达。我有这段代码:

def create_menu_bar(self):
    menu_bar = self.menuBar()
    file_menu = QMenu("&File", self)
    settings_menu = QMenu("&Settings", self)
    # подменю настроек
    profiles_menu = QMenu("&Profiles", self)
    profiles_menu.setIcon(QIcon('img/profiles.png'))

    # основные пункты меню
    menu_bar.addMenu(file_menu)
    menu_bar.addMenu(settings_menu)

    # подпункты в file_menu
    export_configs = self.create_export_configs_action()
    exit_action = self.create_exit_action()
    file_menu.addAction(export_configs)
    file_menu.addAction(exit_action)

    # TODO: тестовые профили
    action_profile_1 = QAction('Profile 1', self)
    action_profile_2 = QAction('Profile 2', self)
    settings_menu.addAction(profiles_menu.menuAction())
    profiles_menu.addAction(action_profile_1)
    profiles_menu.addAction(action_profile_2)
    action_profile_1.setCheckable(True)
    action_profile_2.setCheckable(True)

我想选择具有特定程序设置(换句话说,预设)的配置文件。将它们粘贴在窗口的主菜单中会非常方便,即带有项目文件、编辑等的顶部面板。在“设置”项中,我有一个子项Profiles,按照我的想法,当它打开时,我通过实现的配置文件列表QAction。我发现了一个有趣的方法:"setCheckable",它允许我选择它们并且它们旁边会出现一个复选标记。唯一的问题是它像 一样工作checkbox,您可以一次选择多个项目,但我希望它像 一样工作radiobutton。那些。以便只能选择其中一项。可以这样实现吗?

PS:当然,你可以用句柄写这样的逻辑,但我假设这将是自行车的发明

python
  • 1 个回答
  • 19 Views
Martin Hope
Effex
Asked: 2022-06-17 17:27:09 +0000 UTC

如何在控制台中正确显示进度?

  • 1

我的程序中有各种不断变化的数值,我需要将它们打印到控制台(без использования GUI)。最简单的方法是在每次迭代时输出每一行,但这样会弄乱控制台并且不方便阅读。我试图通过清除控制台cls||clear- 也不是最好的选择,因为一切都显示得非常快,而且我不想设置延迟。我想出的最后一件事是使用progressbar,这里也有问题(1progressbar工作正常,如果我尝试制作其中几个,那么它们会相互重叠,据我所知,这是由于回车, 也许不吧)。我有没有限制的值(即没有边界,它们可以无限增加或减少),我认为这适合这个Counter. 但也有一些值是有边界的,例如 0/100 - 我已经决定使用通常的progressbar. 理想情况下,我希望所有这些行交替位于控制台中并并行工作。这是我试图做的(远非事实):

import time
from progress.counter import Counter
from progress.bar import Bar

my_list = []
for x in range(1, 101):
    my_list.append(x)
val = 0

counter_ = Counter('Counter: ')

for item in range(0, 100, 5):
    counter_.next(item-val)
    val = item
    time.sleep(0.5)

counter_.finish()

bar = Bar('Gens', max=len(my_list))

for item in my_list:
    bar.next()
    time.sleep(0.2)

bar.finish()

PS我什至尝试在单独的线程中执行此操作,但后来我意识到这不是最聪明的举动)

python
  • 2 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-05-08 12:40:16 +0000 UTC

为什么无法解码字符串?

  • 0

我已经伤透了脑筋,但我就是不明白解码问题是什么。问题的条件(我会写在原文中,因为我突然翻译错了,因此丢失了一些细节):

假设我们知道将字符串s编码为字符串的过程r(见下文解释)。kata 的目的是解码此字符串r以取回原始字符串s。

编码过程说明:

  • 输入:s由小写字母 from "a"to"z"和一个正整数组成的字符串num

  • abcde...uvwxyz我们知道和之间存在对应关系0, 1, 2 ..., 23, 24, 25:0 <-> a, 1 <-> b ...

  • 如果c是s对应数字的 字符x, 应用 到x函数f: x-> f(x) = num * x % 26, 然后 找到ch对应 字符 .f(x)

  • 将所有这些累积ch在一个字符串中r

  • 连接num并r返回结果

例如:

encode("mer", 6015)  -->  "6015ekx"

m --> 12,   12 * 6015 % 26 = 4,    4  --> e
e --> 4,     4 * 6015 % 26 = 10,   10 --> k
r --> 17,   17 * 6015 % 26 = 23,   23 --> x

So we get "ekx", hence the output is "6015ekx"

任务

通过上述过程将字符串s编码为字符串。尽可能r完成返回功能。s

实际上,当未正确选择正整数 num 时,可能无法对由从“a”到“z”的任何字母组成的字符串进行解码。在那种情况下返回"Impossible to decode"。

例子

decode "6015ekx" -> "mer"
decode "5057aan" -> "Impossible to decode"

我掌握了解码功能,但我还不能提供不正确的数据会提供给输入的事实,因为原则上我无法理解它们是什么неверные данные以及为什么它们被认为是这样的。

解码功能:

def decode(r):
    num = int(''.join(map(str, [x for x in r if x.isdigit()])))  # отделяем число от кодированных символов
    res = ''
    for x in r[len(str(num)):]:  # цикл по строке без цифр
        res += chr({x * num % 26: x for x in range(26)}[ord(x)-97]+97)  # добавляю декодированный символ в результат
    return res

PS:所有数据正确的测试都成功通过。

python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-05-07 18:52:50 +0000 UTC

如何逆运算“除法余数”?

  • 0

有一个表情x * 6015 % 26 = 4。我需要反转操作来计算数字x。到目前为止,我只实现了编码操作,但对解码没有任何想法。

UPD:可能的数值范围x:从 0 到 25

python
  • 2 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-04-30 14:37:49 +0000 UTC

如何解决非整数问题?

  • 2

问题的本质是找出是否有可能从作为输入的数字中得到一对数字:一个整数的整数幂。例如,如果给出数字 81,那么该对将是 [9, 2],因为 9 squared = 81. 还需要显示这个pair,如果pair > 1,则只允许显示其中一个,如果没有pair,则返回None。我写了以下代码:

from math import log


def degree(val):
    for x in range(2, 1000000):
        lg = log(val, x)
        if int(lg) == lg and lg >= 2:
            return [x, int(log(val, x))]

    return None


print(degree(59049))

问题是,在某些情况下,我得到的是这样的东西而不是整数:3.0000000000000004、4.999999999999999 等等。

舍入这些数字很可能不是正确的决定,因为计算算法与比较舍入和未舍入的数字有关。提前感谢您的帮助。

PS:问题以数字125开头,即 (5 到 3 次幂)

python
  • 4 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-04-16 16:32:24 +0000 UTC

如何获得单位向量?

  • -1

平面上有一个向量 AB,我们知道它的坐标。我们需要计算单位向量。假设这些是坐标 A (1, 1), B (5, 6)。

python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-04-15 20:11:54 +0000 UTC

如何沿给定向量移动一个点?

  • 0

我正在尝试实现在 2D 空间中移动对象的功能。有一个向量 AB,它的点 B 与物体的位置有关。我们知道向量的方向及其坐标。如何沿矢量方向移动对象?

示例:给定一个向量 (0, 0), (1, 0.5),您需要向前移动 0.1 个单位。有一个公式来计算它会很好。

例子

python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-03-30 21:59:09 +0000 UTC

如何正确实现解决方案的逻辑?

  • 0

一个任务:

数独难度有几个级别,我们可以根据游戏的 81 个单元格中给出的单元格数来估计数独的难度。

简单数独通常有超过 32 个任务。

中等数独有大约 30-32 个答案。

一个复杂的数独有大约 28-30 个答案。

非常难的数独只有不到 28 个谜题

注意:创建唯一(无多个解决方案)数独游戏所需的最小数据量为 17。

一个困难的数独游戏意味着一开始在任何单元格中都不会有候选者,这需要猜测和反复试验。对于任何空单元格,一个非常严格的单元格将具有多层多个候选者。

挑战:编写一个函数来解决任何复杂的数独难题。该函数采用数独网格,并应返回一个 9x9 数组,其中包含正确的谜题答案。

或者它应该在以下情况下抛出错误:无效网格(不是9x9,值不在1~9范围内的单元格);同一个谜题的多个解决方案,或者该谜题无法解决。

总的来说,我草拟了代码,正如我所想,在我计算每个单元格的候选者的那一刻,问题就开始了。我没有想到如何对可用选项的各种替换选项进行排序。

编码:

solution = [[3, 4, 6, 1, 2, 7, 9, 5, 8],
            [7, 8, 5, 6, 9, 4, 1, 3, 2],
            [2, 1, 9, 3, 8, 5, 4, 6, 7],
            [4, 6, 2, 5, 3, 1, 8, 7, 9],
            [9, 3, 1, 2, 7, 8, 6, 4, 5],
            [8, 5, 7, 9, 4, 6, 2, 1, 3],
            [5, 9, 8, 4, 1, 3, 7, 2, 6],
            [6, 2, 4, 7, 5, 9, 3, 8, 1],
            [1, 7, 3, 8, 6, 2, 5, 9, 4]]

puzzle = [[0, 0, 6, 1, 0, 0, 0, 0, 8],
          [0, 8, 0, 0, 9, 0, 0, 3, 0],
          [2, 0, 0, 0, 0, 5, 4, 0, 0],
          [4, 0, 0, 0, 0, 1, 8, 0, 0],
          [0, 3, 0, 0, 7, 0, 0, 4, 0],
          [0, 0, 7, 9, 0, 0, 0, 0, 3],
          [0, 0, 8, 4, 0, 0, 0, 0, 6],
          [0, 2, 0, 0, 5, 0, 0, 8, 0],
          [1, 0, 0, 0, 0, 2, 5, 0, 0]]


def solver():
    transposed = [list(i) for i in zip(*puzzle)]
    candidates = dict()
    keys = [(0, 3), (3, 6), (6, 9)]
    row_point = None
    col_point = None

    for x in range(len(puzzle)):
        for y in range(len(puzzle[0])):
            candidates['canFor{}_{}'.format(x, y)] = list()

    for x in range(len(puzzle)):
        if x < 3:
            row_point = keys[0]
        elif x < 6:
            row_point = keys[1]
        elif x < 9:
            row_point = keys[2]
        for y in range(len(puzzle[0])):
            if y < 3:
                col_point = keys[0]
            elif y < 6:
                col_point = keys[1]
            elif y < 9:
                col_point = keys[2]
            if puzzle[x][y] == 0:
                for z in range(1, 10):
                    if z not in puzzle[x] and z not in transposed[y] \
                            and z not in [puzzle[row][col] for col in range(*col_point) for row in range(*row_point)]:
                        candidates['canFor{}_{}'.format(x, y)].append(z)
    print(candidates)


solver()
python
  • 3 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-09-27 16:26:49 +0000 UTC

如何说服 PyCharm 不要对我的方法发誓?

  • 1

我的程序中有一个方法:

    def import_config(self, flag=None):
        """Функция 'посредник', между GUI и 'config_generate', работает в двух режимах, в зависимости от передаваемого
        флага. В режиме импорта забирает словарь, сгенерированный 'config_generate' и заполняет 'lineEdit's напротив
        'label's. А в режиме экспорта считывает с 'lineEdit's данные, формирует из них словарь и отдает его в
        'config_generate'."""

        dict_imp = config_generate()

        list_of_lines = sorted([x for x in dir(ui) if "lineEdit" in x], key=lambda x: int(x.split("_")[-1]))
        list_of_labels = sorted([x for x in dir(ui) if "label" in x], key=lambda x: int(x.split("_")[-1]))
        list_of_labels.remove('label_2')

        lst_eval_labels = list(eval("(self." + ", self.".join(list_of_labels) + ")"))
        lst_eval_lines = list(eval("(self." + ", self.".join(list_of_lines) + ")"))

        if flag != 'export':
            for x in range(0, 49):
                lst_eval_lines[x].setText(dict_imp[lst_eval_labels[x].text().rstrip()])
        else:
            values = []
            text_of_labels = []
            for x in range(len(lst_eval_labels)):
                text_of_labels.append(lst_eval_labels[x].text().rstrip())
            for x in lst_eval_lines:
                values.append(x.text())
            config_generate(dict(zip(text_of_labels, values)))

他不喜欢它是一个方法而不是一个函数:"Method 'import_config' may be 'static'". 或者他建议将其设为静态。如果您熟悉该方法eval(),那么您将立即了解障碍是什么。我不能选择第一个选项,不能选择第二个。也许你知道如何解决这个问题?

python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-08-31 16:04:38 +0000 UTC

PyQt 中 root.after() 的类似物

  • 1

PyQtroot.after()库中是否有该函数的类似物?

如果有,那是什么?

如果没有,你怎么能循环调用一个特定的函数?

python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-08-24 18:38:19 +0000 UTC

如何正确指定 PyQT 图像的路径

  • 0

决定从Tkinter切换到PyQT,勾勒出界面,但在框架和背景方面遇到了问题label。例如,我的代码中有一行:

self.label.setStyleSheet("border-image: url(:/image/fone_and_border_v2.png);")

通过在项目中创建一个文件夹(我相信路径从目录的根开始)image并在其中放置一个文件,该文件的名称与代码中指定的名称相同。

启动时不显示图像。我想它应该以不同的方式指定。
预先感谢您的帮助。

python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-07-27 00:47:10 +0000 UTC

我究竟做错了什么?(Codewars 6 kyu 的问题)

  • 1

问题条件:

编写一个函数,persistence,它接受一个正参数 num 并返回它的乘法持久性,这是您必须将 num 中的数字相乘直到达到单个数字的次数。

例如:

persistence(39) # returns 3, because 3*9=27, 2*7=14, 1*4=4
                # and 4 has only one digit
                  
persistence(999) # returns 4, because 9*9*9=729, 7*2*9=126,
                 # 1*2*6=12, and finally 1*2=2

persistence(4) # returns 0, because 4 is already a one-digit number

我对这个问题的解决方案(在我的 IDE 中,所有条件都满足):

class Counter(object):
    counter = 0


def persistence(n):
    s = str(n)
    if len(s) > 1:
        Counter.counter += 1
        num = int(s[0])
        for x in range(1, len(s)):
            num *= int(s[x])
        return persistence(num)
    else:
        return Counter.counter

测试

test.it("Basic tests")
test.assert_equals(persistence(39), 3)
test.assert_equals(persistence(4), 0)
test.assert_equals(persistence(25), 2)
test.assert_equals(persistence(999), 4)
python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-07-12 14:02:12 +0000 UTC

如何处理从站点解析到程序的数据?

  • 2

例如,您需要从网站获取汇率:

http://www.cbr.ru/currency_base/daily/

为此,我使用 Pandas 库,即方法:

df = pd.read_html(io="http://www.cbr.ru/currency_base/daily/", decimal=',', thousands='.')

结果,我得到了一个由一个元素组成的 DataFrame,我无法访问它的各个行和列。如果您执行print(df[0]),那么整个表格将显示在控制台中。

我究竟做错了什么?

python
  • 2 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-07-01 19:08:43 +0000 UTC

在 tkinter 窗口中显示当前时间的正确方法是什么?

  • 0

任务是在窗口中创建一个标签,以 hh:mm:ss 格式动态更新当前时间。我可以显示时间,但它没有更新,而只显示与脚本启动一致的时间。以下是我们目前所拥有的:

root = tkinter.Tk()
root.geometry('400x150+{}+{}'.format(500, 400))
a = Label(root, text=f"{datetime.now():%H:%M:%S}", font=("helvetica", 15))
a.pack()
root.mainloop()
python
  • 1 个回答
  • 10 Views
Martin Hope
Effex
Asked: 2022-06-30 18:36:49 +0000 UTC

关闭一个窗口,然后在循环中重新打开它

  • 0

我想使用tkinter编写一个用作提醒的程序,创建一个具有特定小时和分钟的字典,到达时出现一个对话框,其中有一个按钮,单击窗口关闭后,它应该出现再次匹配字典中的时间,但面临按下按钮时窗口挂起的问题。编码:

from datetime import datetime
from tkinter import *
from tkinter import messagebox as mb
import time

def quit():
    root.quit()

root = Tk()
root.title("Notification")
Label(text="Alarm", width=30, height=3).pack()
a = Label(text='', width=20, height=3)
a.pack()
Button(text="Ok", width=10, command=quit).pack()

tim = {
    "1": [9, 10],
    "2": [10, 10],
    "3": [11, 10],
    "4": [14, 10],
    "5": [15, 10],
    "6": [16, 20],
    "test": [15, 2],
    "test2": [15, 3]
}

if root.winfo_screenwidth() > 1920:
    w = root.winfo_screenwidth()//4-200
else:
    w = root.winfo_screenwidth()//2-150
h = root.winfo_screenheight()//2-100

root.geometry('400x150+{}+{}'.format(w, h))


while True:
    current_d = datetime.now()
    if current_d.hour == tim["test"][0] and current_d.minute == tim["test"][1] and current_d.second == 0:
        a.config(text="Point №1")
        root.mainloop()

    if current_d.hour == tim["test2"][0] and current_d.minute == tim["test2"][1] and current_d.second == 0:
        a.config(text="Point №2")
        root.mainloop()

ps 我在没有循环的情况下测试了工作,一切正常,窗口关闭,没有错误或冻结

python
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5