python כמה שאלות :) - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

python כמה שאלות :)


Zufp333

Recommended Posts

1. לאחרונה התחלתי ללמוד את השפה ואני מאוד נהנה הבעיה היחידה היא שהמקורות באנגלית מעט מסובכים ומכילים מושגים שאינני מכיר והמקורות בעברית מסורבלים, חסרי תוכן ולא עקביים כלכך. אשמח אם תוכלו אולי להמליץ לי על מקור אפילו באנגלית שיעשה לי קצת סדר (אני מכיר את המדריך הראשי באתר הראשי אגב). תודה :) 2. בלי קשר, לגבי INPUT מהמשתמש. אם אני רוצה להגביל את הקלט מהמשתמש לרק אותיות או רק מספרים ולענות בPRINT הכנס רק מספרים/או הכנס רק אותיות. באיזו דרך אני עושה את זה? איזו פונקציה או הגדרה אני משתמש כדי שכאילו אם האני רוצה שהINPUT יהיה רק סטרינג אז כשמכניסים INT נגיד או כל מספר זה לא יתקבל. תודה מראש :) מצטער אם הייתי קצת לא מובן

קישור לתוכן
שתף באתרים אחרים

לגבי 2:

ל-string יש כל מיני מתודות בשם isdigit (שבודקת אם כל התווים במחרוזת הם ספרות), isalpha (שבודקת אם כל התווים הם אותיות), isalnum (שבודקת אם כל התווים הם רק ספרות ואותיות) ואחרות. יש דוגמאות כאן:

http://www.tutorialspoint.com/python/string_isalpha.htm

http://www.tutorialspoint.com/python/string_isdigit.htm

קישור לתוכן
שתף באתרים אחרים

נגיד ככה?


if not input_string.isalpha():
print "only letters"

מלבד זאת, תמיד ניתן לעבור איטרטיבית על כל המחרוזת שקיבלת ולבדוק תו תו. עושים את זה באמצעות לולאת for:


for ch in input_string:
# do something on ch

למה הכוונה ב"הפונקציה לא עובדת"? תרשום כאן את השגיאה, יכול להיות שאתה משתמש בה באופן לא נכון.

קישור לתוכן
שתף באתרים אחרים

תודה! אבל משום מה הפונקציה לא עובדת לי ונותנת שגיאה, וגם איך אני מכניס את זה בקוד של אם אחת מהאותיות שהוכנסו באינפוט היא מספר אז פריט "רק אותיות".

אז תרשום פה את הקוד שכתבת ואת השגיאה שקיבלת.

קישור לתוכן
שתף באתרים אחרים

תודה רבה! הצלחתי עם הISALPHA, אבל לגבי הדרך השנייה של לבדוק תו תו של DAGLAS לא הבנתי בדיוק איך אני כותב את הקוד, האם CH מוגדר כבר בפייתון בתור תו? או שעלי להגדיר מה זה תו? ואיך? חח.. תודה מראש!

קישור לתוכן
שתף באתרים אחרים

אם הבנתי אותך נכון range מחזיר איטרטור שכל קריאה גדל ב-1.

סתם לרשום:

range(0,10)

יהיה חסר משמעות לרוב.

צריך לשים אותו בלולאה וכל איטרציה הוא מתקדם, לדוגמא:


for i in range(0,10)
print(i)

(איך מיישרים קוד לשמאל?)

קישור לתוכן
שתף באתרים אחרים

עד גרסה 3, הפונקציה range הייתה תמיד מחזירה רשימה. החסרון הוא שאם אתה רוצה לעשות לולאה מאוד מאוד גדולה - לדוגמה, לולאה שרצה מ-0 עד 1000000000 אז זה היה יוצר לך רשימה בגודל הזה, שסתם תופסת הרבה מאוד . כשמדפיסים אותה, כל איברי הרשימה מודפסים.

בגרסה 3 הפונקציה מחזירה אובייקט שמתנהג כמו רשימה, אבל לא באמת מכיל את כל התוכן שלה, ולכן הוא הרבה יותר חסכוני. כשמדפיסים את האובייקט הזה אז הוא לא מדפיס את כל איברי הרשימה, אלא רק את הפרמטרים שהועברו לפונקציה כשהיא נוצרה. פונקציה כזו הייתה קיימת גם לפני גרסה 3, וקראו לה אז xrange (בגרסה 3 כבר אין xrange כי range עושה מה ש-xrange עשתה).

אם אתה בכל זאת רוצה את הרשימה, אז אתה יכול להפעיל את הפונקציה list על תוצאה של range ולקבל את הרשימה.

קישור לתוכן
שתף באתרים אחרים

עוד שאלה! (סליחה על הדאבל). מדוע כשאני משתמש ב-MAP על פונקציה (נגיד עם RANGE) כדי לקבל את התוצאה של הפונקציה על כל משתנה אני מקבל בPRINT:

<map object at 0x00000000028562E8>

במקום את התוצאה? תודה!

ובלי קשר אשמח אם מישהו יוכל להסביר לי את הפונקציה REDUCE כי לא בדיוק הצלחתי להבין אותה במקורות מידע.. אולי כאן מישהו יוכל לעזור :)

קישור לתוכן
שתף באתרים אחרים

בדיוק אותו הסבר כמו range - הפונקציה map לא מחזירה רשימה, היא מחזירה אובייקט שמייצג את הרשימה הזו.

אתה יכול לעבור על האובייקט הזה בלולאה (כמו על range) ואתה יכול להמיר אותה לרשימה באמצעות list.

הפונקציה reduce לקוחת רשימה ו"מכווצת" אותה לאיבר אחד (לדוגמה ע"י חיבור כל האיברים). בכל מקרה בפייתון 3 כבר לא נהוג להשתמש בה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...