שאלה- פייתון

  • פותח הנושא et28
  • פורסם בתאריך

et28

New member
שאלה- פייתון

לומד פייתון עכשיו, גרסה 2.7.

שאלה בלימודים: צור תכנית המקבלת 2 מחרוזות מהמשתמש ובודקת אם לפחות אחת מהאותיות במחרוזת הינה אות גדולה ( L P Q וכו'...)

עכשיו, אני עשיתי את התוכנית הזו עם לולאת while, הכל טוב ויפה ועובד...
אבל... אני רוצה לאתגר את עצמי, וליצור את התוכנית הזו עם הכלים שלמדנו והם: סוגי משתנים (בינתיים int, string ורשימות), מתודות.

עכשיו, מה שחשבתי זה לקלוט מהמשתמש מחרוזת, למיין אותה עם ()sort. ואז לראות האם התו הראשון הוא אות גדולה... השאלה היא איך אני הופך מחרוזת לרשימה? ניסיתי לחפש בגוגל אבל לא מצאתי תשובה. אני מניח שזה אפשרי כי בסופו של דבר מחרוזת היא סוג של רשימה (=אני יכול לפנות לכל תו בנפרד, כמו ברשימה, ברורים לי ההבדלים בין רשימה למחרוזת)

אז, איך אני הופל מחרוזת לרשימה?

תודה מראש! :)
 

פרסאוס

New member
sorted will convert a string to an ordered list

test="Hello world"
t1=sorted(test) # [' ', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
if t1[1]>='A' and t1[1]<='Z': .....
 

BravoMan

Active member
רק שים לב לבעיה ברעיון שלך שפרסאוס חשף:

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

et28

New member
נכון אבל את העיקר הבנתי

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

BravoMan

Active member
סבבה, השאלה היא מה התרגיל בדיוק, אחרי הכל אני מניח

שאתה רוצה פתרון שהוא גם נכון, ולא רק מאתגר.
&nbsp
אם תנאי התרגיל הם שהמחרוזות מכילות רק אותיות, שימוש ב-sort הוא פתרון נכון.
אם תנאי התרגיל הם שהמחרוזת יכולה להכיל כל תו חוקי, הפתרון שלך הוא לא פתרון עובד, ולכן לא יזכה אותך בציון, למרות שהשתמשת רק במה שלמדת.
&nbsp
אבל, אם באמת למדתם את כל המתודות שעובדות על מחרוזות, אכן יש דרך לפתור את התרגיל בלי לולאה תוך שימוש במתודה אחת ותנאי אחד.
למעשה, זה מאוד קל - המתודה שאתה צריך היא lower ולא sort.
&nbsp
אני אשאיר לך לחשוב איזה תנאי צריך כדי לממש פתרון זה.
 

et28

New member
הארה נכונה, ולקחתי את האתגר שלך

התרגיל מדבר על מחרוזת, ולוקח את ההארה שלך. הרי מחרוזת יכולה להיות גם מספרים.
בכל מקרה, לקחתי את האתגר שלך, ולכן כתבתי את הקוד הבא:
קוד:
lst = raw_input("Enter a text: ")
if lst.lower != lst:
    print "You have a capital letter!"
else:
    print "Your text is all lower case!"
אני מניח שזו הייתה כוונתך, אבל זה לא עובד על כל סוגי המחרוזות- כי אם אני מקיש מספרים, הוא נותן לי תוצאה שיש אות גדולה. כשאני רוצה להדפיס את שתי הרשימות, lst, lst.lower, אז ה- lst.lower נותן לי שזה עובד רק על מחרוזות....
 

BravoMan

Active member
אתה כמעת שם, אבל ההשוואה שלך לא נכונה:

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

אבל בתנאי שלך לא ביצעת קריאה למתודה lower.
קריאה למתודה מצריכה סוגריים.

ב-Python, כל מתודה היא אובייקט. ולכן ניתן להשוות אותה לאובייקט אחר כמו מחרוזת.
וזה מה שעשית - השוות את המתודה lower (שהיא אובייקט שמכיל קוד) למחרוזת lst (שכמובן מכילה טקסט) ולכן קיבלת תוצאה לא נכונה.

אתה יכול לראות למה התכוונתי אם תריץ את שתי השורות הללו ותסתכל על ההבדל בהדפסה:
קוד:
print lst.lower
print lst.lower()
שים לב ש-print היא מיוחדת ב-Python 2.7 כי היא לא פונקציה אלא חלק מובנה בשפה ולכן לא מצריכה סוגריים.
זה תוקן ב-Python 3 שם הקוד שלך לא היה חוקי.
 
למעלה