2020.6.25 练习 (python)
1. 枚举的运用
Your team is writing a fancy new text editor and you‘ve been tasked with implementing the line numbering.
Write a function which takes a list of strings and returns each line prepended by the correct number.
The numbering starts at 1. The format is n: string. Notice the colon and space in between.
Examples:
<span>number([]) <span># => []</span></span>
<span><span><span>number([<span>"a", <span>"b", <span>"c"]) <span># => ["1: a", "2: b", "3: c"]</span></span></span></span></span></span></span>
def number(lines):
a=enumerate(lines,1)
print(a.__next__(),a.__next__(),a.__next__()) # (1, ‘a‘) (2, ‘b‘) (3, ‘c‘)
return [‘%d: %s‘ % v for v in enumerate(lines, 1)] # 因为返回是是先数字,在lines 里面的元素2. 菲波那契数列
The Fibonacci numbers are the numbers in the following integer sequence (Fn):
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...
such as
F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.
Given a number, say prod (for product), we search two Fibonacci numbers F(n) and F(n+1) verifying
F(n) * F(n+1) = prod.
Your function productFib takes an integer (prod) and returns an array:
[F(n), F(n+1), true] or {F(n), F(n+1), 1} or (F(n), F(n+1), True)depending on the language if F(n) * F(n+1) = prod.
If you don‘t find two consecutive F(m) verifying F(m) * F(m+1) = prodyou will return
[F(m), F(m+1), false] or {F(n), F(n+1), 0} or (F(n), F(n+1), False)F(m) being the smallest one such as F(m) * F(m+1) > prod.
Some Examples of Return:
productFib(800) # should return (34, 55, false),
def productFib(prod):
x = [0,1]
# print(x[-1])
while True:
if prod == x[-1] * x [-2]:
return [x[-2],x[-1],True]
if prod < x[-1] * x [-2]:
return [x[-2],x[-1],False]
else:
x.append(x[-1] + x[-2])
continuedef productFib(prod):
a, b = 0, 1
while prod > a * b:
a, b = b, a + b
return [a, b, prod == a * b]def productFib(prod):
func = lambda a, b: func(b, a+b) if a*b < prod else [a, b, a*b == prod]
return func(0, 1)def productFib(prod, f1=0, f2=1):
return [f1, f2, True] if prod == f1 * f2 else [f1, f2, False] if prod < f1 * f2 else productFib(prod, f2, f1+f2)<span><span><span><span><span><span><span><br /></span></span></span></span></span></span></span><span><span><span><span><span><span><span>3. 数字乘方相加</span></span></span></span></span></span></span><span><span><span><span><span><span><span><br /></span></span></span></span></span></span></span>
Some numbers have funny properties. For example:
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5?= 1390 = 695 * 2
46288 --> 4³ + 6?+ 2? + 8? + 8? = 2360688 = 46288 * 51
Given a positive integer n written as abcd... (a, b, c, d... being digits) and a positive integer p
- we want to find a positive integer k, if it exists, such as the sum of the digits of n taken to the successive powers of p is equal to k * n.
In other words:
Is there an integer k such as : (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + ...) = n * k
If it is the case we will return k, if not return -1.
Note: n and p will always be given as strictly positive integers.
dig_pow(89, 1) should return 1 since 8¹ + 9² = 89 = 89 * 1 dig_pow(92, 1) should return -1 since there is no k such as 9¹ + 2² equals 92 * k dig_pow(695, 2) should return 2 since 6² + 9³ + 5?= 1390 = 695 * 2 dig_pow(46288, 3) should return 51 since 4³ + 6?+ 2? + 8? + 8? = 2360688 = 46288 * 51test.assert_equals(dig_pow(46288, 3), 51)
def dig_pow(n, p):
a = 0
for x in str(n):
a += int(x) ** p
p += 1
if a % n == 0:
return a//n
else:
return -1def dig_pow(n, p):
s = 0
for i,c in enumerate(str(n)):
s += pow(int(c),p+i)
return s/n if s%n==0 else -1def dig_pow(n, p): t = sum( int(d) ** (p+i) for i, d in enumerate(str(n)) ) return t//n if t%n==0 else -1
4. 密码有效判断
ATM machines allow 4 or 6 digit PIN codes and PIN codes cannot contain anything but exactly 4 digits or exactly 6 digits.
If the function is passed a valid PIN string, return true, else return false.
eg:
validate_pin("1234") == True
validate_pin("12345") == False
validate_pin("a234") == Falsedef validate_pin(pin):
return pin.isdecimal() and (len(pin) == 4 or len(pin) == 6)def validate_pin(pin):
return len(pin) in (4, 6) and pin.isdigit()1 import re
2 def validate_pin(pin):
3 return bool(re.match(r‘^(\d{4}|\d{6})$‘,pin)) # ^开头,$结尾,中间要严格符合这个格式,digit 4个或6个