Moim celem jest stworzenie łamacza kodu w Pythonie. Do tej pory pomieszałem litery iw rezultacie mam listę pojedynczych znaków.

#Result of inputting the string 'hello world'
['C', 'V', 'N', 'N', 'H', 'X', 'H', 'K', 'N', 'O']

Moim celem jest wyświetlenie tego jako ciągu znaków ze spacją „CVNNH XHKNO”

Teraz mam kilka opcji, ale nie jestem pewien, która z nich byłaby najlepsza: Czy najpierw konwertuję go na łańcuch przed manipulowaniem nim, czy manipuluję listą przed konwersją na ciąg.

Do tej pory mam dostępnych następujących pomocników z procesu (automatycznie)

length = [5,5] #list
total_chars = 10 #int
no_of_words = 2 #int

Przekonwertowałem go na ciąg CVNNHXHKNO i pomyślałem o wstawieniu spacji po piątej literze, obliczając punkt początkowy [0], punkt środkowy [5] i punkt końcowy [11].

start = 0
mid_point = total_chars - length[0]

print(mid_point)
first_word = message[start:mid_point]
print(first_word)

second_word = message[mid_point:total_chars]
print(second_word)

completed_word = first_word + ' ' + second_word
print(completed_word)

Niestety jest to tylko ręczne i nie bierze pod uwagę, jeśli jest 5 lub więcej słów. Próbowałem powtórzyć oryginalną listę pojedynczych znaków w zagnieżdżonych pętlach for, używając długości listy, ale wydaje mi się, że jestem zdezorientowany i nadmiernie się zastanawiam.

1
Tracy 3 kwiecień 2020, 18:31

5 odpowiedzi

Najlepsza odpowiedź

Jeśli masz to jako dane wejściowe:

l = ['C', 'V', 'N', 'N', 'H', 'X', 'H', 'K', 'N', 'O']
length = [5,5] #list
total_chars = 10 #int
no_of_words = 2 #int

Następnie możesz obliczyć wynik w następujący sposób:

words = []
pos = 0
for i in length:
  words.append("".join(l[pos:pos+i]))
  pos += i

result = " ".join(words)

print(words)
print(result)

Wynik:

['CVNNH', 'XHKNO']
CVNNH XHKNO
2
adnanmuttaleb 3 kwiecień 2020, 15:44

Nie do końca rozumiem twoje pytanie, ale prawdopodobnie to, czego chcesz, to coś takiego

letters = ['C', 'V', 'N', 'N', 'H', 'X', 'H', 'K', 'N', 'O']
length = [5, 5]
words = []
offset = 0

for i in length:
    words.append(''.join(letters[offset:offset+i]))
    offset += i   

string_words = ' '.join(words)
print(string_words)
2
Charlestone 3 kwiecień 2020, 15:53

Aby móc używać nieskończenie długich list długości jako danych wejściowych, możesz iterować po liście length i łączyć odpowiednie litery:

letters = ["A", "S", "I", "M", "P", "L", "E", "T", "E", "S", "T"]
length = [1, 6, 4]

starting_index = 0
for l in length:
    print("".join(letters[starting_index:starting_index+l]))
    starting_index += l
1
Jakob Schödl 3 kwiecień 2020, 15:46

Wygląda na to, że potrzebujesz tylko listy length opisującej liczbę liter w każdym słowie:

message = ['C', 'V', 'N', 'N', 'H', 'X', 'H', 'K', 'N', 'O']

length = [5,5]

offset = 0
words = []
for size in length:
    words.append(''.join(message[offset:offset+size]))
    offset += size
completed_word = ' '.join(words)

print(completed_word)

Wynik:

CVNNH XHKNO
1
quamrana 3 kwiecień 2020, 15:48
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

WORD_SIZE = 5
NUM_WORDS = 2  # You could replace this with `len(lst) / WORD_SIZE`
result = ' '.join(
  ''.join(
    lst[i * WORD_SIZE: i * WORD_SIZE + 5]
  )
  for i in range(NUM_WORDS)
)

#  result = 'abcde fghij'
1
Josh Clark 3 kwiecień 2020, 15:44