首先是注册时题目: 一个很简单的列表题,我的answer是: def checkio(els): return els[0]+els[1]+els[2] if checkio([1, 2, 3, 4, 5, 6]) == 6: print('Done!') 注册成功后就正式闯关了,可以看到有好几个岛(HOME,O’RELLY等等),OK,就从默认HOME岛开始了~ Home岛第一关: 我的answer: #Your optional code here #You can import some modules or create additional functions import re def checkio(line): re_obj=re.compile("-+") match=re_obj.split(line) line='-'.join(match) return line Home岛第二关: 我的answer: #Your optional code here #You can import some modules or create additional functions def checkio(data): temp=list(set(data)) for i in temp: if data.count(i)==1: data.remove(i) return data Home岛第三关: 我的answer: def checkio(data): data.sort() num=len(data) if num%2 != 0: median=data[int((num-1)/2)] else: median=(data[int(num/2)]+data[int(num/2-1)])/2 return median 而得分最高的answer是(太cool了!): def checkio(data): sd = sorted(data) N = len(data) - 1 a = sd[N // 2] b = sd[(N + 1) // 2] return (a+b) / 2 Home岛第四关: 我的answer: import re def checkio(data): return (len(data) >= 10 and re.search('[0-9]',data) != None and re.search('[a-zA-Z]',data) != None) 排名第一的answer是(好高级,lambda函数都用了): import re def checkio(data): 'Return True if password strong and False if not' return bool(len(data) >= 10 \ and filter(lambda a:a.isupper(),data) \ and filter(lambda a:a.islower(),data) \ and filter(lambda a:a.isdigit(),data)) print 'First ','Done' if checkio('A1213pokl')==False else 'wrong' print 'Second ','Done' if checkio('bAse730onE4')==True else 'wrong' Home岛第五关: 我的answer: def checkio(text): t_count=0 t_value='' list=sorted(set(text.lower())) for i in list: if i >= 'a' and i <= 'z': if text.count(i) > t_count: t_count=text.count(i) t_value=i return t_value 而最佳answer是: def checkio(text): return max(string.ascii_lowercase, key=lambda ch: text.lower().count(ch)) Home岛第六关: 我的answer: FIRST_TEN = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"] OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"] HUNDRED = "hundred" def checkio(number): hundreds=int(number/100) tens=int(number%100/10) ones=number%10 string='' if hundreds > 0: string=FIRST_TEN[hundreds]+' '+HUNDRED if tens >1: string=string+' '+OTHER_TENS[int(tens-2)] elif tens == 1: string=string+' '+SECOND_TEN[int(tens*10+ones-10)] if ones > 0 and tens != 1: string=string+' '+FIRST_TEN[ones] return string.lstrip() 排名第一的answer是(amazing code !!!): def checkio(i): if i < 20: result = 'zero,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen'.split(',')[i] elif i < 100: result = ',,twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety'.split(',')[i//10] if i % 10: result += ' ' + checkio(i % 10) elif i < 1000: result = checkio(i // 100) + ' hundred' if i % 100: result += ' ' + checkio(i % 100) return result Home岛第七关: 我的answer: def checkio(game_result): for i in [0,1,2]: if game_result[i][0] == game_result[i][1] == game_result[i][2]: return game_result[i][0].upper() if game_result[0][i] == game_result[1][i] == game_result[2][i]: return game_result[0][i].upper() if game_result[0][0] == game_result[1][1] == game_result[2][2]: return game_result[0][0].upper() return "D" 思路和排名第一的answer一样,哈哈~ Home岛第八关: 我的answer: def checkio(data): string='' while data > 0: if data >= 1000: string=string+'M' data=data-1000 elif data >=900: string=string+'CM' data=data-900 elif data >= 500: string=string+'D' data=data-500 elif data >= 400: string=string+'CD' data=data-400 elif data >= 100: string=string+'C' data=data-100 elif data >=90: string=string+'XC' data=data-90 elif data >= 50: string=string+'L' data=data-50 elif data >= 40: string=string+'XL' data=data-40 elif data >= 10: string=string+'X' data=data-10 elif data >=9: string=string+'IX' data=data-9 elif data >= 5: string=string+'V' data=data-5 elif data >= 4: string=string+'IV' data=data-4 elif data >= 1: string=string+'I' data=data-1 return string 排名第一的answer是: def checkio(number): 'return roman numeral using the specified integer value from range 1...3999' roman = '' romanmappings = {1: "I", 4: "IV", 5: "V", 9: "IX", 10: "X", 40: "XL", 50: "L", 90: "XC", 100: "C", 400: "CD", 500: "D", 900: "CM", 1000: "M" } for intVal in sorted(romanmappings.keys(), reverse=True): while number >= intVal: roman += romanmappings[intVal] number -= intVal return roman Home岛第九关: 我的answer: def checkio(data): data=list(data) if data[2] != ':' : data.insert(0,'0') if data[5] != ':': data.insert(3,'0') if len(data) < 8: data.insert(6,'0') string='' for i in range(0,len(data)): if data[i] != ':': tmp=bin(int(data[i]))[2:] tmp_len=len(tmp) if i == 0 and tmp_len < 2: tmp='0'*(2-tmp_len)+tmp if (i == 3 or i == 6) and tmp_len < 3: tmp='0'*(3-tmp_len)+tmp if (i == 1 or i == 4 or i == 7) and tmp_len < 4: tmp='0'*(4-tmp_len)+tmp string=string+tmp+' ' string=string.replace('0','.').replace('1','-') else: string=string+data[i]+' ' return string.rstrip() 排名第一的answer是: def checkio(data): ret = [] for i, d in enumerate(data.split(':')): r, d = '', int(d) f, s = d / 10, d % 10 if i == 0: r += '{0:02b} '.format(f) else: r += '{0:03b} '.format(f) r += '{0:04b}'.format(s) ret.append(r) ret = ' : '.join(ret) return ret.replace('0', '.').replace('1', '-')原文:http://www.yhddba.com/checkio闯关过程记录更新至dash/ 转载请保留固定链接: https://linuxeye.com/program/1951.html |