tarantul
Дек. 23, 2011 20:36:28
1. Имеются две ёмкости: кубическая с ребром А, цилиндрическая с высотой Н и радиусом основания R. Определить поместится ли жидкость объёма М в первую ёмкость, во вторую, в обе.
2. Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна, 5 — центнер. Дан номер единицы массы и масса тела M в этих единицах (вещественное число). Вывести массу данного тела в килограммах.
3. Дан одномерный массив числовых значений, насчитывающий N элементов. Исключить все нулевые элементы.
4. Описать функцию Fact(N) целого типа, вычисляющую значение факториала N! = 1•2•…•N (N > 0 — параметр целого типа). С помощью этой функции вычислить факториалы 10 данных чисел.
magnet85
Дек. 24, 2011 07:14:27
py.user.next
есть math.factorial()
Преподаватели такое не оценят, из вики:
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x - 1)
FishHook
Янв. 13, 2012 05:44:14
baa, не оптимально
from timeit import Timer
time=Timer()
value=500
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x - 1)
t1=time.timer()
factorial(value)
t2=time.timer()-t1
print t2
def fact(x):
f = 1
while x:
f *= x
x -= 1
return f
t1=time.timer()
fact(value)
t2=time.timer()-t1
print t2
fuct2=lambda x:reduce(lambda i,j:i*j, range(1,x+1))
t1=time.timer()
fuct2(value)
t2=time.timer()-t1
print t2
def fact3(x):
f = 1
l=range(x+1)
while l:
f*= l.pop()
return f
t1=time.timer()
fact3(value)
t2=time.timer()-t1
print t2
fuct4=lambda x:x*fuct4(x-1) if x!=1 else 1
t1=time.timer()
fuct4(value)
t2=time.timer()-t1
print t2
import math
t1=time.timer()
math.factorial(value)
t2=time.timer()-t1
print t2
def fact5(x):
f=1
for i in xrange(1,x+1):
f=f*i
return f
t1=time.timer()
fact5(value)
t2=time.timer()-t1
print t2
from itertools import count
c=count(1)
def fact6(x):
f=1
foo=1
while foo<x:
foo=c.next()
f=f*foo
return f
t1=time.timer()
fact6(value)
t2=time.timer()-t1
print t2
def fact7(x,acc=1):
if not x: return acc
return fact7(x-1,acc*x)
t1=time.timer()
fact7(value)
t2=time.timer()-t1
print t2
0.000919103622437
0.00028395652771
0.000602006912231
0.000395059585571
0.000457048416138
0.000217914581299
0.000236034393311
0.000325918197632
0.000741004943848
то есть наименьшее время дает
def fact5(x):
f=1
for i in xrange(1,x+1):
f=f*i
return f
что очень близко к math.factorial()
py.user.next
Янв. 16, 2012 23:46:34
FishHook
t1=time.timer()
factorial(value)
t2=time.timer()-t1
странное применение timeit
там же есть специальные методы, открой help(timeit)
py.user.next
Янв. 17, 2012 07:50:33
FishHook
Зато наглядно и понятно
по-нормальному гораздо нагляднее и понятнее
>>> import timeit
>>> def f():
... list(range(1000000))
...
>>> t = timeit.Timer('f()', 'from __main__ import f')
>>> t.timeit(100)
3.3808891773223877
>>> t.repeat(3, 100)
[3.352781057357788, 3.332251787185669, 3.330061912536621]
>>>