شعار زيفيرنت

14 أفكار وموضوعات مثيرة لمشروع بايثون للمبتدئين

التاريخ:

تعد Python أداة لا غنى عنها لمحترفي علوم البيانات، حيث تلعب دورًا محوريًا في تحليل البيانات والتعلم الآلي والحوسبة العلمية. سواء كنت مبتدئًا أو ممارسًا ذا خبرة، فإن تعزيز مهاراتك في برمجة بايثون هو رحلة مستمرة. هذه المقالة هي بوابتك إلى 14 فكرة مثيرة لمشروعات بايثون، تم تصميم كل منها بعناية لتلبية احتياجات المتحمسين لعلم البيانات. توفر هذه المشاريع فرصة فريدة ليس فقط لتحسين مهاراتك في لغة بايثون ولكن أيضًا لإنشاء تطبيقات عملية يمكن تطبيقها في مساعيك القائمة على البيانات.

لذلك، دعونا نبدأ رحلة مشروع بايثون!

أفضل 14 مشروعًا صغيرًا لبايثون

الة حسابة

فكرة مشروع بايثون سهلة الاستخدام للمبتدئين هي إنشاء آلة حاسبة أساسية. يقوم هذا البرنامج بتنفيذ العمليات الحسابية الأساسية، مثل الجمع والطرح والضرب والقسمة. يمكنك تحسينه بشكل أكبر عن طريق إضافة ميزات مثل وظائف الذاكرة أو تتبع السجل. يعد إنشاء آلة حاسبة طريقة رائعة للتدرب على بناء الجملة الأساسي والعمليات الرياضية في لغة بايثون.

مشروع بايثون - آلة حاسبة
المصدر: مراجعة الكود في Stack Exchange

كود بيثون

def add(x, y): return x + y def subtract(x, y): return x - y def multiply(x, y): return x * y def divide(x, y): if y == 0: return "Cannot divide by zero" return x / y while True: print("Options:") print("Enter 'add' for addition") print("Enter 'subtract' for subtraction") print("Enter 'multiply' for multiplication") print("Enter 'divide' for division") print("Enter 'exit' to end the program") user_input = input(": ") if user_input == "exit": break if user_input in ("add", "subtract", "multiply", "divide"): num1 = float(input("Enter first number: ")) num2 = float(input("Enter second number: ")) if user_input == "add": print("Result: ", add(num1, num2)) elif user_input == "subtract": print("Result: ", subtract(num1, num2)) elif user_input == "multiply": print("Result: ", multiply(num1, num2)) elif user_input == "divide": print("Result: ", divide(num1, num2)) else: print("Invalid input")

عمل قائمة

عمل قائمة
المصدر: بيكتوشارت

يعد تطبيق قائمة المهام أداة مفيدة لتنظيم المهام. قم بإنشاء برنامج Python أساسي يسمح للمستخدمين بإضافة المهام وحذفها وعرضها. يساعد هذا المشروع البسيط المبتدئين على فهم تخزين البيانات ومعالجتها. ومع تقدمك، يمكنك تحسينه بميزات مثل تواريخ الاستحقاق والأولويات والمزيد، مما يجعله أداة قيمة لإدارة المهام الشخصية.

كود بيثون

# Define an empty list to store tasks
tasks = [] def add_task(task): tasks.append(task) print("Task added:", task) def delete_task(task): if task in tasks: tasks.remove(task) print("Task deleted:", task) else: print("Task not found") def view_tasks(): if not tasks: print("No tasks in the list") else: print("Tasks:") for index, task in enumerate(tasks, start=1): print(f"{index}. {task}") while True: print("Options:") print("Enter 'add' to add a task") print("Enter 'delete' to delete a task") print("Enter 'view' to view tasks") print("Enter 'exit' to end the program") user_input = input(": ") if user_input == "exit": break elif user_input == "add": task = input("Enter a task: ") add_task(task) elif user_input == "delete": task = input("Enter the task to delete: ") delete_task(task) elif user_input == "view": view_tasks() else: print("Invalid input")

خمن الرقم

تخمين مشروع رقم بايثون
المصدر: أدلة بايثون

