קורס Python 3 שיעור תרגול מבני נתונים

בשביל להדפיס את כתובת ה IP לכל אחד מהשמות שאתה קורא מהמשתמש אפשר להעביר את רשימת התנאים לתוך הלולאה בדיוק אחרי הבדיקה אם computer_name ריק.

היי ינון,

קודם כל תודה על המענה :slight_smile:

עוד שאלה קטנה לגבי תרגיל 3 - אני רוצה לצרף את הקוד ואשמח לדעת למה התוכנית לא מדפיסה את ההודעת שגיאה?

ואם יש מקום ליעל את הקוד לפחות שורות

IP_address = {
    'home_IP': 'IP = 194.90.2.1',
    'work_IP': 'IP = 10.0.0.2',
    'router_IP': 'IP = 10.0.0.1',
    'mycar_IP': 'IP = 10.0.0.5'
}
while True:
    computer_name = input("Enter your computer name:")
    if computer_name == 'home' or 'router' or 'mycar' or 'work':
        if computer_name == 'home':
            print(f"{IP_address['home_IP']}")
        if computer_name == 'work':
            print(f"{IP_address['work_IP']}")
        if computer_name == 'router':
            print(f"{IP_address['router_IP']}")
        if computer_name == 'mycar':
            print(f"{IP_address['mycar_IP']}")
        while True:
            with open('hosts.txt', 'r', encoding='UTF-8') as f:
                for line in f:
                    if computer_name != line in f:
                        print("The name you entered isn't in the list")
            break

הי,

יכול להסביר מה תפקיד בלוק ה while בשורות האחרונות?

לגבי ייעול הקוד - שים לב שאתה משתמש ב if ואז מדפיס את הערך מהמילון לפי השם, אבל אפשר להיות יותר יצירתיים. אם השם במילון היה ממש home (במקום home_IP כמו שמופיע אצלך) וגם שאר השמות היו מתאימים למה שמשתמש כותב ב computer_name אז היית יכול לכתוב:

IP_address['home']

אבל יותר מזה, בגלל ש home זה ממש הערך שכתוב במשתנה computer_name היה מספיק לכתוב את השורה:

print(IP_address[computer_name])

הי,

תפקיד בלוק הwhile בשורות האחרונות זה לבדוק אם computer_name שווה לשורה מתוך קובץ הטקסט – hosts,
ואם לא (שזאת הכוונה) אז להדפיס הודעת שגיאה.

תודה רבה

עכשיו אני מבין! נדמה לי שבלבלת בין הדוגמה שנתתי לתוכן הקובץ לדבר האמיתי. הדוגמה שנתתי היא רק דבר אחד שאפשר לכתוב בתוך הקובץ hosts.txt, אבל השמות עצמם והכתובות עצמן יכולים להיות שונים. לכן לא הגיוני להגדיר את ה Hash שכתבת IP_address ולכתוב בתוכו את כל הפרטים מהדוגמה.

הקוד הבא יהיה מבנה הרבה יותר טוב עבור התרגיל:

while True:
    computer_name = input("Enter your computer name:")
    with open('hosts.txt', 'r', encoding='UTF-8') as f:
        for line in f:
          # check if "line" actually corresponds to the computer named "computer_name"
          # if yes - print its address
          # if not don't do anything

ואז צריך רק להשלים את הקוד עבור השורות שבהערה כדי לבדוק עבור כל שורה בקובץ אם היא מתאימה לשם המחשב שמשתמש הקליד.

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