Bagaimana Anda memeriksa apakah string hanya berisi angka?
Saya sudah mencobanya di sini. Saya ingin melihat cara paling sederhana untuk mencapai ini.
import string
def main():
isbn = input("Enter your 10 digit ISBN number: ")
if len(isbn) == 10 and string.digits == True:
print ("Works")
else:
print("Error, 10 digit number was not inputted and/or letters were inputted.")
main()
if __name__ == "__main__":
main()
input("Press enter to exit: ")
False
karenastring.digits == True
selalu dievaluasi menjadiFalse
.Jawaban:
Anda ingin menggunakan
isdigit
metode padastr
objek Anda :Dari
isdigit
dokumentasi :sumber
isdigit
, tetapi memunculkanValueError
jika dilewatkan keint()
.Gunakan
str.isdigit
:sumber
try: assert str(int(foo)) == foo; except (AssertionError,ValueError): #handle
dan rasanya jelek sebagai dosa. Terima kasih!Gunakan fungsi string isdigit :
sumber
Anda juga dapat menggunakan regex,
mis .: -1) kata = "3487954"
mis: -2) word = "3487.954"
mis: -3) word = "3487.954 328"
Seperti yang Anda lihat semua 3 misalnya berarti bahwa tidak hanya ada di string Anda. Jadi, Anda dapat mengikuti solusi yang diberikan bersama mereka.
sumber
re.match('^[0-9\.]*$',word)
gagal untuk mengapung.if(bool(re.search(r'\d', word)))
bekerja dengan baik.Bagaimana dengan angka float , angka negatif , dll. Semua contoh sebelumnya akan salah.
Sampai sekarang saya mendapatkan sesuatu seperti ini, tetapi saya pikir itu bisa menjadi jauh lebih baik:
akan mengembalikan true hanya jika ada satu atau tidak ada '.' dalam deretan digit.
akan kembali salah
sumber
Seperti yang ditunjukkan dalam komentar ini. Bagaimana Anda memeriksa dalam python apakah string hanya berisi angka? yang
isdigit()
metode ini tidak benar-benar akurat untuk kasus penggunaan ini, karena kembali Benar untuk beberapa karakter digit seperti:Jika ini perlu dihindari, fungsi sederhana berikut memeriksa, apakah semua karakter dalam string adalah angka antara "0" dan "9":
Digunakan dalam contoh dari pertanyaan:
sumber
all(ch in string.digits for ch in s)
.Anda dapat menggunakan try catch block di sini:
sumber
except ValueError:
int("1_000")
misalnya, tidak menyebabkan kesalahan.Karena setiap kali saya menghadapi masalah dengan cek adalah karena str dapat Kadang-kadang tidak, dan jika str bisa Tidak, hanya menggunakan str.isdigit () tidak cukup karena Anda akan mendapatkan kesalahan
dan kemudian Anda harus terlebih dahulu memvalidasi str adalah Tidak atau tidak. Untuk menghindari cabang multi-jika, cara yang jelas untuk melakukan ini adalah:
Semoga ini bisa membantu orang-orang memiliki masalah yang sama seperti saya.
sumber
Ada 2 metode yang dapat saya pikirkan untuk memeriksa apakah sebuah string memiliki semua digit tidak
Metode 1 (Menggunakan fungsi isdigit () built-in python): -
Metode 2 (Melakukan Penanganan Eksepsi di atas tali): -
Output dari kode di atas adalah:
sumber
Anda dapat menggunakan metode str.isdigit () atau metode str.isnumeric ()
sumber