Python_代碼練習_寫一個判斷是否為小數的函數


這兩天在學習函數,練習寫一個判斷是否為小數的函數,看起來蠻簡單的,飛速寫完很是得意,然后測了一下,發現差得好多呀,這個並不像想象那樣簡單,我得到的教訓是,想要把一個需求哪怕再小的需求考慮周全,都不是件簡單的事。

我的路還很長,但千里之行始於足下,努力學習,不斷總結,持續提高,做自己喜歡做的事,享受快樂 ……

# 寫一個判斷是小數的函數
def is_float(s):
s = str(s)
if s.count('.') == 1:
s_left = s.split('.')[0]
s_right = s.split('.')[1]
if s_left.isdigit() and s_right.isdigit():
return True
elif s_left.startswith('-')and s_left.count('-') == 1 and s_right.isdigit():
if s_left.split('-')[1].isdigit():
return True
return False

# 下面的代碼和以上相同,是加了注釋的 ^_^

def is_float(s):
s = str(s) # 強制轉化操作是因為傳進來的被判斷對象的類型具有不確定性,你需要將其統一在一個起點進行處理。
if s.count('.') == 1: # 小數的首要前提就是有且只有一個小數點。
s_left = s.split('.')[0] # 以小數點為分界點把字符串拆成左右兩部分以備進一步分析。
s_right = s.split('.')[1]
if s_left.isdigit() and s_right.isdigit(): # 小數點左右都是純的正整數,一個標准的正小數情況。
return True
elif s_left.startswith('-')and s_left.count('-') == 1 and s_right.isdigit():
# 負小數情況稍復雜,首先以負號開頭,排除多個負號情況,同時小數點右側是純的正整數,在此情況下,
if s_left.split('-')[1].isdigit(): # 小數點左側負號身后的部分如果是正整數字符,是個合法的負小數
return True
return False
# 除了以上正小數和負小數兩種合法的情況外,其它均是不合法情況,上邊的判斷路線也走不進去,直接返回False結束。
# 而當符合上面的任何條件都會判斷是合法小數,返回True結束程序,也走不到最后的return False這個語句。
# 所以不用看到程序最后一句是 return False 而擔心。

# 以下是檢測上面函數的用例,有沒包含的情況嗎?

print(is_float(123.456))
print(is_float(-123.456))
print(is_float(123))
print(is_float(-123))
print(is_float('123.45.6'))
print(is_float('123.4a'))
print(is_float('123a.456'))
print(is_float('-1-23.456'))
print(is_float(.456))
print(.456)  # 0.456
print(is_float(-.456))
print(-.456)  # -0.456
print(is_float('..456'))
print(is_float(--123))
print(--123) # 123 是整數
print(is_float(--.456))
print(--.456) # 0.456 是小數
print(is_float(''))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM