Mengapa x
dan y
string bukan ints dalam kode di bawah ini?
(Catatan: menggunakan Python 2.x. raw_input()
Dalam Python 3.x digunakan input()
. raw_input()
Diubah namanya menjadi input()
Python 3.x)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
python
python-3.x
python-2.7
input
int
smci
sumber
sumber
Jawaban:
TLDR
input
fungsi, tetapi fungsi Python 2input
tidak (baca bagian selanjutnya untuk memahami implikasinya).input
adalahraw_input
fungsinya.Python 2.x
Ada dua fungsi untuk mendapatkan input pengguna, dipanggil
input
danraw_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,Data
5 + 17
dievaluasi dan hasilnya adalah22
. Ketika mengevaluasi ekspresi5 + 17
, itu mendeteksi bahwa Anda menambahkan dua angka dan hasilnya juga akan dariint
tipe yang sama . Jadi, konversi jenis dilakukan secara gratis dan22
dikembalikan sebagai hasilinput
dan disimpan dalamdata
variabel. Anda dapat menganggapnyainput
sebagai yangraw_input
dikomposisi denganeval
panggilan.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.Python 3.x
Python 3.x's
input
dan Python 2.x'sraw_input
serupa danraw_input
tidak tersedia di Python 3.x.Larutan
Untuk menjawab pertanyaan Anda, karena Python 3.x tidak mengevaluasi dan mengubah tipe data, Anda harus secara eksplisit mengonversi ke
int
s, denganint
, seperti iniAnda dapat menerima nomor dari basis mana pun dan mengonversinya langsung ke basis-10 dengan
int
fungsi, seperti iniParameter 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
.Untuk nilai-nilai yang dapat memiliki komponen fraksional, tipe akan
float
lebih daripadaint
:Terlepas dari itu, program Anda dapat diubah sedikit, seperti ini
Anda dapat menyingkirkan
play
variabel dengan menggunakanbreak
danwhile True
.sumber
eval
akan berfungsi, tetapi jangan lakukan itu kecuali Anda memiliki alasan mendesak.ast.literal_eval
untuk itu. Itu tidak memiliki masalah keamananeval
.int(input()
... di bagian atas? Python 2 mendekati akhir kehidupannya dan info python 3 terlalu dikubur IMODalam Python 3.x,
raw_input
diubah namanya menjadiinput
dan Python 2.xinput
dihapus.Ini berarti, sama seperti
raw_input
,input
di Python 3.x selalu mengembalikan objek string.Untuk memperbaiki masalah, Anda perlu secara eksplisit membuat input tersebut menjadi bilangan bulat dengan memasukkannya ke dalam
int
:sumber
Untuk beberapa integer dalam satu baris,
map
mungkin lebih baik.Jika nomornya sudah diketahui, (seperti 2 bilangan bulat), Anda dapat menggunakan
sumber
input()
(Python 3) danraw_input()
(Python 2) selalu mengembalikan string. Konversi hasilnya menjadi integer secara eksplisit denganint()
.sumber
Beberapa pertanyaan memerlukan input untuk beberapa bilangan bulat pada satu baris. Cara terbaik adalah dengan memasukkan seluruh string angka satu baris dan kemudian membaginya menjadi bilangan bulat. Ini adalah versi Python 3:
Juga pemahaman daftar dapat digunakan
Dan untuk mengkonversi semua input dari string ke int kita lakukan hal berikut
harus mencetak elemen daftar dalam garis lurus.
sumber
Konversikan ke bilangan bulat:
Demikian pula untuk nomor floating point:
sumber
for for akan menjalankan 'n' beberapa kali. 'n' yang kedua adalah panjang array. pernyataan terakhir memetakan bilangan bulat ke daftar dan mengambil input dalam bentuk yang dipisahkan ruang. Anda juga dapat mengembalikan array di akhir for for loop.
sumber
Saya mengalami masalah dalam mengambil input integer sambil menyelesaikan masalah pada CodeChef , di mana dua integer - dipisahkan oleh spasi - harus dibaca dari satu baris.
Meskipun
int(input())
cukup untuk satu integer, saya tidak menemukan cara langsung untuk memasukkan dua integer. Saya mencoba ini:Sekarang saya menggunakan num1 dan num2 sebagai bilangan bulat. Semoga ini membantu.
sumber
i
dihancurkan ketikafor
loop keluar?@hosch250
Ketika loop keluar, nilai variabel indeks (di sini,i
) tetap. Saya mencoba bagian ini, dan itu berfungsi dengan benar.num1, num2 = map(int, input().split())
jika Anda tahu berapa banyak bilangan bulat yang akan Anda temui ataunums = list(map(int, input().split()))
jika tidak.sumber
Sementara dalam contoh Anda,
int(input(...))
lakukan trik dalam hal apa pun,python-future
itubuiltins.input
patut dipertimbangkan karena memastikan kode Anda berfungsi untuk Python 2 dan 3 dan menonaktifkan perilaku default Python2 untukinput
mencoba menjadi "pintar" tentang tipe data input (builtins.input
pada dasarnya hanya berperilaku sepertiraw_input
).sumber