Jak sprawdzić czy zmienna jest w liście?

0

Witam, chcę napisać program który mówi mi ile dana silnia ma liczb. Napisałem coś takiego:

def silnia(n):
    iloczyn = 1
    for i in range(1, n+1):
        iloczyn = iloczyn * i
    return iloczyn

lista = ['4', '22', '23', '24', '32', '33', '34', '42', '43', '44',
          '52', '53', '54', '62', '63', '64', '72', '73', '74',
          '82', '83', '84', '92', '93', '94', '102', '103', '104',
          '122', '123', '124', '132', '133', '134',
          '142', '143', '144', '152', '153', '154']

for z in range(4,101):
    q = len(str(silnia(z)))
    print z,"! = ",q,
    if (q == lista[0:158]:
        print "cyfry"
    else:
        print "cyfr"

problem jest z tą linijką:

if (q == lista[0:158]:

W jaki sposób mam sprawdzić, czy dana wartość 'q' jest w zdefiniowanej wcześniej liście? Ten sposób w jaki to napisałem nie działa.

1
if(lista.count(q)>0):

P.S. Ile dana silnia ma cyfr.

1
ls = [1, 2, 3]
print(1 in ls)
print(5 in ls)

http://ideone.com/rX5fK4

0

Ja bym to jednak spróbowal jakoś sensowniej liczyć bo teraz to jest mega nieefektywne a dla dużych liczb to potrwa wieki ;] A przecież nie trzeba koniecznie wyliczyć silni żeby wiedzieć ile ma cyfr.
Da sie to policzyć w sposób przybliżony mnożąc liczbę cyfr kolejnych czynników silni zamiast samych liczb. Tzn na przykład wiedząc ze 9! ma 6 cyfr możemy od razu stwierdzić że 10! ma cyfr 7. Liczba cyfr w danej liczbie to sufit z log10(liczba) więc zamiast liczyć sobie log10(n!) mozesz liczyć log10(n)*log10(n-1)*...*log10(1)
Patrz np tu:
http://pitcher.digitalfreehold.ca/code/computeSize

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