def is_palindrome(word):
"""
A palindrome word is one that can be read the same way from both ends.
"""
# Remove the difference of capitalization
word = word.lower()
# Remove the spaces (to match things like: "Race car")
word = word.replace(" ", "")
# Check if the word is a palindrome
for i in range(len(word) // 2):
j = len(word) - i - 1
if word[i] != word[j]:
return False
return True
# Test examples
assert is_palindrome("radar")
assert is_palindrome("level")
assert is_palindrome("madam")
assert is_palindrome("توت")
assert is_palindrome("خوخ")
assert is_palindrome("Race car")
assert is_palindrome("حصان ناصح")
assert not is_palindrome("python")
تطبيقات
الكلمة المتناظرة
في هذا المثال نوضح استعمال مؤشرين على نفس النص لمعرفة ما إذا كانت الكلمة متناظرة:
- المؤئر الأول بإصبعك الأيمن:
i
يبدأ من أول حرف وينتهي عند المنتصف - المؤئر الثاني بإصبعك الأيسر:
j
يبدأ من آخر حرف وينتهي عند المنتصف
بدل الحلقة، وكان لنا أن نكتب باختصار: word == word[::-1]
وهي تعني أن النص متناظر إذا كان مساوياً لنفسه بالمقلوب.
عد الكلمات
هذا مثال لاستخراج الكلمات (من غير تكرار) من قاموس من العبارات (ثلاثة عبارات). هذه العملية تستعمل كثيرًا في تحليل النصوص إذ نريد أن نعرف جميع الكلمات الواردة في مجموعة من النصوص، ولا نريد الكلمات المعهودة جدًّا (هنا نسميها stop_words
)، كما أننا نستعمل .lower()
في التعبير الناتج حتى لا يفرق بين الحروف في حالتيها الإنجليزية:
stop_words = {'is', 'and', 'the', 'be', 'not'}
documents = {
'Python': "python is great and Python is easy",
'Java': "Java is verbose and java is popular",
'JavaScript': "JavaScript is for the web and javascript is everywhere"
}
word_counts = dict()
for doc in documents.values():
doc = doc.lower()
words = doc.split()
for w in words:
if w not in stop_words:
word_counts[w] = word_counts.get(w, 0) + 1
for w, count in word_counts.items():
print(f"{w}: {count}")
python: 2
great: 1
easy: 1
java: 2
verbose: 1
popular: 1
javascript: 2
for: 1
web: 1
everywhere: 1
ترجمة أفعال
نكتب برنامج يقرأ سطرًا يفعله بعملية حسابية على عوامل محددة. فهو كلغة برمجة بسيطة.
def parse_command(cmd):
"""
Parse a command and return the result of the operation.
Example:
>>> parse_command("+ 5 10 2")
17
>>> parse_command("* 5 10 2")
100
>>> parse_command("max 5 10 2")
10
"""
operator, *operands = cmd.split(" ")
match operator:
case "+":
total = 0
for item in operands:
total += float(item)
return total
case "*":
total = 1
for item in operands:
total *= float(item)
return total
case "max":
max_value = float(operands[0])
for item in operands[1:]:
f = float(item)
if f > max_value:
max_value = f
return max_value
case _:
raise ValueError(f"Unknown operator: {operator}")
assert parse_command("+ 5 10 2") == 17
assert parse_command("* 5 10 2") == 100
assert parse_command("max 5 10 2") == 10
تطبيقات النصوص كثيرة جدًّا في الواقع، لكن نكتفي بهذا هنا، ولعلك تراجع مصادر مختصة بالتحليل النصي لتعلم المزيد.
تلوين الخارج
from colorama import Fore, Back, Style
# Print different color text with different background
print(f"{Fore.RED}This text is red!{Style.RESET_ALL}")
print(f"{Back.GREEN}This has a green background{Style.RESET_ALL}")
print(f"{Fore.YELLOW}{Back.BLUE}This is yellow text on a blue background{Style.RESET_ALL}")
# Print with bold and italic styles
print(f"{Style.BRIGHT}This is bright text{Style.RESET_ALL}")
print(f"{Style.DIM}This is dimmed text{Style.RESET_ALL}")
# Reset all styles at the end
print(f"{Style.RESET_ALL}This is back to default style")