TLD
- Python 3 không đánh giá dữ liệu nhận được bằng
inputhàm, nhưng inputhà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
inputlà raw_inputhàm.
Python 2.x
Có hai chức năng để có được đầu vào của người dùng, được gọi inputvà raw_input. Sự khác biệt giữa chúng là, raw_inputkhông đánh giá dữ liệu và trả về như hiện tại, ở dạng chuỗi. Nhưng, inputsẽ đá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 intloạ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 inputvà được lưu trữ trong databiến. Bạn có thể nghĩ inputnhư là raw_inputsáng tác với một evalcuộ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 inputtrong 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_inputkhô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 inputvà Python 2.x raw_inputlà tương tự nhau và raw_inputkhô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 ints, 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 intchứ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ẽ floatthay 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 playbiến bằng cách sử dụng breakvà while True.