דגנים שלא "צפים" - איך יודעים שזה float?

בתרגיל “מי דגנים בריאים?” איך התמודדתם עם העובדה שהדירוג הוא float והכותרת של הדירוג היא מחרוזת טקסט - כאשר ממירים ל-float כדי לבדוק איזה דירוג הכי גבוה?
אפשר אומנם להתחיל ישר מהשני (אינדקס 1 ולדלג על הראשון באינדקס 0), אבל תיכנות טוב צריך להביא בחשבון את כל האפשרויות. מה אם מוצר אחד לא קיבל דירוג, או שהיה נכתב שאין נתונים? במקרה כזה המרה ל-float תגרור שגיאה וסיום התוכנית.

ניסיתי שימוש בפונקציות:
isdecimal, isnumeric

אך זה מחזיר שקר בגלל הנקודה שבמספר העשרוני.

בתחילה חשבתי לבדוק אם המחרוזת לא כוללת אותיות ולהמיר לאינטג’ר. אבל זה חותך את הנקודה, ולכן במקרה ששני דגנים עם דירוג הכי גבוה נבדלים בעשירית הנקודה, לא אוכל לדעת מי באמת ראשון.

ניסיתי להשתמש בפונקציה replace ולהחליף את הנקודה במחרוזת ריקה. להפתעתי התשובה ל-isdecimal היתה תמיד שקר. בסוף בדקתי רק שהמחרוזת לא מכילה אותיות (isalpha), כלומר שללתי מילים.
מה אתם עשיתם?

אם החלפת נקודה במחרוזת ריקה ואז בדקת isdecimal זה דווקא אמור להיות סבבה.
יכול להיות שנפלת בחלק אחר שם

קראתי בגוגל שרק בציון מספר ההחלפות 1 זה עובד: replace(".", “”, 1)
תיקנתי.

עובד גם ללא ציון מספר ההחלפות, אלא אם מישהו באמת ניסה להתחכם והכניס משהו כמו 1.1.1.1

עבד לי סבבה עם ‘1’, אבל יש לי בעיה עם השורה הראשונה והאחרונה (גם בתרגיל במחברת 2 וגם במחברת 3), לא בגלל ההחלפה, אלא בגלל שאני קוראת לתאים שלא נמצאים שם. פתרתי ע’י התעלמות מהשורה הראשונה והאחרונה (ביצוע ההמרה מ 1 עד -1 במקום מ 0 עד -0)

השאלה: האם זה פתרון לגיטימי, או שעדיף תנאי שבודק אותן? (זה לא כ’כ קשה לייצר תנאי כזה, ואולי כדאי - אם חלה טעות באחת השורות ומספר האיברים בכל שורה שונה?)

לייק 1

לגיטימי בעיניי, ועדיין תמיד כדאי לתרגל :slight_smile:

לייק 1