פוסט
input(): קבלת טקסט מהמשתמש
איך input() קורא שורה מהמשתמש ב-Python: ההנחיה, למה התוצאה תמיד str, המרה עם int() ו-float(), שגיאת ValueError על קלט לא תקין, ו-EOFError כשאין קלט בכלל.
print() כותבת למסך. input() עושה את ההפך: מציגה הנחיה אופציונלית, מחכה שהמשתמש יקליד שורה וילחץ Enter, ומחזירה את מה שהוקלד. זו הדרך הפשוטה ביותר לגרום לסקריפט להיות אינטראקטיבי.
כל דוגמה כאן הורצה עם Python 3.13. ההתנהגות נבדקה מול התיעוד הרשמי של input().
הקריאה הבסיסית
name = input("What is your name? ")
print(f"Hello, {name}!")
הטקסט בסוגריים הוא ההנחיה. היא נכתבת למסך בלי ירידת שורה, כך שהסמן מחכה מיד אחריה. לפי התיעוד, השורה נקראת, “מומרת למחרוזת (תוך הסרת ירידת השורה בסוף)”, ומוחזרת.
אם מקלידים Ada, המסך מציג:
What is your name? Ada
Hello, Ada!
ה-Ada אחרי ההנחיה הוא מה שהקלדתם. התוכנית לא מדפיסה אותו.
התוצאה תמיד str
גם כשהמשתמש מקליד ספרות, input() מחזירה טקסט:
age = input("How old are you? ")
print(type(age))
אם מקלידים 36, זה מדפיס:
<class 'str'>
לכן age + 1 זורק TypeError. צריך להמיר את הטקסט קודם:
age = input("How old are you? ")
years = int(age) + 1
print(f"Next year: {years}")
למספרים עם נקודה עשרונית משתמשים ב-float(). פונקציות ההמרה מוסברות בפוסט על המרת טיפוסים.
הרווחים נשמרים
input() מסירה רק את ירידת השורה בסוף. הרווחים נשארים:
print(repr(input("Anything: ")))
אם מקלידים spaced ולוחצים Enter, הפלט הוא:
' spaced '
repr() מציגה את הגרשיים, כך שרואים את הרווחים. כדי להסיר רווחים משני הקצוות, משתמשים ב-strip(), מתודת המחרוזות מהפוסט על מחרוזות.
טעות נפוצה: קלט לא תקין
המשתמש יכול להקליד כל דבר. אם מקלידים thirty, int(age) עוצר את התוכנית עם ה-ValueError מהפוסט על המרת טיפוסים. בודקים את הקלט לפני ההמרה, או תופסים את השגיאה עם try ו-except (פוסט על חריגות). לעיתים בדיקה מהירה עם מתודת מחרוזת מספיקה:
text = input("How old? ")
print(text.isdigit())
אם מקלידים 36, זה מדפיס True. isdigit() מקבלת רק ספרות, ולכן -5 ו-3.5 מחזירים False.
כשאין קלט
כשזרם הקלט נגמר, input() זורקת שגיאה במקום להחזיר מחרוזת ריקה. זה קורה כשסקריפט רץ בלי טרמינל מחובר, למשל בתוך pipeline או מקובץ:
name = input("What is your name? ")
EOFError: EOF when reading a line
לפי התיעוד: “כשמגיעים ל-EOF, מועלה EOFError”. שורה ריקה (לחיצה על Enter בלי להקליד) שונה: היא מחזירה "", והתוכנית ממשיכה לרוץ.
טעויות נפוצות
- שכחה של רווח בסוף ההנחיה.
input("Name?")מציב את הסמן מיד אחרי סימן השאלה. מוסיפים רווח בסוף ההנחיה אם רוצים מרווח.
מה הלאה
בפוסט הבא: הטיפוס date, לימים בלוח השנה.