нежелательное назначение двойной кавычки в строке - PullRequest
0 голосов
/ 25 апреля 2020

Итак, у меня есть такой список:

['a', 'b', 'c', 'd', 'e' ]

Я преобразовал этот список в строку:

"'a', 'b', 'c', 'd', 'e'"

Двойная кавычка вокруг строки существует только для переноса вокруг одиночная кавычка - мне нужны одиночные кавычки. Проблема заключается в том, что я ввожу эту строку в пакет, который принимает только это:

'a', 'b', 'c', 'd', 'e'

Конечно, есть ошибка. Теперь я попробовал .replace ('"', '') , срез строки , и все другие упомянутые здесь . Ничто не работает, так как двойная кавычка не является частью строки, но существует только для ее печати и переносится в переменную во время присваивания.

РЕДАКТИРОВАТЬ:

Вот часть того, как я преобразовал список в строку:

string=''
----
----
string=string + (" '%s '," %(items) )

ПРАВКА, чтобы добавить дополнительную информацию из-за следующего комментария:

Я играю с этим инструментом . В следующем примере все, что я говорю, это то, что я автоматически генерирую некоторую переменную, чтобы поместить в третью строку, но что бы я ни делал, она неизменно помещает дополнительную запятую вокруг строки:

from dd import autoref as _bdd
bdd = _bdd.BDD()
bdd.declare('x', 'y', 'z')----------------------<this line>
u = bdd.add_expr('(x /\ y) \/ ~ z')
bdd.collect_garbage()  # optional
bdd.dump('awesome.pdf')

Я получаю ошибку:

AssertionError: undefined variable "a", known variables are:
 {"'x', 'y', 'z'": 0}

Вы будете может генерировать эту ошибку, если вы просто замените третью строку следующим:

bdd.declare("'x', 'y', 'z'")

1 Ответ

3 голосов
/ 26 апреля 2020

TL / DR: необходимо предоставить имена из одной строки - решение еще ниже.


Интересная вещь о минимальном воспроизводимом примере заключается в том, что я легко вижу, что вы пытаетесь сделать:

Метод bdd.add_expr(...) хочет имен переменных в виде отдельных строк - вы пытаетесь предоставить строку с объединенными именами, которая не будет работать, независимо от того, как вы добавляете или чередуете Строковые разделители.

Ссылка на исходный код модуля также очень полезна. В bdd .py нет метода declare() - поэтому я посмотрел на его конструктор class BDD (_ ab c. BDD): и отыскал метод в его базовом классе здесь: _ab c .py - реализация delcare , которая дает вам:

def declare(self, *variables):
    """Add names in `variables` to `self.vars`.
    ```python
    bdd.declare('x', 'y', 'z')
    ```
    """
    for var in variables:
        self.add_var(var)

, вы можете прочитать больше об этом типе параметра передавая fe здесь:


Решение - предоставить вместо имен:

from dd import autoref as _bdd

your_list = ['x', 'y', 'z']

bdd = _bdd.BDD()
bdd.declare(*your_list )   # provide your list elements as single strings to this function
u = bdd.add_expr('(x /\ y) \/ ~ z')
bdd.collect_garbage()  # optional
bdd.dump('awesome.pdf')]

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

from_string = "'x', 'y', 'z'" 

# this undoes all the stringifying of your list
as_list = from_string.translate(str.maketrans("", "", "',")).split()

bdd = _bdd.BDD()
bdd.declare(*as_list)   # provide your list elements as single strings to this function
u = bdd.add_expr('(x /\ y) \/ ~ z')
bdd.collect_garbage()  # optional
bdd.dump('awesome.pdf')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...