Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - פייתון: איך מגדירים משתנה שאמור לאחסן מילה בגדול משתנה?

Anonymous - 05/12/2017 - 18:19
נושא ההודעה: פייתון: איך מגדירים משתנה שאמור לאחסן מילה בגדול משתנה?
אני צריך להגדיר משתנה שיכיל מילה - אוסף של תווים בעברית - בגודל משתנה.
צריך גם לעשות פעולות על המילה הזו: להוסיף/להוריד תווים וכו
אני מבין ש: Strings Are Immutable , כלומר זה לא מתאים לנתון משתנה
גם List לא נראה מתאים - יותר מתאים לאוסף של מילים.
אשמח לעזרה!
Anonymous - 05/12/2017 - 18:28
נושא ההודעה:
זה ש-Strings Are Immutable רק אומר שכשאתה עושה פעולה נוצר String חדש לא שהמשתנה חייב להצביע על אותו String לעולם ועד.
moshe2go - 05/12/2017 - 18:52
נושא ההודעה:
ציטוט:
זה ש-Strings Are Immutable רק אומר שכשאתה עושה פעולה נוצר String חדש לא שהמשתנה חייב להצביע על אותו String לעולם ועד

ואני יכול להוסיף לו אותיות בסוף המילה או בהתחלה, למחוק או להחליף?
mksoft - 05/12/2017 - 19:19
נושא ההודעה:
כשאתה עושה את זה, נוצרת מחרוזת חדשה, כמובן שאין בעיה להציב אותה שוב במשתנה המקורי:

קוד:
>>> s = 'hello'
>>> id(s)
139960134669232
>>> s += 'world'
>>> id(s)
139960134673072
>>> print(s)
helloworld


כמו שאתה רואה, ה-id שונה (מחרוזת אחרת), אך עדיין באותו משתנה.
moshe2go - 05/12/2017 - 19:42
נושא ההודעה:
הבנתי וזה יכול להתאים. ואני גם יכול לפנות לתוו מסוים במילה עם: s[i] ואולי ניתן למחוק תוו עם הפקודה הזו - איך?
אבל במחשבה שניה אפשר ליצור מערך חד מימדי > range של תווים ועליו לבצע מה שרוצים. זה בעצם אותו דבר...
תודה
moshe2go - 06/12/2017 - 15:47
נושא ההודעה:
ציטוט:
כשאתה עושה את זה, נוצרת מחרוזת חדשה, כמובן שאין בעיה להציב אותה שוב במשתנה המקורי:

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

s = s - s[i]

mksoft - 06/12/2017 - 16:04
נושא ההודעה:
string תומך ב-slice:
קוד:
a = a[:-1]


כדאי לקרוא בתיעוד:
https://docs.python.org/3.6/tutorial/introduction.html#strings
moshe2go - 06/12/2017 - 17:59
נושא ההודעה:
קוד:
a = a[:-1]

זה עובד
תודה
mksoft - 07/12/2017 - 09:45
נושא ההודעה:
כמובן שזה עובד, אך חשוב יותר להבין איך זה עובד Smile
moshe2go - 07/12/2017 - 12:07
נושא ההודעה:
ציטוט:
כמובן שזה עובד, אך חשוב יותר להבין איך זה עובד Smile

אצלי שום דבר לא מובן מאליו.. בטח שלא בעניני תוכנה שחדשים לי Wink

אם הבנתי נכון אז לפי התיעוד ולפי הסברכם כאן: מכיוון ש Strings Are Immutable כלומר לא ניתן לשינוי, אז צריך ליצור string חדש. וכמובן להשתמש ב syntax המתאים...
דרך אגב: זה רק בפייתון ככה שלא ניתן לשנות string? מענין מדוע?
mksoft - 07/12/2017 - 13:47
נושא ההודעה:
ה-slice מטפל בהחזרת מחרוזץ ללא התו האחרון, נתתי לך קישור לתיעוד שמדבר על זה.

יש גם שפות אחרות בהן מחרוזות אינן ניתנות לשינוי (לדוגמא: כדי שיהיה ניתן להשתמש בהן ב-hashmap, כלומר dict), ביניהן Go, Erlang/Elixir, ג'אווה, C#, ג'אווהסקריפט.
moshe2go - 07/12/2017 - 14:27
נושא ההודעה:
ציטוט:
ה-slice מטפל בהחזרת מחרוזץ ללא התו האחרון, נתתי לך קישור לתיעוד שמדבר על זה.

את זה הבנתי וכבר בצעתי "ברית מילה" למילה

מחרוזות: חשבתי שיש איזו מגבלה טכנית אבל ההסבר שלך הוא בכיוון שימוש של ישומים אחרים

תודה
mksoft - 07/12/2017 - 14:54
נושא ההודעה:
לקריאה נוספת בנושא:
https://en.wikipedia.org/wiki/Immutable_object#Language-specific_details
Anonymous - 07/12/2017 - 16:37
נושא ההודעה:
כל העניין הזה של Immutable עשה לי כואב ראש.
בשביל מה זה טוב? performance ? מה זה החארטא הזה?

אני התייאשתי מפיתון :
קוד:
% python
Python 3.6.3 (default, Oct 24 2017, 14:48:20)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> id('bla')
140282109201800
>>> a='bla' ; id(a)
140282109201800
>>> b='bla' ; id(b)
140282109201800
>>> a='bla1';b=a;
>>> id(a)
140282109201912
>>> id('bla')
140282109201800
>>> import gc
>>> gc.collect()
0
>>> id('bla')
140282109262960
>>>
>>>

כל הזמנים הם GMT + 2 שעות