1.
Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.
It should remove all values from list a, which are present in list b.
array_diff([1,2],[1]) == [2]
If a value is present in b, all of its occurrences must be removed from the other:
array_diff([1,2,2,2,3],[2]) == [1,3]
def array_diff(a, b): c = [] for i in a: if i not in b: c.append(i) return c or def array_diff(a, b): return [i for i in a if i not in b]
2.
Your job is to write a function which increments a string, to create a new string.
- If the string already ends with a number, the number should be incremented by 1.
- If the string does not end with a number. the number 1 should be appended to the new string.
Examples:
foo -> foo1
foobar23 -> foobar24
foo0042 -> foo0043
foo9 -> foo10
foo099 -> foo100
不会
def increment_string(strng): head = strng.rstrip('0123456789') tail = strng[len(head):] print(head,tail) if tail == "": return strng + "1" return head + str(int(tail) + 1).zfill(len(tail))
3. 输入n 输出xy 是x^y == n
import math def isPP(n): i=2 while i < n: if i ** round(math.log(n,i)) == n: return [i,round(math.log(n,i))] else: i+=1 else: return None
4. h bounce window 输出 从窗户可以看到多少次球
h: 扔球的高度, 应大于0
bounce: 球重新弹起来的高度是原来的多少 (0,1)
window : 看球的高度
def bouncingBall(h, bounce, window): if h >0 and bounce >0 and bounce<1 and window < h: a = 1 while h * bounce > window: a += 2 h = h*bounce else: return a else: return -1
5. 钞票25 50 100, 门票一张25 输入一个列表 ,看看能不能找钱给顾客
test.assert_equals(tickets([25, 25, 50]), "YES")
test.assert_equals(tickets([25, 100]), "NO")
def tickets(people): till = {100.0:0, 50.0:0, 25.0:0} for paid in people: till[paid] += 1 change = paid-25.0 for bill in (50,25): while (bill <= change and till[bill] > 0): till[bill] -= 1 change -= bill if change != 0: return 'NO' return 'YES'
4. 为1234567890 编辑加减乘除: 用到函数套嵌
def zero(f = None): return 0 if not f else f(0) def one(f = None): return 1 if not f else f(1) def two(f = None): return 2 if not f else f(2) def three(f = None): return 3 if not f else f(3) def four(f = None): return 4 if not f else f(4) def five(f = None): return 5 if not f else f(5) def six(f = None): return 6 if not f else f(6) def seven(f = None): return 7 if not f else f(7) def eight(f = None): return 8 if not f else f(8) def nine(f = None): return 9 if not f else f(9) def plus(y): return lambda x: x+y def minus(y): return lambda x: x-y def times(y): return lambda x: x*y def divided_by(y): return lambda x: x/y
Test.assert_equals(seven(times(five())), 35)
Test.assert_equals(four(plus(nine())), 13)
Test.assert_equals(eight(minus(three())), 5)
Test.assert_equals(six(divided_by(two())), 3)
5. 输入的是一个字符, 输出跟其他数字不同的数字的序号
iq_test("2 4 7 8 10") => 3 // Third number is odd, while the rest of the numbers are even
iq_test("1 2 1 1") => 2 // Second number is even, while the rest of the numbers are odd
def iq_test(numbers): numbers = numbers.split(' ') i = 0 for a in numbers: numbers[i] = int(a) % 2 i += 1 if numbers.count(0)< numbers.count(1): return numbers.index(0)+1 return numbers.index(1)+1
def iq_test(numbers): e = [int(i) % 2 == 0 for i in numbers.split()] return e.index(True) + 1 if e.count(True) == 1 else e.index(False) + 1
6. 乌龟赛跑 (v1, v2,g) 问乌龟2 在让了g feet 之后啥时能赶上
def race(v1, v2, g): if v1 > v2: return None a = g/(v2-v1) m = a*60 b = a * 60 * 60 return [int(a),int(m-int(a)*60),int(b-int(a)*3600-int(m-int(a)*60)*60)]
def race(v1, v2, g): if v1>v2: return None res = g*3600/(v2-v1) return [res/3600,res%3600/60,res%60]
7. 加密 解密 ,每个第二位 再+上剩下的,循环
"This is a test!", 1 -> "hsi etTi sats!"
"This is a test!", 2 -> "hsi etTi sats!" -> "s eT ashi tist!"
def decrypt(encrypted_text, n): while n > 0: a =int(len(encrypted_text)/2) t3 = encrypted_text[:a] t4 = encrypted_text[a:] t = '' x = 0 for i in range(0,len(encrypted_text)): if i % 2 == 0: t += '%s' else: t += t3[x] x +=1 y = tuple(t4) print(t,y) encrypted_text = t % y n -= 1 return encrypted_text # 测试答案都对,但说我% y没有匹配全
正确答案
def decrypt(text, n): if text in ("", None): return text ndx = len(text) // 2 for i in range(n): a = text[:ndx] b = text[ndx:] text = "".join(b[i:i + 1] + a[i:i + 1] for i in range(ndx + 1)) return text def encrypt(text, n): for i in range(n): text = text[1::2] + text[::2] return text
8. 将长度>3 的单词进行缩写,句子中除单词意外的字符不变
"elephant-rides are really fun!") -----"e6t-r3s are r4y fun!"
自己写的
def abb(x): if len(x)>3: return x[0]+str(len(x)-2)+x[-1] return x def abbreviate(s): s = list(s) w ='' senten = '' for i in s: if i.isalpha(): w += i else: senten = senten+abb(w) + i w = '' sentence = senten + abb(w) return sentence
答案:
import re regex = re.compile('[a-z]{4,}', re.IGNORECASE) # 用正则表达式给定了一个格式 def replace(match): word = match.group(0) return word[0] + str(len(word) - 2) + word[-1] def abbreviate(s): return regex.sub(replace, s) # 即s 中符合regex所表明的结构的,都替换成replace 函数之后的结果
为什么replace 不用加()
match 的值是啥
9. n^3 + (n-1)^3 + ... + 1^3 = m if such a n exists or -1 if there is no such n. 输入m ,输出n 或 -1
def find_nb(m): x = 0 n = 1 while x < m: x += n **3 n += 1 else: if x == m: return n-1 else: return -1
10. gap(g,m,n) 在m - n 中, 相邻质数相减=g
运行时间很长 且会输出,【0,x] 结果错误
def gap(g,m,n): a = [] for i in range(m,n): x = 2 while x < int(i/2): if i % x == 0: break else: x +=1 if x == int(i/2): a.append(i) for i in range(0,len(a)-1): if a[i+1]-a[i] == g: return [a[i],a[i+1]] return None
def gap(g,m,n): b = 0 for x in range(m,n+1): if isprime(x) == True: a = b b = x if b - a == g: return [a,b] return None def isprime(x): i = 2 while i < int(x / 2): if x % i == 0: break else: i += 1 if i == int(x / 2): return True else: return False
def gap(g, m, n): previous_prime = n for i in range(m, n + 1): if is_prime(i): if i - previous_prime == g: return [previous_prime, i] previous_prime = i return None def is_prime(n): for i in range(2, int(n**.5 + 1)): if n % i == 0: return False return True
11. 列表中8个8个反转
11111111 00000000 00001111 10101010
(byte1) (byte2) (byte3) (byte4)
should become:
10101010 00001111 00000000 11111111 (byte4) (byte3) (byte2) (byte1)
def data_reverse(data): a = '' b = '' for i in data: a += str(i) if len(a) == 8: b = a + b a = '' return [int(y) for y in b]
答案:
def data_reverse(data): res = [] for i in range(len(data) - 8, -1, -8): print(len(data)) res.extend(data[i:i + 8]) return res
浙公网安备 33010602011771号