Bei codewars kata können Sie gleichzeitig Programmieren und praktisches Englisch lernen. Wenn Sie ein Github-Konto haben, können Sie in 30 Sekunden loslegen Wenn Sie interessiert sind, beginnen Sie jetzt hier
Übrigens können Sie in vielen anderen Sprachen als Python herausfordern
Q1.https://www.codewars.com/kata/54d512e62a5e54c96200019e/train/python
Given a positive number n > 1 find the prime factor decomposition of n. The result will be a string with the following form :
"(p1**n1)(p2**n2)...(pk**nk)"
with the p(i) in increasing order and n(i) empty if n(i) is 1.
Example: n = 86240 should return "(2**5)(5)(7**2)(11)"
Geben Sie bei einer positiven ganzen Zahl n die Primzahlen zurück, aus denen sie besteht
my A.
def primeFactors(b ):
ps = []
ns = []
i = 1
while not b==1:
i += 1
j = 0
while not b % i:
b = b / (i)
j += 1
if not j == 0:
ps.append(i)
ns.append(j)
return ''.join([ '({})'.format(p) if n == 1 else '({}**{})'.format(p,n) for p,n in zip(ps,ns)])
3000ms
Erster erfolgreicher Versuch
def primeFactors(b ):
k = 100000000000000
ps = []
ns = []
for i in range(2,k):
mod = 0
j = 0
if b ==1:
break
while mod == 0:
div,mod = divmod(b,i)
if mod == 0:
b = b / (i)
j += 1
if not j == 0:
ps.append(i)
ns.append(j)
return ''.join([ '({})'.format(p) if n == 1 else '({}**{})'.format(p,n) for p,n in zip(ps,ns)])
5500ms
Best Answer
def primeFactors(n):
ret = ''
for i in range(2, n + 1):
num = 0
while(n % i == 0):
num += 1
n /= i
if num > 0:
ret += '({}{})'.format(i, '**%d' % num if num > 1 else '')
if n == 1:
return ret
3000ms Ich speichere das Ergebnis als Liste → für eine Zeichenfolge Dies ist eine Zeichenfolge von Anfang an Die Ausführungszeit ist fast gleich, aber welche ist besser?
Q2.https://www.codewars.com/kata/559a28007caad2ac4e000083/solutions/python
The drawing shows 6 squares the sides of which have a length of 1, 1, 2, 3, 5, 8. It's easy to see that the sum of the perimeters of these squares is : 4 * (1 + 1 + 2 + 3 + 5 + 8) = 4 * 20 = 80
Could you give the sum of the perimeters of all the squares in a rectangle when there are n + 1 squares disposed in the same manner as in the drawing:
Finden Sie die vierfache Summe der Fibonacci-Sequenz
my A.https://www.codewars.com/kata/559a28007caad2ac4e000083/train/python
def perimeter(n):
# your code
fibo = [1,1]
for i in range(n-1):
fibo.append(fibo[-1] + fibo[-2] )
return sum(fibo)*4
best A1.
def fib(n):
a, b = 0, 1
for i in range(n+1):
if i == 0:
yield b
else:
a, b = b, a+b
yield b
def perimeter(n):
return sum(fib(n)) * 4
Yield ist eine Anweisung, die die Funktion hat, die Ausführung einer Funktion vorübergehend zu stoppen. Wenn Sie Yield anstelle von Return verwenden, können Sie Elemente einzeln zurückgeben, ohne sie in einer Liste usw. zu speichern. Was bedeutet das
length = 5
generator =fib(length)
for i in range(length):
print(next(generator),end=', ')
out
1, 1, 2, 3, 5,
Auf diese Weise kann die for-Schleife in der Funktion auf halbem Weg gestoppt und der Wert zurückgegeben werden. Es scheint, dass diese Summe genommen wird. Weitere Informationen finden Sie unter Kommentarseite usw.
best A2.
def perimeter(n):
a, b = 1, 2
while n:
a, b, n = b, a + b, n - 1
return 4 * (b - 1)
Dies bedeutet, dass es diese Formel zu verwenden scheint
Ich werde versuchen abzuleiten
Die einzige Formel, die ich am häufigsten verwende, ist
Neben dem Übergang