Bagaimana cara menentukan apakah bilangan bulat yang diberikan adalah antara dua bilangan bulat lainnya (misalnya lebih besar dari / sama dengan 10000
dan kurang dari / sama dengan 30000
)?
Saya menggunakan 2.3 IDLE dan apa yang saya coba sejauh ini tidak berhasil:
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Jawaban:
sumber
if number in range(10000, 30001)
seperti yang disarankan oleh solusi lain? Selain itu, apakah lebih cepat atau lebih lambat saat menggunakan,set
bukanrange
?number
lebih dulu dibandingkan dengan10000
. Jika kurang dari10000
ekspresi langsung hubung singkat dan perbandingan kedua tidak diperiksa. KompleksitasnyaO(1)
.in range(0, n)
sebagai gantinya menghasilkan seluruh urutan angka dan kemudian beralih melaluinya. KompleksitasnyaO(n)
. Kompleksitasnyain set(range(0, n))
masihO(n)
karena membangun satu set memiliki kompleksitas waktuO(n)
ics.uci.edu/ ~ patis> python -m timeit '10000 <= 10 <= 30000'
> python -m timeit '10 in range(10000, 30001)'
> python -m timeit '10 in set(range(10000, 30001))'
sumber
range
(atauxrange
dalam python2) mengembalikan generator sehingga Anda tidak dapat berulang kali mengujinya.4 in range(1,4)
adalah False. Jadi lebih baik gunakan1 >= r <= 4
karena menghindari kemungkinan kesalahan oleh pendatang baru1.5 in r
memberiFalse
, bahkan dalam 3.4. Jawaban ini hanya baik untuk bilangan bulat.1 <= r <= 4
if a <= x <= b
...) (2.) tidak bekerja untukfloat
tipe (3) .) tes jangkauan tidak termasuk ... begitu banyak pengembang dapat memperkenalkan bug karena mereka mengharapkan jangkauan inklusifOperator Anda salah. Seharusnya
if number >= 10000 and number <= 30000:
. Selain itu, Python memiliki singkatan untuk hal semacam iniif 10000 <= number <= 30000:
,.sumber
Cuplikan kode Anda,
sebenarnya memeriksa apakah angkanya lebih besar dari 10000 dan 30000.
Dengan asumsi Anda ingin memeriksa bahwa angka tersebut berada dalam kisaran 10000 - 30000, Anda dapat menggunakan perbandingan interval Python:
Fitur Python ini dijelaskan lebih lanjut dalam dokumentasi Python .
sumber
sumber
Masalah dengan perbandingan adalah bahwa mereka bisa sulit untuk di-debug ketika Anda meletakkan di
>=
mana seharusnya ada<=
Python memungkinkan Anda menulis apa yang Anda maksud dengan kata-kata
Di Python3, Anda harus menggunakan
range
bukanxrange
.sunting: Orang-orang tampaknya lebih peduli dengan tanda microbench dan bagaimana operasi chaining yang keren. Jawaban saya adalah tentang program defensif (kurang permukaan serangan untuk bug).
Sebagai hasil dari klaim di komentar, saya telah menambahkan patokan mikro di sini untuk Python3.5.2
Jika Anda khawatir tentang kinerja, Anda bisa menghitung rentang sekali
sumber
range(10000, 30001)
di Python3. Itu tidak membuat daftarxrange
di Python2, ataurange
Python3 memiliki tes keanggotaan. Cobalah sendiri jika Anda tidak percaya.<=
hanya lebih efisien karena tidak membuat objek jangkauan. Keduanya sama seperti O (1). Intinya adalah OP itu mencoba untuk melakukannya dengan cara Anda dan berakhir dengan bug . Kode cepat yang salah lebih buruk.Tentukan kisaran antara angka:
Kemudian gunakan:
sumber
range
tidak menghitung nilai terakhir 10 dalam kasus Anda.range(1,11)
benar, jika Anda perlu membandingkan antara 1 dan 10Ada dua cara untuk membandingkan tiga bilangan bulat dan memeriksa apakah b adalah antara a dan c :
dan
Yang pertama terlihat lebih mudah dibaca, tetapi yang kedua berjalan lebih cepat .
Mari kita bandingkan menggunakan dis.dis :
dan menggunakan timeit :
juga, Anda dapat menggunakan rentang , seperti yang disarankan sebelumnya, namun jauh lebih lambat.
sumber
Misalkan ada 3 bilangan bulat non-negatif:
a
,b
, danc
. Secara matematis, jika kita ingin menentukan apakahc
ada di antaraa
danb
, secara inklusif, seseorang dapat menggunakan rumus ini:atau dengan Python:
sumber
Anda ingin output mencetak pernyataan yang diberikan jika dan hanya jika jumlahnya turun antara 10.000 dan 30.000.
Kode seharusnya;
sumber
Syaratnya harus,
alasan untuk menggunakan
number == 10000
adalah bahwa jika nilai angka adalah 50.000 dan jika kami menggunakannumber >= 10000
kondisi akan berlalu, yang bukan yang Anda inginkan.sumber