"Guess the Number" هو مشروع بايثون كلاسيكي حيث يختار الكمبيوتر رقمًا عشوائيًا، ومهمة اللاعب هي تخمينه. يمكن للاعبين إدخال تخميناتهم، ويقدم البرنامج تلميحات، مما يشكل تحديًا تدريجيًا للعبة. إنه مشروع جذاب وتعليمي يعزز فهمك لتوليد الأرقام العشوائية وتفاعلات المستخدم.

كود بيثون

import random # Generate a random number between 1 and 100
secret_number = random.randint(1, 100)
attempts = 0 print("Welcome to the Guess the Number game!")
print("I'm thinking of a number between 1 and 100.") while True: try: guess = int(input("Your guess: ")) attempts += 1 if guess < secret_number: print("Try a higher number.") elif guess > secret_number: print("Try a lower number.") else: print(f"Congratulations! You've guessed the number in {attempts} attempts.") break except ValueError: print("Invalid input. Please enter a number between 1 and 100.") print("Thank you for playing!")

مكشطة الويب الأساسية

مكشطة الويب الأساسية
المصدر: متوسطة

قم بإنشاء مكشطة ويب أساسية في Python لاستخراج البيانات من مواقع الويب. يساعدك هذا المشروع على فهم مفاهيم تجريف الويب وطلبات HTTP. ابدأ بجلب المعلومات من صفحة ويب بسيطة وتقدم تدريجيًا إلى مهام التجريد الأكثر تعقيدًا. يقدم هذا المشروع رؤى قيمة حول الحصول على البيانات ومعالجتها باستخدام بايثون.

كود بيثون

import requests
from bs4 import BeautifulSoup # URL of the webpage you want to scrape
url = "https://example.com" # Send an HTTP GET request to the URL
response = requests.get(url) # Check if the request was successful (status code 200)
if response.status_code == 200: # Parse the HTML content of the page using BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') # Extract data from the webpage (for example, scraping all the links) links = [] for link in soup.find_all('a'): links.append(link.get('href')) # Print the scraped data (in this case, the links) for link in links: print(link)
else: print("Failed to fetch the webpage. Status code:", response.status_code)

كلمة عداد

كلمة عداد

عداد الكلمات هو مشروع بايثون بسيط حيث يمكنك إنشاء برنامج لحساب عدد الكلمات في النص. إنه تمرين ممتاز للمبتدئين، حيث يساعدهم على تعلم كيفية التعامل مع السلسلة وتحليل النص الأساسي. يمكنك توسيعه لاحقًا ليشمل عدد الأحرف أو الجمل أو الفقرات للحصول على أداة أكثر تنوعًا.

كود بيثون

def count_words(text): # Split the text into words using whitespace as a delimiter words = text.split() return len(words) # Get input text from the user
text = input("Enter some text: ") # Call the count_words function to count the words
word_count = count_words(text) # Display the word count
print(f"Word count: {word_count}")

لعبة الجلاد

لعبة الجلاد
المصدر: ألعاب الرياضيات الرائعة

لعبة الجلاد هي هواية كلاسيكية لتخمين الكلمات تم إحياءها في لغة بايثون. في هذا المشروع الجذاب، يحاول اللاعبون تخمين كلمة حرفًا بحرف. يمكن أن يتضمن البرنامج اختيارات متنوعة للكلمات وحتى نظام تسجيل، مما يجعله مشروعًا ترفيهيًا وتعليميًا للمبتدئين.

كود بيثون

import random # List of words to choose from
words = ["python", "hangman", "computer", "programming", "challenge"] # Function to choose a random word
def choose_word(): return random.choice(words) # Function to display the current state of the word with blanks
def display_word(word, guessed_letters): display = "" for letter in word: if letter in guessed_letters: display += letter else: display += "_" return display # Function to play Hangman
def play_hangman(): word_to_guess = choose_word() guessed_letters = [] attempts = 6 print("Welcome to Hangman!") while attempts > 0: print("nWord: " + display_word(word_to_guess, guessed_letters)) print("Attempts left:", attempts) guess = input("Guess a letter: ").lower() if len(guess) == 1 and guess.isalpha(): if guess in guessed_letters: print("You've already guessed that letter.") elif guess in word_to_guess: print("Good guess!") guessed_letters.append(guess) if set(word_to_guess).issubset(set(guessed_letters)): print("Congratulations! You've guessed the word:", word_to_guess) break else: print("Wrong guess!") guessed_letters.append(guess) attempts -= 1 else: print("Invalid input. Please enter a single letter.") if attempts == 0: print("You ran out of attempts. The word was:", word_to_guess) # Start the game
play_hangman()

