Jaki to typ danych?

0

Witam, jako iż nie znam Pythona, a muszę lekko zmodyfikować jego kod to prosiłbym o wytłumaczenie mi, bo gdy wpisuje w programie linie
seq = (0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0) , następnie program pracuje na tej danej używając jej w ten sposób s = sequence[:] . Moja prośba polega na wytłumaczeniu jak moge ustawić seq jako input, ponieważ gdy wpisuje seq=input() to, później program zachowuje się jakby były to inne dane. Próbowałem jeszcze
s = input()
numbers = list(map(int, s.split()))
ale efekt był taki sam.

1
  1. seq = (0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0) Jest to typ tuple - zwykla lista tylko ze jak juz ja zainicjalizujesz to nie mozesz juz nic dodac ani usunac.

  2. seq = tuple(input('Add sequence of data, separated by comma: ').split(',')) mowi chyba samo za siebie

0
y2evp5in napisał(a):
  1. seq = (0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0) Jest to typ tuple - zwykla lista tylko ze jak juz ja zainicjalizujesz to nie mozesz juz nic dodac ani usunac.

  2. seq = tuple(input('Add sequence of data, separated by comma: ').split(',')) mowi chyba samo za siebie

Niestety coś też nie działa, to jest kod i chodzi o to zeby tam gdzie jest seq(...) było inputowanie, z podanym tam ciągiem wynik powinien wychodzić x^4+x^3+1, a jak wpisuje to co podałeś wychodzi inaczej

#!/usr/bin/env python

def Berlekamp_Massey_algorithm(sequence):
    N = len(sequence)
    s = sequence[:]

    for k in range(N):
        if s[k] == 1:
            break
    f = set([k + 1, 0])  # use a set to denote polynomial
    l = k + 1

    g = set([0])
    a = k
    b = 0

    for n in range(k + 1, N):
        d = 0
        for ele in f:
            d ^= s[ele + n - l]

        if d == 0:
            b += 1
        else:
            if 2 * l > n:
                f ^= set([a - b + ele for ele in g])
                b += 1
            else:
                temp = f.copy()
                f = set([b - a + ele for ele in f]) ^ g
                l = n + 1 - l
                g = temp
                a = b
                b = n - l + 1

    # output the polynomial
    def print_poly(polynomial):
        result = ''
        lis = sorted(polynomial, reverse=True)
        for i in lis:
            if i == 0:
                result += '1'
            else:
                result += 'x^%s' % str(i)

            if i != lis[-1]:
                result += ' + '

        return result

    return (print_poly(f), l)


if __name__ == '__main__':
    seq = (0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1)
    (poly, span) = Berlekamp_Massey_algorithm(seq)

    print ('The input sequence is %s.' % str(seq))
    print ('Its characteristic polynomial is (%s),' % poly,)
    print ('and linear span is %d.' % span)
1

Co do postu @y2evp5in, tuple to tuple, a nie lista, inny typ, i zgadza się nie obsługuje "item assignment".
Co do meritum, co Chcesz zrobić, wczytać tę tuplę seq z klawiatury?

1

@lion137: Tak, tak inny typ po prostu chcialem wytlumaczyc po latwemu :P

Blad polega na tym ze po wczytaniu jest to tuple z elementami string wiec przejedz po elementach listy ktora otrzymasz z seq = input('Add sequence of data, separated by comma: ').split(',') i zamien je na int a pozniej ta liste zamien na tuple

1
seq_str = input() # -> 1 2 3
seq = tuple([int(x) for x in seq_str.split()])  
print(seq) # -> (1, 2 ,3) 
print(type(seq)) # -> tuple
print(type(seq[0])) # -> int
1

@lion137 przetlumaczyl ci moj post na kod pythona wiec juz chyba nie powinienes miec problemow

0

Już działa, wszystkim wam dziękuję, do zamknięcia

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