מחרוזות הן מבנה נתונים המשמש לאחסון טקסט בפייתון.
בשיעור זה נלמד:
- שיטות של מחרוזות (String Methods):
פונקציות שימושיות לעבודה עם טקסטים, כמו חיתוך, חיפוש, ושינוי תווים. - עיצוב מחרוזות (String Formatting):
איך לשלב נתונים שונים בטקסט בקלות. - ביטויים רגולריים (Regular Expressions):
כלי חזק לחיפוש והחלפה של דפוסים בטקסט.
דוגמת קוד
# String methods
text = " Hello, Python World! "
print("Original text:", text)
cleaned_text = text.strip() # Remove whitespace from both ends
print("After strip:", cleaned_text)
uppercase_text = cleaned_text.upper() # Convert to uppercase
print("Uppercase:", uppercase_text)
contains_python = "Python" in cleaned_text # Check if 'Python' is in the string
print("Contains 'Python':", contains_python)
# String formatting
name = "Alice"
age = 25
formatted_text = f"My name is {name} and I am {age} years old." # Using f-strings
print("\nFormatted text:", formatted_text)
# Regular expressions
import re
pattern = r"\d+" # Regular expression to find digits
string = "My phone number is 12345."
match = re.search(pattern, string)
if match:
print("\nFound digits:", match.group())
הסבר על הקוד
שיטות מחרוזות (String Methods):
strip
:- השיטה
strip
מסירה רווחים מיותרים בתחילת וסוף המחרוזת. - לדוגמה:
" Hello, Python World! "
הופך ל-"Hello, Python World!"
.
- השיטה
upper
:- השיטה
upper
הופכת את כל האותיות במחרוזת לאותיות גדולות.
- השיטה
in
:- אופרטור
in
בודק אם מחרוזת מסוימת קיימת בתוך מחרוזת אחרת.
- אופרטור
עיצוב מחרוזות (String Formatting):
f-strings
מאפשרים שילוב של משתנים בתוך מחרוזת בצורה פשוטה ונוחה.- לדוגמה:
f"My name is {name}"
משלב את הערך של המשתנהname
במחרוזת.
- לדוגמה:
ביטויים רגולריים (Regular Expressions):
re.search
:- מחפש דפוס מסוים במחרוזת.
- בדוגמה שלנו,
r"\d+"
מחפש רצף של ספרות (\d+
).
match.group
:- מחזיר את התוצאה הראשונה שמצאה התאמה.
Regular Expressions הוא נושא קצת מורכב וכדאי לחקור וללמוד עליו בנפרד.
תרגילים
תרגיל 1:
צרו מחרוזת עם רווחים בתחילתה ובסופה. השתמשו בשיטה strip
להסרת הרווחים והדפיסו את התוצאה.
תרגיל 2:
כתבו תוכנית שמשנה מחרוזת לאותיות גדולות עם upper
ולאחר מכן מחזירה אותה לאותיות קטנות עם lower
.
תרגיל 3:
כתבו תוכנית שבודקת אם מילה מסוימת קיימת בתוך מחרוזת. לדוגמה, בדקו אם המילה "Python"
קיימת במחרוזת "I love Python programming."
.
תרגיל 4:
צרו מחרוזת עם שם וגיל. השתמשו ב-f-strings
כדי להדפיס משפט כמו: "שמי [שם] ואני בן [גיל].".
תרגיל 5:
אתגר: כתבו תוכנית שמבקשת מהמשתמש להכניס מספר טלפון ומוודאת שהוא מכיל רק ספרות בעזרת ביטויים רגולריים.
הפרויקט הגדול: משחק הטריוויה
כעת נשתמש בשיטות מחרוזות ובביטויים רגולריים בפרויקט כדי להבטיח קלט תקין מהמשתמש ולוודא שהתשובות בפורמט הנכון.
# 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? ").strip() # Clean up input with strip
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 validate answers using regular expressions
def validate_answer(answer, correct_answer):
"""Check if the answer matches the correct format."""
import re
if isinstance(correct_answer, int):
pattern = r"^\d+$" # Regular expression for integers
else:
pattern = r"^\w+$" # Regular expression for words
if re.fullmatch(pattern, answer):
return str(answer).lower() == str(correct_answer).lower()
return False
# 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().strip()
if action == "done":
break
elif action == "add":
new_question = input("Enter a new question: ").strip()
new_answer = input("Enter the correct answer: ").strip()
questions[new_question] = new_answer # Add to the dictionary
print("Question added!")
elif action == "remove":
question_to_remove = input("Enter the question to remove: ").strip()
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().strip()
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: ").strip() # Clean up user input
if validate_answer(user_answer, correct_answer):
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()
שיפורים שנוספו לפרויקט:
- שימוש ב-
strip
:- כל הקלטים מהמשתמש מנוקים מרווחים מיותרים בתחילה ובסוף.
- אימות קלט באמצעות ביטויים רגולריים:
- הפונקציה
validate_answer
בודקת אם התשובה מתאימה לסוג הנכון (מספר או מילה).
- הפונקציה
- שימוש בשיטות מחרוזות:
- כל התשובות מומירות לאותיות קטנות עם
lower
לצורך השוואה.
- כל התשובות מומירות לאותיות קטנות עם