בתרגיל “מי דגנים בריאים?” איך התמודדתם עם העובדה שהדירוג הוא float והכותרת של הדירוג היא מחרוזת טקסט - כאשר ממירים ל-float כדי לבדוק איזה דירוג הכי גבוה?
אפשר אומנם להתחיל ישר מהשני (אינדקס 1 ולדלג על הראשון באינדקס 0), אבל תיכנות טוב צריך להביא בחשבון את כל האפשרויות. מה אם מוצר אחד לא קיבל דירוג, או שהיה נכתב שאין נתונים? במקרה כזה המרה ל-float תגרור שגיאה וסיום התוכנית.
ניסיתי שימוש בפונקציות:
isdecimal, isnumeric
אך זה מחזיר שקר בגלל הנקודה שבמספר העשרוני.
בתחילה חשבתי לבדוק אם המחרוזת לא כוללת אותיות ולהמיר לאינטג’ר. אבל זה חותך את הנקודה, ולכן במקרה ששני דגנים עם דירוג הכי גבוה נבדלים בעשירית הנקודה, לא אוכל לדעת מי באמת ראשון.
ניסיתי להשתמש בפונקציה replace ולהחליף את הנקודה במחרוזת ריקה. להפתעתי התשובה ל-isdecimal היתה תמיד שקר. בסוף בדקתי רק שהמחרוזת לא מכילה אותיות (isalpha), כלומר שללתי מילים.
מה אתם עשיתם?
Yam
אם החלפת נקודה במחרוזת ריקה ואז בדקת isdecimal זה דווקא אמור להיות סבבה.
יכול להיות שנפלת בחלק אחר שם
ha.amear
קראתי בגוגל שרק בציון מספר ההחלפות 1 זה עובד: replace(".", “”, 1)
תיקנתי.
Yam
עובד גם ללא ציון מספר ההחלפות, אלא אם מישהו באמת ניסה להתחכם והכניס משהו כמו 1.1.1.1
devorack
עבד לי סבבה עם ‘1’, אבל יש לי בעיה עם השורה הראשונה והאחרונה (גם בתרגיל במחברת 2 וגם במחברת 3), לא בגלל ההחלפה, אלא בגלל שאני קוראת לתאים שלא נמצאים שם. פתרתי ע’י התעלמות מהשורה הראשונה והאחרונה (ביצוע ההמרה מ 1 עד -1 במקום מ 0 עד -0)
השאלה: האם זה פתרון לגיטימי, או שעדיף תנאי שבודק אותן? (זה לא כ’כ קשה לייצר תנאי כזה, ואולי כדאי - אם חלה טעות באחת השורות ומספר האיברים בכל שורה שונה?)