[PYTHON] 수레에 isdigit 사용하기?
PYTHON수레에 isdigit 사용하기?
a = raw_input('How much is 1 share in that company? ')
while not a.isdigit():
print("You need to write a number!\n")
a = raw_input('How much is 1 share in that company? ')
이것은 사용자가 정수를 입력하는 경우에만 작동하지만 부동 소수점을 입력하더라도 작동하지만 문자열을 입력 할 때는 작동하지 않습니다.
따라서 사용자는 9와 9.2를 모두 입력 할 수 있어야하지만 abc는 입력 할 수 없어야합니다.
어떻게해야합니까?
해결법
-
==============================
1.정규식을 사용하십시오.
정규식을 사용하십시오.
import re p = re.compile('\d+(\.\d+)?') a = raw_input('How much is 1 share in that company? ') while p.match(a) == None: print "You need to write a number!\n" a = raw_input('How much is 1 share in that company? ')
-
==============================
2.EAFP
EAFP
try: x = float(a) except ValueError: print("You must enter a number")
-
==============================
3.더 많은 Pythonic 방법이 일반적으로 ... except (즉 EAFP)를 시도한다는 점에서 기존 답변이 옳습니다.
더 많은 Pythonic 방법이 일반적으로 ... except (즉 EAFP)를 시도한다는 점에서 기존 답변이 옳습니다.
그러나 실제로 유효성 검사를 수행하려는 경우 isdigit ()을 사용하기 전에 정확히 1 소수점을 제거 할 수 있습니다.
>>> "124".replace(".", "", 1).isdigit() True >>> "12.4".replace(".", "", 1).isdigit() True >>> "12..4".replace(".", "", 1).isdigit() False >>> "192.168.1.1".replace(".", "", 1).isdigit() False
그러나이 함수는 int와는 다른 부동 소수점을 처리하지 않습니다. 당신이 정말로 필요하다면 그 수표를 추가 할 수 있습니다.
-
==============================
4.dan04의 답변 작성 :
dan04의 답변 작성 :
def isDigit(x): try: float(x) return True except ValueError: return False
용법:
isDigit(3) # True isDigit(3.1) # True isDigit("3") # True isDigit("3.1") # True isDigit("hi") # False
-
==============================
5.나는 @ dan04가 올바른 접근법 (EAFP)을 가지고 있다고 생각하지만, 불행히도 현실 세계는 종종 특별한 경우이며, 일부 코드는 실제로 관리해야한다. 그래서 아래는 좀 더 정교하고, 좀 더 실용적인 (현실적인) :
나는 @ dan04가 올바른 접근법 (EAFP)을 가지고 있다고 생각하지만, 불행히도 현실 세계는 종종 특별한 경우이며, 일부 코드는 실제로 관리해야한다. 그래서 아래는 좀 더 정교하고, 좀 더 실용적인 (현실적인) :
import sys while True: try: a = raw_input('How much is 1 share in that company? ') x = float(a) # validity check(s) if x < 0: raise ValueError('share price must be positive') except ValueError, e: print("ValueError: '{}'".format(e)) print("Please try entering it again...") except KeyboardInterrupt: sys.exit("\n<terminated by user>") except: exc_value = sys.exc_info()[1] exc_class = exc_value.__class__.__name__ print("{} exception: '{}'".format(exc_class, exc_value)) sys.exit("<fatal error encountered>") else: break # no exceptions occurred, terminate loop print("Share price entered: {}".format(x))
샘플 사용법 :
> python numeric_input.py How much is 1 share in that company? abc ValueError: 'could not convert string to float: abc' Please try entering it again... How much is 1 share in that company? -1 ValueError: 'share price must be positive' Please try entering it again... How much is 1 share in that company? 9 Share price entered: 9.0 > python numeric_input.py How much is 1 share in that company? 9.2 Share price entered: 9.2
-
==============================
6.
import re string1 = "0.5" string2 = "0.5a" string3 = "a0.5" string4 = "a0.5a" p = re.compile(r'\d+(\.\d+)?$') if p.match(string1): print(string1 + " float or int") else: print(string1 + " not float or int") if p.match(string2): print(string2 + " float or int") else: print(string2 + " not float or int") if p.match(string3): print(string3 + " float or int") else: print(string3 + " not float or int") if p.match(string4): print(string4 + " float or int") else: print(string4 + " not float or int") output: 0.5 float or int 0.5a not float or int a0.5 not float or int a0.5a not float or int
-
==============================
7.
s = '12.32' if s.replace('.', '').replace('-', '').isdigit(): print(float(s))
이것은 음수 float에도 적용됩니다.
from https://stackoverflow.com/questions/4138202/using-isdigit-for-floats by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬으로 MTP USB 장치에 접근하는 법 (0) | 2018.11.22 |
---|---|
[PYTHON] matplotlib로 numpy datetime64 플롯 (0) | 2018.11.22 |
[PYTHON] 파이썬에서 객체에 대한 모든 참조를 찾습니다. (0) | 2018.11.22 |
[PYTHON] Python Math - TypeError : 'NoneType'객체는 subscriptable이 아닙니다. (0) | 2018.11.22 |
[PYTHON] 파이썬에서 생성자와 for 루프 (0) | 2018.11.22 |