Odwócenienie działania skryptu

0

Siem
Mam taki kod:

def cypher(string):
    newList = string.split()
    counter = 0
    first = []
    second = []
    for word in newList:
        newWord = word[::-1]
        if counter % 2 == 0:
            first.append(newWord)
            counter += 1
        else:
                second.append(newWord)
                counter += 1
    final = first + second
    return ' ' .join(final)
I on działa tak :
cypher('I want you to give me 5. I mean it!')
'I uoy evig .5 naem tnaw ot em I !ti'

Wie ktoś jak napisać program by przywrócić jako zdanie napisane przez cypher?

0

Ty tak poważnie? Deszyfrowanie wygląda identycznie, bo przecież to jest zwykła transpozycja.
cypher(cypher('I want you to give me 5. I mean it!'))

0

To nie działa tak ją powinno to nie jest transpozycja bo mi wychodzi 'I give mean to I you 5. want me it!'

0

@Shalom: nie wydaje mi się, żeby to działało.

0

Faktycznie zaćpałem lekko ;) Trzeba podzielic sobie dane na pół a potem zrobić zip() na tych listach i odwrócić słowa

def decode(data):
    x = data.split(" ");
    y = x[:len(x)/2]
    z = x[len(x)/2:]
    v = sum([list(c) for c in zip(y,z)], [])
    return ' '.join([a[::-1] for a in v])
0

A jak trzeba podzielić dane ???

0

slice indices must be integers or None or have an index method
taki błąd mi wyskakuje gdy wczytuję

decode('I uoy evig .5 naem tnaw ot em I !ti')
0

Odpalasz po pythonem 2 czy 3?
http://ideone.com/ll15ES
Jak python 3 to musisz dzielic za pomocą //
http://ideone.com/AphAnM

0

To zrób:
y = x[:len(x)//2] - czyli // zamiast /. Analogicznie dla x.

0

Działa tylko przy pażystej liczbie stringu:

>>> cypher('I am so lazy')
'I os ma yzal'
>>> decypher('I os ma yzal')
'I am so lazy'
>>> cypher('I am so lazy that')
'I os taht ma yzal'
>>> decypher('I os taht ma yzal')
'I that so am'
>>> cypher('I am so lazy very long')
'I os yrev ma yzal gnol'
>>> decypher('I os yrev ma yzal gnol')
'I am so lazy very long'
>>> 
1

No i co? Może mamy to jeszcze za ciebie wysłać prowadzącemu zajęcia? Może wykażesz minimum zaanagażowania? o_O
To dość logiczne że będzie off-by-one przy tym dzieleniu przez 2 jeśli dlugość jest nieparzysta.

0

pażyste, czy też niepażyste, ...

umiesz w ogóle opisać co robi ten skrypt?

0

Udało mi się to ogarnąć xD:

def mydiv(a,b):
    res = a / b
    for x in range (a + b):
        if x >= res:
            return x


def decypher(string):
    x = string.split()
    print(x)
    d = mydiv(len(x),2)
    if len(x) % 2 == 0:
        y = x[:d]
        z = x[d:]
    else:
        y = x[:d]
        z = x[d:] + [" "]
    print(y)
    print(z)
    v = sum([list(c) for c in zip(y,z)], [])
    text = ' '.join([a[::-1] for a in v])
    return text.strip()

Dzięki za pomoc :)

0
def mydiv(a,b):
    res = a / b
    for x in range (a + b):
        if x >= res:
            return x

Mój rak dostał raka. Rozumiem że to jest floor() czy ceil() po prostu? A tu jakaś iteracja i liniowy algorytm, masakra.

0

przepis na mydiv wyszukaj przy pomocy "python round up", np. https://stackoverflow.com/a/2356510

1 użytkowników online, w tym zalogowanych: 0, gości: 1