Python - бинарный текстовый заменитель - PullRequest
0 голосов
/ 31 января 2020

Итак, я работаю над чем-то, и мне нужно заменить подстроки пробелами и получить каждую комбинацию этой подстроки с пробелами. Я хочу сделать это, используя двоичный файл для сравнения. Например,

0 0 0 = A B C
0 0 1 = A B _
0 1 0 = A _ C
0 1 1 = A _ _
1 0 0 = _ B C
1 0 1 = _ B _
1 1 1 = _ _ _  (put in code formatting to keep shape)

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

string ="abcde"

binary5=["0"]
final=[]

for count in range(0,32):
    counter=0

    count =bin(count)
    count=str(count)
    count = count.lstrip('-0b')
    for i in range(len(count)):
        if count[i] == "1":
            counter=counter+1
    if counter<6:
        binary5.append(count)

    print(binary5)

for i in range(0,32):
    bintest = str(binary5[i])
    bintest.split()
    string2=string
    for x in range(0,len(string)):
        try:
            if bintest[x] == "1":
                string2.split()
                string2.pop[x]
                string2.insert(x-1," ")
                string2.join()
                print(string2)
                final.append(string2)
        except:
            pass

print(final)

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Понятия не имею, что делает ваш код. Это слишком сложно. Вот прямая замена.

import string
from itertools import product

def translate_tuple(tup):
    ''' Takes a tuple of any length containing 0s or 1s.
        Returns a new tuple with the correct letters. '''
    return tuple(l if tup[i] == 0 else '_' for i, l in enumerate(string.ascii_letters[:len(tup)]))

def get_pairs(length):
    ''' Get all pairs of binary and translated text. '''
    for binary_tup in product((0, 1,), repeat=length):
        yield ' '.join(map(str, binary_tup)), ' '.join(translate_tuple(binary_tup))

for b, t in get_pairs(3):
    print(f'{b} = {t}')

Который печатает:

0 0 0 = a b c
0 0 1 = a b _
0 1 0 = a _ c
0 1 1 = a _ _
1 0 0 = _ b c
1 0 1 = _ b _
1 1 0 = _ _ c
1 1 1 = _ _ _

Вы можете использовать двоичные числа произвольного размера, задав различную длину для get_pairs()

In [36]: for i in range(10):
    ...:     b, t = next(g)
    ...:     print(f'{b} = {t}')
    ...:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 = a b c d e f g h i j k l m n o p q r s t
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 = a b c d e f g h i j k l m n o p q r s _
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 = a b c d e f g h i j k l m n o p q r _ t
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 = a b c d e f g h i j k l m n o p q r _ _
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 = a b c d e f g h i j k l m n o p q _ s t
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 = a b c d e f g h i j k l m n o p q _ s _
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 = a b c d e f g h i j k l m n o p q _ _ t
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 = a b c d e f g h i j k l m n o p q _ _ _
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 = a b c d e f g h i j k l m n o p _ r s t
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 = a b c d e f g h i j k l m n o p _ r s _

Пояснение

Самый важный бит - translate_tuple(), но вы можете использовать itertools.product, чтобы получить все входные кортежи.

translate_tuple(tup) ожидает двоичный кортеж любой длины, например:

(0, 0, 0)
(0, 1, 0)
(1, 1, 1, 1)
(0, 1, 0, 1, 0)

и возвращает новый кортеж в формате, который вы описали:

(0, 0, 0)          => ('a', 'b', 'c')
(0, 1, 0)          => ('a', '_', 'c')
(1, 1, 1, 1)       => ('_', '_', '_', '_')
(0, 1, 0, 1, 0)    => ('a', '_', 'c', '_', 'e')

Следующий Функция get_pairs() просто генерирует все двоичные кортежи заданной длины, а затем возвращает строку двоичного кортежа и строку результата, объединенную пробелами.

Затем вы можете распечатать строки. Вероятно, было бы лучше получить исходные кортежи и создать строки непосредственно перед печатью, но я хотел оставить это в основном в этой функции.

0 голосов
/ 31 января 2020

У вас есть методологическая проблема: вы конкретно выбрасываете свою диагностику c информации. Поэтому, когда у вас есть проблема, вы не понимаете, что сделали неправильно: вы проигнорировали сообщение об ошибке.

Блок try-except не имеет отношения к вашему алгоритму. Избавьтесь от этого и начните отлаживать свой код. Первая ошибка:

            string2.pop[x]

Для типа string нет метода pop. Далее вы сохраняете split строки, в которых нет пробелов и знаков препинания; Я не уверен, что вы думаете, что это делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...