TLD
- Python 3 không đánh giá dữ liệu nhận được bằng
input
hàm, nhưng input
hàm của Python 2 thì có (đọc phần tiếp theo để hiểu hàm ý).
- Hàm Python tương đương với Python 3
input
là raw_input
hàm.
Python 2.x
Có hai chức năng để có được đầu vào của người dùng, được gọi input
và raw_input
. Sự khác biệt giữa chúng là, raw_input
không đánh giá dữ liệu và trả về như hiện tại, ở dạng chuỗi. Nhưng, input
sẽ đánh giá bất cứ điều gì bạn đã nhập và kết quả đánh giá sẽ được trả lại. Ví dụ,
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Dữ liệu 5 + 17
được đánh giá và kết quả là 22
. Khi nó đánh giá biểu thức 5 + 17
, nó phát hiện ra rằng bạn đang thêm hai số và do đó kết quả cũng sẽ cùng int
loại. Vì vậy, việc chuyển đổi loại được thực hiện miễn phí và 22
được trả về là kết quả của input
và được lưu trữ trong data
biến. Bạn có thể nghĩ input
như là raw_input
sáng tác với một eval
cuộc gọi.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Lưu ý: bạn nên cẩn thận khi sử dụng input
trong Python 2.x. Tôi đã giải thích tại sao người ta nên cẩn thận khi sử dụng nó, trong câu trả lời này .
Nhưng, raw_input
không đánh giá đầu vào và trả về, như là một chuỗi.
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
Python 3.x
Python 3.x input
và Python 2.x raw_input
là tương tự nhau và raw_input
không có sẵn trong Python 3.x.
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)
Giải pháp
Để trả lời câu hỏi của bạn, vì Python 3.x không đánh giá và chuyển đổi loại dữ liệu, bạn phải chuyển đổi rõ ràng thành int
s, với int
, như thế này
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Bạn có thể chấp nhận số của bất kỳ cơ sở nào và chuyển đổi chúng trực tiếp thành cơ sở 10 với int
chức năng, như thế này
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
Tham số thứ hai cho biết đâu là cơ sở của các số được nhập và sau đó bên trong nó hiểu và chuyển đổi nó. Nếu dữ liệu nhập sai, nó sẽ ném a ValueError
.
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'
Đối với các giá trị có thể có thành phần phân số, loại sẽ float
thay vì int
:
x = float(input("Enter a number:"))
Ngoài ra, chương trình của bạn có thể được thay đổi một chút, như thế này
while True:
...
...
if input("Play again? ") == "no":
break
Bạn có thể thoát khỏi play
biến bằng cách sử dụng break
và while True
.