منبه بسيط

مشروع بسيط للمنبه بيثون
المصدر: كود هنتر

يتضمن مشروع Simple Alarm Clock إنشاء تطبيق Python الذي يسمح للمستخدمين بضبط المنبهات، مع ميزات مثل خيارات التأجيل والإيقاف. إنه مشروع ممتاز للمبتدئين للتعمق في التعامل مع الوقت والتاريخ في بايثون. يمكن لهذه التجربة العملية أن تضع الأساس لتطبيقات أكثر تعقيدًا وتساعد المستخدمين على اكتساب مهارات البرمجة العملية.

كود بيثون

import time
import winsound # Function to set an alarm
def set_alarm(): alarm_time = input("Enter the alarm time (HH:MM): ") while True: current_time = time.strftime("%H:%M") if current_time == alarm_time: print("Wake up!") winsound.Beep(1000, 1000) # Beep for 1 second break # Function to snooze the alarm
def snooze_alarm(): snooze_time = 5 # Snooze for 5 minutes alarm_time = time.time() + snooze_time * 60 while time.time() < alarm_time: pass print("Snooze time is over. Wake up!") winsound.Beep(1000, 1000) # Beep for 1 second # Function to stop the alarm
def stop_alarm(): print("Alarm stopped") # Main loop for the alarm clock
while True: print("Options:") print("Enter '1' to set an alarm") print("Enter '2' to snooze the alarm") print("Enter '3' to stop the alarm") print("Enter '4' to exit") choice = input(": ") if choice == '1': set_alarm() elif choice == '2': snooze_alarm() elif choice == '3': stop_alarm() elif choice == '4': break else: print("Invalid input. Please enter a valid option.")

يقول الرول

المصدر: يوتيوب

مشروع Dice Roller هو مشروع ممتع من لغة بايثون يحاكي رمي النرد. يتيح توليد الأرقام العشوائية للمستخدمين رمي أنواع مختلفة من النرد، بدءًا من النرد القياسي ذي الجوانب الستة وحتى الأصناف الأكثر غرابة. إنها طريقة بسيطة ولكنها مسلية للتعمق في إمكانيات التوزيع العشوائي في Python وإنشاء تجربة تفاعلية لرمي النرد.

كود بيثون

import random def roll_dice(sides): return random.randint(1, sides) while True: print("Options:") print("Enter 'roll' to roll a dice") print("Enter 'exit' to end the program") user_input = input(": ") if user_input == "exit": break if user_input == "roll": sides = int(input("Enter the number of sides on the dice: ")) result = roll_dice(sides) print(f"You rolled a {sides}-sided dice and got: {result}") else: print("Invalid input. Please enter a valid option.")

مولد جنون ليبز

مولد Mad Libs - مشروع بايثون
المصدر: techwithic

The Mad Libs Generator هو مشروع بايثون إبداعي وممتع. فهو يطالب المستخدمين بإدخال أنواع مختلفة من الكلمات (الأسماء والأفعال والصفات) ثم يقوم بإنشاء قصص مسلية باستخدام كلماتهم. هذا المشروع ممتع وتمرين ممتاز في التعامل مع السلسلة وتفاعل المستخدم. إنها طريقة ممتعة لاستكشاف عالم برمجة بايثون.

كود بيثون

# Define a Mad Libs story template
mad_libs_template = "Once upon a time, in a {adjective} {place}, there lived a {animal}. It was a {adjective} and {color} {animal}. One day, the {animal} {verb} to the {place} and met a {adjective} {person}. They became fast friends and went on an adventure to {verb} the {noun}." # Create a dictionary to store user inputs
user_inputs = {} # Function to get user inputs
def get_user_input(prompt): value = input(prompt + ": ") return value # Replace placeholders in the story template with user inputs
def generate_mad_libs_story(template, inputs): story = template.format(**inputs) return story # Get user inputs for the Mad Libs
for placeholder in ["adjective", "place", "animal", "color", "verb", "person", "noun"]: user_inputs[placeholder] = get_user_input(f"Enter a {placeholder}") # Generate the Mad Libs story
mad_libs_story = generate_mad_libs_story(mad_libs_template, user_inputs) # Display the generated story
print("nHere's your Mad Libs story:")
print(mad_libs_story)

