入坑codewars第13天- Dashatize it
阿新 • • 發佈:2018-12-21
第一題:
Given a number, return a string with dash'-'
marks before and after each odd integer, but do not begin or end the string with a dash mark.
Ex:
dashatize(274) -> '2-7-4'
dashatize(6815) -> '68-1-5'
題意:
題意很簡單,就是在每一個奇數前後輸出一個‘-’: 但是有特殊情況,第一個前面和最後一個數字的後面不能有‘-’,還有就是數與數之間只能有一個‘-’,當num的數值只有一位時,直接返回數值的字串。 這道題我寫了很久,漏了很多情況,後面程式碼一大串,看了大神的精簡程式碼發現自己太菜雞了。。。
程式碼:
import re def dashatize(num): if num==None:return 'None' #if num<10:return num str1=re.findall(r"\d+",str(num)) str1="".join(str1) if int(str1)<10: return str1 #print(str1) list1=[] if str1[0]=='-':list1=[] else: if int(str1[0])%2!=0: list1.append(str1[0]+"-") else: list1.append(str1[0]) for i in range(1,len(str1)-1): if int(str1[i])%2!=0: if int(str1[i-1])%2!=0: str2=str1[i]+"-" list1.append(str2) else: str2="-"+str1[i]+"-" list1.append(str2) else: list1.append(str1[i]) if int(str1[len(str1)-1])%2!=0 and int(str1[len(str1)-2])%2==0: list1.append("-"+str1[len(str1)-1]) else: list1.append(str1[len(str1)-1]) return "".join(list1)
我運用到的知識有:正則表示式、字串和列表的相互轉化
參考文章:
https://blog.csdn.net/roytao2/article/details/53433373
https://blog.csdn.net/liao392781/article/details/80495411
大神的精簡程式碼:
import re def dashatize(num): try: return ''.join(['-'+i+'-' if int(i)%2 else i for i in str(abs(num))]).replace('--','-').strip('-') except: return 'None'
我這豬腦子,我之前寫過的題裡就用到過了strip函式,我給忘了。。。而且輸入的是正負數,我給當成了字串處理。受教了
而且列表推導式我運用的不熟練。