מילונים (Dictionaries) וקבוצות (Sets) הם מבני נתונים שימושיים בפייתון:
- מילונים (Dictionaries):
- מבנה נתונים שמחזיק זוגות של מפתח וערך (Key-Value).
- מאפשר אחסון נתונים בצורה מאורגנת, עם גישה מהירה לפי מפתח.
- קבוצות (Sets):
- מבנה נתונים שמחזיק רק ערכים ייחודיים.
- לא מסודר (אין סדר לערכים) ומאפשר פעולות מתמטיות כמו איחוד, חיתוך והפרש.
דוגמת קוד
# Creating and accessing a dictionary
quiz_data = {
"Question 1": "What is 2 + 2?",
"Question 2": "What is the capital of France?",
"Question 3": "What is 5 * 6?"
}
print("Dictionary Example:")
print("Question 1:", quiz_data["Question 1"]) # Accessing by key
quiz_data["Question 4"] = "What is the square root of 16?" # Adding a new key-value pair
print("After adding a question:", quiz_data)
del quiz_data["Question 2"] # Removing a key-value pair
print("After deleting a question:", quiz_data)
# Creating and modifying a set
player_set = {"Alice", "Bob", "Charlie"} # Creating a set
print("\nSet Example:")
print("Original set:", player_set)
player_set.add("David") # Adding an element
print("After adding a player:", player_set)
player_set.remove("Charlie") # Removing an element
print("After removing a player:", player_set)
הסבר על הקוד
מילונים:
- השורה
quiz_data = {...}
יוצרת מילון שמכיל זוגות מפתח-ערך.- המפתחות (Keys) הם שאלות, והערכים (Values) הם התשובות.
- גישה לפריט במילון נעשית לפי המפתח, לדוגמה
quiz_data["Question 1"]
ולא על פי מקום סידורי כמו שראינו ברשימות. - הוספת פריט חדש מתבצעת על ידי הצבת מפתח חדש עם ערך, לדוגמה
quiz_data["Question 4"] = "..."
. - הסרת פריט מתבצעת עם
del
, לדוגמהdel quiz_data["Question 2"]
.
קבוצות:
- השורה
player_set = {...}
יוצרת קבוצה עם ערכים ייחודיים. - הוספת פריט מתבצעת עם
add
, לדוגמהplayer_set.add("David")
. - הסרת פריט מתבצעת עם
remove
, לדוגמהplayer_set.remove("Charlie")
.
תרגילים
תרגיל 1:
צרו מילון שמכיל שלושה מפתחות: שמות של מדינות, ושלושה ערכים: ערי הבירה שלהן. הדפיסו את ערך הבירה של אחת המדינות.
תרגיל 2:
כתבו תוכנית שמוסיפה מפתח וערך חדש למילון קיים ומדפיסה את המילון המעודכן.
תרגיל 3:
צרו קבוצה עם שמות של שלושה אנשים. הוסיפו שם חדש והסירו שם קיים, ואז הדפיסו את הקבוצה המעודכנת.
תרגיל 4:
בדקו אם שם מסוים נמצא בקבוצה על ידי שימוש ב-in
.
תרגיל 5:
אתגר: צרו שתי קבוצות עם שמות שונים של אנשים ובצעו פעולת איחוד (union
) וחיתוך (intersection
) ביניהן.
הפרויקט הגדול: משחק הטריוויה
בשלב הזה נשתמש במילון כדי לשמור את השאלות והתשובות של המשחק ובקבוצה כדי לעקוב אחרי השחקנים ששיחקו.
# Global data structures
questions = {
"What is 2 + 2?": 4,
"What is the capital of France?": "Paris",
"What is 5 * 6?": 30
}
players = set() # Set to track player names
# Function to welcome the player and handle admin or regular user flow
def welcome():
"""Welcome the player and check if they are admin."""
print("Welcome to the Quiz Game!")
name = input("What is your name? ")
players.add(name) # Add the player to the set of players
if name.lower() == "admin":
print("Hello, Admin! You can manage the quiz.")
manage_quiz()
else:
print(f"Hello, {name}, let's start the game!")
play_quiz(name)
# Function to add or remove questions
def manage_quiz():
"""Allow the admin to add or remove questions."""
global questions # Use the global dictionary
while True:
action = input("Do you want to 'add', 'remove', or 'done'? ").lower()
if action == "done":
break
elif action == "add":
new_question = input("Enter a new question: ")
new_answer = input("Enter the correct answer: ")
questions[new_question] = new_answer # Add to the dictionary
print("Question added!")
elif action == "remove":
question_to_remove = input("Enter the question to remove: ")
if question_to_remove in questions:
del questions[question_to_remove] # Remove from the dictionary
print("Question removed!")
else:
print("Question not found.")
else:
print("Invalid option. Try again.")
print("\nUpdated questions:", questions)
play_now = input("Do you want to play the game now? (yes/no): ").lower()
if play_now == "yes":
play_quiz("Admin")
# Function to play the quiz
def play_quiz(name="Player"):
"""Play the quiz game using the global questions dictionary."""
global questions # Use the global dictionary
score = 0 # Initialize score
# Loop through the questions
for question, correct_answer in questions.items():
print("\n" + question)
user_answer = input("Your answer: ")
if str(user_answer).lower() == str(correct_answer).lower():
print("Correct!")
score += 1
else:
print("Wrong! The correct answer was:", correct_answer)
print("\nGame over!")
print(name, "your final score is:", score)
print("Players who have played:", players)
# Start the program
welcome()
שיפורים שנוספו:
- שימוש במילון לשאלות:
- השאלות והתשובות נשמרות במבנה מילון, מה שמאפשר גישה ישירה ומהירה לפי השאלה.
- שימוש בקבוצה לעקוב אחרי שחקנים:
- שמות השחקנים נשמרים בקבוצה
players
, שמוודאת שאין שמות כפולים.
- שמות השחקנים נשמרים בקבוצה
- ניהול שאלות על ידי המנהל:
- המנהל יכול להוסיף ולהסיר שאלות בקלות דרך המילון.
- משחק עם כל השחקנים:
- רשימת השאלות המעודכנת נשמרת ומשמשת את כל השחקנים, כולל המנהל.