مولد كلمة السر

مشروع مولد كلمة المرور
المصدر: جيثب

يتضمن مشروع مولد كلمة المرور إنشاء برنامج Python الذي يقوم بإنشاء كلمات مرور قوية وآمنة بناءً على تفضيلات المستخدم. يمكن للمستخدمين تحديد معلمات مثل طول كلمة المرور وأنواع الأحرف، وسيقوم البرنامج بإخراج كلمة مرور قوية، مما يعزز الأمن السيبراني للحسابات عبر الإنترنت والبيانات الشخصية.

كود بيثون

import random
import string def generate_password(length, use_uppercase, use_digits, use_special_chars): characters = string.ascii_lowercase if use_uppercase: characters += string.ascii_uppercase if use_digits: characters += string.digits if use_special_chars: characters += string.punctuation if len(characters) == 0: print("Error: No character types selected. Please enable at least one option.") return None password = ''.join(random.choice(characters) for _ in range(length)) return password def main(): print("Password Generator") while True: length = int(input("Enter the password length: ")) use_uppercase = input("Include uppercase letters? (yes/no): ").lower() == "yes" use_digits = input("Include digits? (yes/no): ").lower() == "yes" use_special_chars = input("Include special characters? (yes/no): ").lower() == "yes" password = generate_password(length, use_uppercase, use_digits, use_special_chars) if password: print("Generated Password:", password) another = input("Generate another password? (yes/no): ").lower() if another != "yes": break if __name__ == "__main__": main()

محرر نص أساسي

محرر نص أساسي
المصدر: محرر النصوص الأساسي

محرر النصوص الأساسي هو تطبيق برمجي بسيط لإنشاء المستندات النصية العادية وتحريرها. فهو يوفر وظائف أساسية مثل الكتابة والنسخ والقص واللصق والتنسيق الأساسي. على الرغم من افتقاره إلى الميزات المتقدمة في معالجات النصوص، فهو خفيف الوزن وسريع الاستخدام ومناسب لمهام مثل تدوين الملاحظات أو كتابة التعليمات البرمجية. تشمل الأمثلة الشائعة برنامج Notepad (نظام Windows) وTextEdit (نظام التشغيل macOS)، مما يوفر بيئة سهلة الاستخدام لمعالجة النص بشكل بسيط.

كود بيثون

import tkinter as tk
from tkinter import filedialog def new_file(): text.delete(1.0, tk.END) def open_file(): file_path = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt")]) if file_path: with open(file_path, "r") as file: text.delete(1.0, tk.END) text.insert(tk.END, file.read()) def save_file(): file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt")]) if file_path: with open(file_path, "w") as file: file.write(text.get(1.0, tk.END)) # Create the main window
root = tk.Tk()
root.title("Basic Text Editor") # Create a menu
menu = tk.Menu(root)
root.config(menu=menu) file_menu = tk.Menu(menu)
menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New", command=new_file)
file_menu.add_command(label="Open", command=open_file)
file_menu.add_command(label="Save", command=save_file)
file_menu.add_separator()
file_menu.add_command(label="Exit", command=root.quit) # Create a text area
text = tk.Text(root, wrap=tk.WORD)
text.pack(expand=True, fill="both") # Start the GUI main loop
root.mainloop()

تطبيق الطقس المصغر

تطبيق الطقس المصغر

يعد تطبيق Mini Weather أداة مدمجة للحصول على تحديثات الطقس السريعة. يمكن للمستخدمين الوصول إلى الظروف والتنبؤات الحالية في واجهة موجزة. فهو يوفر معلومات أساسية مثل درجة الحرارة وهطول الأمطار وسرعة الرياح، مما يضمن بقاء المستخدمين على اطلاع أثناء التنقل. يعد هذا التطبيق خفيف الوزن مثاليًا لأولئك الذين يبحثون عن رؤى فورية للطقس دون فوضى.

