python- drukowanie długości liczby

python- drukowanie długości liczby
0

witam, mam takie pytanie: jak np. mam wykonać działanie i nie drukować jego wyniku tylko jego długość, np. mam 15*150=2250, więc chcę wydrukować 4. Jak to zrobić?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Dugość wyniku?

Kopiuj
wynik = 15*150
print(len(str(wynik)))

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

o dziękuję bardzo, a jeśli chciałabym, żeby drukował np. dwie pierwsze liczby i długość tego, co zostało?, np, 123*123=15129, to żeby drukowało 15 , 3

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Łatwiej byłoby gdybyś po prostu napisala co chcesz osiągnąć. Bo zwykle nijak sie to ma do problemu który ludzie opisują na forum. Zwykle pytają o to jak zrealizować ich dziwny pomysł zamiast spytać jak rozwiązać pierwotny problem. Tak czy siak:

Kopiuj
wynik = 123*123
wynik_string = str(wynik)
print(int(wynik_string[:2]), len(wynik_string[2:]))

Wyjaśnienie: ten zapis z [] to tzw "slice", czyli tworzenie kopii fragmentu podanej tablicy. W nawiasach kwadratowych podajesz [od_której_pozycji:do_której_pozycji]. Nie podanie którejś z liczb powoduje automatyczne zalożenie że tniemy od początku / do końca. W efekcie wynik_string[:2] powoduje stworzenie kopii tablicy wynik_string od początku aż do drugiego znaku. Analogicznie wynik_string[2:] wykonuje kopie tablicy wynik_string od pozycji 2 do końca.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
0

Dziękuję ślicznie, mam zrobić program, który drukuje dwie początkowe cyfry silni i po przecinku pozostałą długość, mam taki:

Kopiuj
n=int(input('podaj n'))   
for i in range(1,n):
        n*=i
        n_string = str(n)
        print(int(n_string[:2]),',', len(n_string[2:]))

jednak to mi drukuje zamiast tylko jednego wyniku, np. dla n=20 powinno być tylko 24,17 a on mi drukuje wszystkie wyniki:

Kopiuj
20 , 0
40 , 0
12 , 1
48 , 1
24 , 2
14 , 3
10 , 4
80 , 4
72 , 5
72 , 6
79 , 7
95 , 8
12 , 10
17 , 11
26 , 12
41 , 13
71 , 14
12 , 16
24 , 17
MarekR22
To już są podstawy składni pythona, rusz trochę głową, zanim napiszesz coś na forum. (za dużo spacji)
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  1. No bo najpierw musisz policzyć silnie a dopiero potem wykonać kod który ci podałem (tzn pod pętlą a nie wewnątrz niej).
  2. Ale to nie zadziała zbyt dobrze dla dużych liczb, zdajesz sobie z tego sprawę? Dla dużych liczb musisz jednak użyć mózgu i wyliczać sobie dwie te dwie pierwsze cyfry silni oraz jej długość.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

wystarczy mi, aby działał do 1000, więc chyba będzie ok, dzięki.

Shalom
No będzie bo python defaultowo ma implementacje dużych liczb ;]
MarekR22
1000! TO dość duża liczba, więc będzie to liczył dość długo: http://www.wolframalpha.com/input/?i=1000%21
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Swoją drogą ja bym to zaimplementował tak:

Kopiuj
n=int(input('podaj n'))
silnia = reduce(lambda x,y:x*y, xrange(1,n))
silnia_string = str(silnia)
print(int(silnia_string[:2]),',', len(silnia_string[2:]))

@MarekR22 bez przesady, wynik będzie momentalnie ;)
Dopiero dla 100k zwalnia zauważalnie (timeit mówi że dla 10k jest 0.5 sekundy a dla 100k jest już 10 sekund)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
bogdans
Na mojej maszynie wynik obliczeń dla 10k jest natychmiast, około 0,6 sekundy zajmuje wypisanie wyniku.
Shalom
Ja testowałem ile zajmuje samo wywołanie reduce :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.