การป้อนข้อมูลของผู้ใช้ที่ยอมรับ str และ int (หลาม)

ฉันยังใหม่กับการเขียนโปรแกรมและพยายามทำให้อินพุตของผู้ใช้ยอมรับทั้งจำนวนเต็มและสตริง ฉันลองใช้โค้ดต่อไปนี้แล้ว .. แต่ไม่แน่ใจว่าฉันผิดตรงไหน มีข้อเสนอแนะอะไรบ้าง?

    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: ตัวอักษรไม่ถูกต้องสำหรับ int() ที่มีฐาน 10:

ฉันเดาว่ามี ValueError เนื่องจากฉันใช้ตัวแปร noAdults กับ isalpha และกำลังทำข้อผิดพลาดเพราะมันอยู่ใน int?


person Meg    schedule 06.05.2014    source แหล่งที่มา
comment
รหัสปัจจุบันนั้นจะไม่ตรวจสอบอีกครั้งสำหรับ noAdults ใหม่หากมีตัวอักษรอยู่   -  person Leigh    schedule 06.05.2014


คำตอบ (2)


มันกำลังส่งข้อยกเว้นก่อนที่คุณจะจัดการกับกรณีที่ไม่ถูกต้องของอินพุตสตริง มันล้มเหลวในบรรทัดแรก คุณสามารถตรวจสอบ isalpha() ก่อนที่จะพยายาม int() หรือคุณสามารถตรวจสอบข้อยกเว้น ValueError ได้

หากต้องการขยาย วิธีแก้ปัญหาของ chepner พร้อมพิมพ์บรรทัดเพิ่มเติมสองสามบรรทัดเพื่อแสดงให้คุณเห็นว่าเกิดอะไรขึ้น:

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)

นี่เป็นเวอร์ชันที่ทำงานได้อย่างสมบูรณ์ใน Python 3

person Leigh    schedule 06.05.2014
comment
ฉันพยายามตรวจสอบ isalpha() ก่อนทำ int.. ฉันได้รับ is alpha เพื่อส่งคืนข้อความแสดงข้อผิดพลาด แต่ฉันไม่สามารถรับ int เพื่อส่งคืนได้ .. ยังคงส่งคืนข้อผิดพลาด ฉันได้อัปเดตรหัสของฉันแล้ว - person Meg; 06.05.2014
comment
คุณต้องแปลงเป็น int เหมือนในโค้ดของเชพเนอร์ - person Leigh; 06.05.2014
comment
ฉันไม่เข้าใจว่าคุณหมายความว่าอย่างไร. คุณกำลังพูดถึงวิธีลองใช่ไหม? noAdults= int (ไม่มีผู้ใหญ่) - person Meg; 06.05.2014
comment
ใช่ คุณไม่ได้แปลงเป็นตัวเลข - person Leigh; 06.05.2014
comment
ขอบคุณ มันใช้งานได้และทำทุกอย่างที่ฉันต้องการ อย่างไรก็ตาม ไม่แน่ใจว่าฉันได้รับอนุญาตให้ใช้ตัวแบ่งได้ ฉันจะทำงานเกี่ยวกับมัน ขอขอบคุณอีกครั้ง!! - person Meg; 06.05.2014

คุณต้องตรวจสอบว่าสตริงอินพุตเป็นจำนวนเต็มที่ถูกต้องก่อนจึงจะตรวจสอบได้ว่าไม่เป็นค่าลบหรือไม่

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
สิ่งนี้ได้ผล .. อย่างไรก็ตาม มันไม่ได้ให้ข้อความแจ้งว่า number must be valid.. เมื่อป้อนหมายเลขใหม่ ฉันพยายามเพิ่มเข้าไปแต่ฉันสับสนมาก - person Meg; 06.05.2014
comment
ฉันยังไม่ได้เปลี่ยนไปใช้ Python 3 เลย ดังนั้นฉันจึงยังคงมีนิสัยชอบใช้ฟังก์ชัน print แทนคำสั่ง print - person chepner; 06.05.2014