2016-03-30 5 views
0

Aşağıdaki işlev 3 parametre alır (f, a ve b). Burada f bir işlevdir ve a ve b sırasıyla alt ve üst sınırlardır ve f, üzerinde toplanacak işlevdir. için * yukarıdaki koduBu kodu nasıl değiştirebilirim, böylece işlevlerle başa çıkabilir

def sum(f, a, b): 
total = 0 
for i in range(a, b+1): 
total += f(i) 
return total 

Soru 1. tip B ve 1 ile 10 arasında bir tamsayı toplamını hesaplamak için bir den f toplamını hesaplar ve 1 ila 100 ve 1 ila 1000

+0

başlat 'total' için' 1 + ve '' yerine '= f = i işleç yerine' f (i) 'yapmak? –

cevap

0

0 eklerken hiçbir şey yapmaz, 1 ile çarpmak hiçbir şey yapmaz. Bu nedenle, sadece başlangıç ​​olarak kullanan:

def product(f, a, b): 
    total = 1 
    for i in range(a, b+1): 
     total *= f(i) 
    return total 
+0

daha sonra ürün yazdırır ve daha sonra üç değeri geçirir misiniz? – TurtleDave

+0

@TurtleDave: "sum()" ile aynı kullanım olacaktır. – zondo

+0

Baskı toplamını denedim (f, 1,5) ve hiç çalışmadı? – TurtleDave

1

Benzer fikri, ancak Örneğin yerine +=

def product(f, a, b): 
    total = 1 
    for i in range(a, b+1): 
     total *= f(i) 
    return total 

ait

def foo(x): 
    return x 

>>> product(foo, 1, 5) 
120 
+0

ürünümü denedim (f, 1,5) ama sözdizimi hatası – TurtleDave

+0

@CoryKramer, size upvoited diyor, cevabım için bazı kodları kullandım –

0

*= kullanmak Ya işlevsel stilini kullanmak ve gelecek başarıya ulaşmak için:

def product(f, a, b): 
    return reduce(lambda x, y: x*y, [f(n) for n in range(a, b+1)]) 

Çalıştır o işlevi örneğin spam ile devam:

def spam(x): 
    return x 

print(product(spam, 1, 3)) 

>>>6 

Düzenlendi:

W/bakışlar o olacak param f o:

def product(a, b): 
    return reduce(lambda x, y: x*y, [n for n in range(a, b+1)]) 
print(product(1, 5)) 
+0

nasıl cevap yazabilirim? – TurtleDave

+0

@TurtleDave, düzenlenmiş –

+0

Tamam ben spam spam kavramını anlamıyorum? Ürünü tanımladıktan sonra spam'i mi tanımlarsınız? – TurtleDave