TLDR
- Python 3 tidak mengevaluasi data yang diterima dengan
input
fungsi, tetapi fungsi Python 2 input
tidak (baca bagian selanjutnya untuk memahami implikasinya).
- Setara dengan Python 2 dengan Python 3
input
adalah raw_input
fungsinya.
Python 2.x
Ada dua fungsi untuk mendapatkan input pengguna, dipanggil input
dan raw_input
. Perbedaan di antara mereka adalah, raw_input
tidak mengevaluasi data dan mengembalikan apa adanya, dalam bentuk string. Tetapi, input
akan mengevaluasi apa pun yang Anda masukkan dan hasil evaluasi akan dikembalikan. Sebagai contoh,
>>> 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'>)
Data 5 + 17
dievaluasi dan hasilnya adalah 22
. Ketika mengevaluasi ekspresi 5 + 17
, itu mendeteksi bahwa Anda menambahkan dua angka dan hasilnya juga akan dari int
tipe yang sama . Jadi, konversi jenis dilakukan secara gratis dan 22
dikembalikan sebagai hasil input
dan disimpan dalam data
variabel. Anda dapat menganggapnya input
sebagai yang raw_input
dikomposisi dengan eval
panggilan.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Catatan: Anda harus berhati-hati saat menggunakan input
Python 2.x. Saya menjelaskan mengapa orang harus berhati-hati saat menggunakannya, dalam jawaban ini .
Tapi, raw_input
jangan mengevaluasi input dan kembali apa adanya, sebagai string.
>>> 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's input
dan Python 2.x's raw_input
serupa dan raw_input
tidak tersedia di 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'>)
Larutan
Untuk menjawab pertanyaan Anda, karena Python 3.x tidak mengevaluasi dan mengubah tipe data, Anda harus secara eksplisit mengonversi ke int
s, dengan int
, seperti ini
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Anda dapat menerima nomor dari basis mana pun dan mengonversinya langsung ke basis-10 dengan int
fungsi, seperti ini
>>> 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
Parameter kedua memberi tahu apa basis dari angka-angka yang dimasukkan dan kemudian secara internal memahami dan mengubahnya. Jika data yang dimasukkan salah maka akan melempar 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'
Untuk nilai-nilai yang dapat memiliki komponen fraksional, tipe akan float
lebih daripada int
:
x = float(input("Enter a number:"))
Terlepas dari itu, program Anda dapat diubah sedikit, seperti ini
while True:
...
...
if input("Play again? ") == "no":
break
Anda dapat menyingkirkan play
variabel dengan menggunakan break
dan while True
.