2013-10-18 32 views
11

Có phương pháp nào tôi có thể sử dụng để kiểm tra xem số raw_input có phải là số nguyên không?Làm cách nào để kiểm tra xem liệu đầu vào thô có phải là số nguyên trong python 2.7 không?

tôi thấy phương pháp này sau khi nghiên cứu trong các trang web:

print isinstance(raw_input("number: ")), int) 

nhưng khi tôi chạy nó và đầu vào 4 ví dụ, tôi nhận được FALSE. Tôi là người mới với python, mọi trợ giúp sẽ được đánh giá cao.

Trả lời

15

isinstance(raw_input("number: ")), int) luôn mang lại False vì kết quả trả về đối tượng chuỗi là raw_input.

Sử dụng try: int(...) ... except ValueError:

number = raw_input("number: ") 
try: 
    int(number) 
except ValueError: 
    print False 
else: 
    print True 

hoặc sử dụng str.isdigit:

print raw_input("number: ").isdigit() 

LƯU Ý thứ hai mang lại cho False-4 vì nó chứa ký tự không chữ số. Sử dụng thứ hai nếu bạn chỉ muốn chữ số.

CẬP NHẬT Như J.F. Sebastian đã chỉ ra, str.isdigit phụ thuộc vào miền địa phương (Windows). Nó có thể trả lại True thậm chí int() sẽ tăng ValueError cho đầu vào.

>>> import locale 
>>> locale.getpreferredencoding() 
'cp1252' 
>>> '\xb2'.isdigit() # SUPERSCRIPT TWO 
False 
>>> locale.setlocale(locale.LC_ALL, 'Danish') 
'Danish_Denmark.1252' 
>>> '\xb2'.isdigit() 
True 
>>> int('\xb2') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '\xb2' 
+0

Hoặc, nếu họ muốn chuyển biến thành một số, 'số = int (số)' – SethMMorton

+1

'str.isdigit()' có thể phụ thuộc vào miền địa phương (vì Microsoft) tức là, nó có thể trả về 'True' ngay cả' int() 'sẽ tăng ValueError cho đầu vào. – jfs

+0

@ J.F.Sebastian, 'raw_input()' trả về một đối tượng 'str', không phải là đối tượng' unicode'. Vì vậy, tôi nghĩ 'str.isdigit' sẽ hoạt động như mong đợi. Ông có thể cho tôi một ví dụ. – falsetru

7

Bạn có thể làm theo cách này:

try: 
    val = int(raw_input("number: ")) 
except ValueError: 
    # not an integer 
1

đây là giải pháp của tôi

`x =raw_input('Enter a number or a word: ') 
y = x.isdigit() 
if (y == False): 
    for i in range(len(x)): 
     print('I'), 
else: 
    for i in range(int(x)): 
     print('I'), 

'

+0

Vui lòng xem xét chỉnh sửa bài đăng của bạn để giải thích cách hoạt động này như mã chỉ câu trả lời không phải lúc nào cũng làm rõ cho OP cách giải quyết vấn đề của họ. – SuperBiasedMan

0
def checker(): 
    inputt = raw_input("how many u want to check?") 
    try: 
     return int(inputt) 
    except ValueError: 
     print "Error!, pls enter int!" 
     return checker() 
Các vấn đề liên quan