كود بيثون

import requests def get_weather(city, api_key): base_url = "https://api.openweathermap.org/data/2.5/weather" params = { "q": city, "appid": api_key, "units": "metric" # Change to "imperial" for Fahrenheit } response = requests.get(base_url, params=params) if response.status_code == 200: weather_data = response.json() temperature = weather_data["main"]["temp"] description = weather_data["weather"][0]["description"] humidity = weather_data["main"]["humidity"] wind_speed = weather_data["wind"]["speed"] print(f"Weather in {city}:") print(f"Temperature: {temperature}°C") print(f"Description: {description}") print(f"Humidity: {humidity}%") print(f"Wind Speed: {wind_speed} m/s") else: print("Failed to fetch weather data. Please check your city name and API key.") def main(): print("Mini Weather App") city = input("Enter a city: ") api_key = input("Enter your OpenWeatherMap API key: ") get_weather(city, api_key) if __name__ == "__main__": main()

تطبيق الطلاء الأساسي

تطبيق الطلاء الأساسي: مشروع بايثون
المصدر: يوتيوب

تطبيق الطلاء الأساسي هو برنامج سهل الاستخدام يتيح للمستخدمين إنشاء الصور الرقمية وتحريرها باستخدام أدوات متنوعة مثل الفرش والألوان والأشكال. إنه مثالي للتصميم الجرافيكي البسيط والفن الرقمي، ويقدم ميزات الرسم والتلوين الأساسية ومعالجة الصور الأساسية. على الرغم من افتقاره إلى الميزات المتقدمة، إلا أنه يعد نقطة انطلاق رائعة للفنانين والمصممين المبتدئين.

كود بيثون

import tkinter as tk
from tkinter import colorchooser def start_paint(event): global prev_x, prev_y prev_x, prev_y = event.x, event.y def paint(event): x, y = event.x, event.y canvas.create_line((prev_x, prev_y, x, y), fill=current_color, width=brush_size, capstyle=tk.ROUND, smooth=tk.TRUE) prev_x, prev_y = x, y def choose_color(): global current_color color = colorchooser.askcolor()[1] if color: current_color = color def change_brush_size(new_size): global brush_size brush_size = new_size root = tk.Tk()
root.title("Basic Paint Application") current_color = "black"
brush_size = 2
prev_x, prev_y = None, None canvas = tk.Canvas(root, bg="white")
canvas.pack(fill=tk.BOTH, expand=True) canvas.bind("<Button-1>", start_paint)
canvas.bind("<B1-Motion>", paint) menu = tk.Menu(root)
root.config(menu=menu)
options_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Options", menu=options_menu)
options_menu.add_command(label="Choose Color", command=choose_color)
options_menu.add_command(label="Brush Size (1)", command=lambda: change_brush_size(1))
options_menu.add_command(label="Brush Size (3)", command=lambda: change_brush_size(3))
options_menu.add_command(label="Brush Size (5)", command=lambda: change_brush_size(5)) root.mainloop()

تطبيق الدردشة الأساسية

تطبيق الدردشة الأساسية
المصدر: كود بايثون

يتيح تطبيق الدردشة الأساسي التواصل النصي في الوقت الفعلي بين المستخدمين. يمكن للمستخدمين إرسال واستقبال الرسائل، وإنشاء محادثات فردية أو جماعية. تتضمن الميزات عادةً مؤشرات كتابة الرسائل وإيصالات القراءة وملفات تعريف المستخدمين. تحظى هذه التطبيقات بشعبية كبيرة في الاتصالات الشخصية والتجارية، حيث تعزز التبادل الفوري والمريح وغير المتزامن للمعلومات والأفكار.

كود خادم بايثون

import socket
import threading # Server configuration
HOST = '0.0.0.0' # Listen on all available network interfaces
PORT = 12345 # Create a socket for the server
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen() clients = [] def handle_client(client_socket): while True: try: message = client_socket.recv(1024).decode("utf-8") if not message: remove_client(client_socket) else: broadcast(message, client_socket) except Exception as e: print(f"An error occurred: {str(e)}") remove_client(client_socket) break def remove_client(client_socket): if client_socket in clients: clients.remove(client_socket) def broadcast(message, client_socket): for client in clients: if client != client_socket: try: client.send(message.encode("utf-8")) except Exception as e: remove_client(client) print(f"An error occurred: {str(e)}") def main(): print("Chat server is listening on port", PORT) while True: client_socket, addr = server_socket.accept() clients.append(client_socket) client_handler = threading.Thread(target=handle_client, args=(client_socket,)) client_handler.start() if __name__ == "__main__": main()

كود بايثون العميل

import socket
import threading # Client configuration
HOST = '127.0.0.1' # Server's IP address
PORT = 12345 # Create a socket for the client
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT)) def receive_messages(): while True: try: message = client_socket.recv(1024).decode("utf-8") print(message) except Exception as e: print(f"An error occurred: {str(e)}") client_socket.close() break def send_messages(): while True: message = input() client_socket.send(message.encode("utf-8")) def main(): print("Connected to the chat server.") receive_thread = threading.Thread(target=receive_messages) receive_thread.start() send_thread = threading.Thread(target=send_messages) send_thread.start() if __name__ == "__main__": main()

