第一題:
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函數,我給忘了。。。而且輸入的是正負數,我給當成了字符串處理。受教了
而且列表推導式我運用的不熟練。