Input pengguna menerima str dan int (python)

Saya baru mengenal pemrograman dan mencoba membuat input pengguna menerima bilangan bulat dan string. Saya telah mencoba pengkodean berikut.. tetapi tidak yakin di mana kesalahan saya. Ada saran?

    noAdults = input("Please enter the number of adults:")
    while noAdults.isalpha():
        print("Number must be valid and >= 0")
    if noAdults.isdigit() and noAdults < 0:
        print("Error")
        noAdults = input("Please enter the number of adults:")

ValueError: literal tidak valid untuk int() dengan basis 10:

Saya kira ada ValueError karena saya telah menggunakan variabel noAdults dengan isalpha dan membuat kesalahan karena dalam int?


person Meg    schedule 06.05.2014    source sumber
comment
Kode saat ini tidak akan memeriksa lagi noAdults baru jika ada huruf di dalamnya.   -  person Leigh    schedule 06.05.2014


Jawaban (2)


Itu melemparkan pengecualian sebelum Anda menangani kasus input string yang buruk, itu gagal pada baris pertama. Anda dapat memeriksa isalpha() sebelum mencoba int(), atau Anda dapat menangkap pengecualian ValueError.

Untuk memperluas solusi chepner, dengan beberapa baris cetak tambahan untuk menunjukkan kepada Anda apa yang sedang terjadi:

while True:
    noAdults = input("Please enter the number of adults:")
    try:
        noAdults = int(noAdults)
    except ValueError:
        print("Not a valid number")
        continue
    if noAdults >= 0:
        break
    else:
        print("Not greater than 0")

print(noAdults)

Ini adalah versi yang berfungsi penuh di Python 3.

person Leigh    schedule 06.05.2014
comment
Saya mencoba memeriksa isalpha() terlebih dahulu sebelum melakukan int.. Saya mendapatkan is alpha untuk mengembalikan pesan kesalahan tetapi saya tidak dapat mengembalikan int.. masih mengembalikan kesalahan. Saya telah memperbarui kode saya. - person Meg; 06.05.2014
comment
Anda perlu mengonversinya menjadi int seperti pada kode chepner. - person Leigh; 06.05.2014
comment
Aku tidak memahami maksudmu. Apakah Anda berbicara tentang metode coba? tidak ada orang dewasa = int (tidak ada orang dewasa) - person Meg; 06.05.2014
comment
Ya, Anda tidak mengubahnya menjadi angka. - person Leigh; 06.05.2014
comment
Terima kasih. Ini berfungsi dan melakukan semua yang saya inginkan. Namun, saya tidak yakin saya diperbolehkan menggunakan break. Saya akan mengerjakannya. Terima kasih lagi!! - person Meg; 06.05.2014

Anda perlu memverifikasi bahwa string input adalah bilangan bulat yang valid sebelum Anda dapat memeriksa apakah string tersebut non-negatif

while True:        
    noAdults = input("Please enter the number of adults:")
    try:
        noAdults = int(noAdults)
    except ValueError:
        print("Not a valid number")
        continue
    if noAdults >= 0:
        break
    else:
        print("Number must be >= 0")
person chepner    schedule 06.05.2014
comment
Ini berhasil.. Namun tidak memberikan pesan prompt nomor harus valid.. saat memasukkan nomor baru. Saya mencoba menambahkannya, tetapi saya sangat bingung. - person Meg; 06.05.2014
comment
Saya belum pindah ke Python 3, jadi saya masih terbiasa menggunakan fungsi print daripada pernyataan print. - person chepner; 06.05.2014