أهمية بايثون في علوم البيانات

تحتل لغة Python مكانة بارزة في مجال علم البيانات نظرًا لتعدد استخداماتها وكفاءتها ونظامها البيئي الشامل من المكتبات والأدوات المصممة لتحليل البيانات. وتكمن أهميتها في عدة جوانب رئيسية:

  • سهولة التعلم والاستخدام: بناء جملة بايثون البسيط والقابل للقراءة يجعلها في متناول المبتدئين والخبراء على حد سواء، مما يسرع منحنى التعلم لممارسي علوم البيانات.
  • مكتبات وفيرة: تفتخر لغة Python بمكتبات قوية مثل NumPy للعمليات العددية، وPandas لمعالجة البيانات، وMatplotlib وSeaborn للتصور، وScikit-Learn للتعلم الآلي. تعمل هذه البيئة الغنية بالمكتبات على تبسيط مهام تحليل البيانات المعقدة.
  • دعم المجتمع: يقوم مجتمع Python الواسع بتطوير وصيانة مكتبات علوم البيانات بشكل مستمر. وهذا يضمن أن الأدوات محدثة وموثوقة ومدعومة من قبل مجتمع مستخدمين داعمين.
  • التعلم الآلي والذكاء الاصطناعي: تعمل Python كمركز للتعلم الآلي وتطوير الذكاء الاصطناعي، حيث تقدم مكتبات مثل TensorFlow وKeras وPyTorch. تعمل هذه الأدوات على تبسيط عملية إنشاء ونشر النماذج التنبؤية.
  • عرض مرئي للمعلومات: تتيح لغة Python إنشاء تصورات جذابة للبيانات، مما يعزز فهم رؤى البيانات وإيصالها.
  • دمج: تتكامل Python بسلاسة مع قواعد البيانات وأطر الويب وتقنيات البيانات الضخمة، مما يجعلها خيارًا ممتازًا لخطوط أنابيب علوم البيانات الشاملة.

اقرأ أيضا: أهم 10 استخدامات لبايثون في العالم الحقيقي

وفي الختام

توفر مشاريع Python الصغيرة الأربعة عشر هذه نقطة انطلاق ممتازة للمبتدئين لتعزيز مهاراتهم في البرمجة. أنها توفر رؤى عملية حول مفاهيم بايثون الأساسية. عندما تبدأ رحلتك في البرمجة، تذكر أن الممارسة أمر بالغ الأهمية لإتقانها.

إذا كنت مستعدًا للمضي قدمًا، ففكر في الاشتراك فيه دورة بايثون لتحليلات Vidhya. سوف تكتسب تعليمًا متعمقًا وخبرة عملية وفرصة للعمل في مشاريع علوم البيانات الفعلية. هذه الدورة مخصصة للمبتدئين الذين لديهم خلفية في البرمجة أو علوم البيانات. استفد من الفرصة لتعزيز حياتك المهنية وتطوير مهاراتك في لغة بايثون. انضم إلى دورة بايثون لدينا اليوم!

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة