1. 程式人生 > >入坑codewars第13天- Dashatize it

入坑codewars第13天- Dashatize it

第一題:

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函式,我給忘了。。。而且輸入的是正負數,我給當成了字串處理。受教了

而且列表推導式我運用的不熟練。