حل المسائل

إنشاء قائمة

لديك مجموعة طلاب في الفصل وتريد تجميع أسمائهم في مجموعة. وهم:

  • "عمرو"
  • "لؤي"
  • "محمد"
  • "علي"
  • "فصيل"
students = ["عمرو", "لؤي", "محمد", "علي", "فصيل"]

قائمة الطلاب

من القائمة السابقة تريد تحصيل التالي:

  • هل الطالب “لؤي” في القائمة؟
  • كم عدد الطلاب؟
  • اسرد الفائمة
print("لؤي" in students)
print(len(students))
for s in students:
    print("Student:", s)
True
5
Student: عمرو
Student: لؤي
Student: محمد
Student: علي
Student: فصيل

أضف طالبًا جديدًا

أضف طالبًا جديدًا إلى القائمة، وهو: "زياد".

students.append("زياد")

أو

students = students + ["زياد"]

بالإشارة

  • من هو أول طالب؟
  • من هو آخر طالب؟
  • من هو الطالب الذي في المنتصف؟
print(students[0])
print(students[-1])
print(students[len(students) // 2])
عمرو
زياد
علي

بالقطعة

  • من هم الطلاب باستثناء الأول والأخير؟
  • من هم الطلاب الثلاثة من النهاية
  • من هم الطلاب الذين في موضع فردي؟
  • من هم الطلاب الذين في موضع زوجي؟
print(students[1:-1])
print(students[:-3])
print(students[::2])
print(students[1::2])
['لؤي', 'محمد', 'علي', 'فصيل']
['عمرو', 'لؤي', 'محمد']
['عمرو', 'محمد', 'فصيل']
['لؤي', 'علي', 'زياد']

متوسط المبيعات اليومية

  • لديك قائمة بالمبيعات اليومية.
daily_sales = [
    10, 12, 10, 15, 13, 14, 10,
    19, 14, 12, 8, 10, 11, 12,
    14, 15, 14, 14, 10, 5, 13,
    8, 20, 19, 15, 14, 13, 12,
]

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

  • عدد الأيام
    • يمكنك استعمال الإجراء len()
  • مجموع المبيعات لكل أسبوع على حدة
    • يمكنك استعمال الإجراء sum() واستعمال الإشارة بقطعة [:7] للأسبوع الأول
  • متوسط المبيعات لكل أسبوع على حدة والانحراف المعياري
    • يمكنك استعمال الإجراء statistics.mean() و statistics.stdev()
  • متوسط المبيعات خلال الشهر والانحراف المعياري
import statistics

print(len(daily_sales))
for i in range(0, len(daily_sales), 7):
    print("Week", i//7+1)
    print("Sales:", sum(daily_sales[i:i+7]))
    print("Mean:", round(statistics.mean(daily_sales[i:i+7]), 2))
    print("Std:",  round(statistics.stdev(daily_sales[i:i+7]), 2))
    print()
28
Week 1
Sales: 84
Mean: 12
Std: 2.08

Week 2
Sales: 86
Mean: 12.29
Std: 3.5

Week 3
Sales: 85
Mean: 12.14
Std: 3.53

Week 4
Sales: 101
Mean: 14.43
Std: 4.12

سلة مشتريات

لديك قائمة بالفواكه وأسعارها:

fruits = ["apple", "banana", "orange"]
prices = [    1.5,      2.0,      1.0]

احسب حاصل مشتريات كل سلة وفق قائمة الأسعار:

basket1 = ["apple", "apple", "apple"]
basket2 = ["banana", "apple"]

للسلة الواحدة نكتب هكذا

total = 0
for item in basket1:
    total += prices[fruits.index(item)]
print(total)
4.5

لجميع السلال يمكن أن نضيف حلقة أخرى:

totals = []
for basket in [basket1, basket2]:
    total = 0
    for item in basket:
        total += prices[fruits.index(item)]
    totals.append(total)
print(totals)
[4.5, 3.5]

ونستطيع أن نجمع المجموعات كلها:

print(sum(totals))
8.0

أو نكتبها التعبير المختصر:

print(sum([sum(prices[fruits.index(item)] for item in basket) for basket in [basket1, basket2]]))
8.0

ضرب متجهين

يوصف ضرب المتجهين بالصيغة:

\[ \vec{u} \cdot \vec{v} = \sum_{i=1}^{n} u_i v_i \]

أي أن كل عنصر من المتجه الأول يضرب في العنصر المناظر له في المتجه الثاني، ويُجْمَعُ ناتج ذلك كله.

u = (1, 2, 3)
v = (4, 5, 6)

فهذا التوكيد الأول بالصيغة الرياضية:

\[ \begin{align*} \vec{u} &= [1, 2, 3] \\ \vec{v} &= [4, 5, 6] \\ \vec{u} \cdot \vec{v} &= (1)(4) + (2)(5) + (3)(6) \\ &= 4 + 10 + 18 \\ &= 32 \end{align*} \]

وهذا التوكيد الثاني بالصيغة الرياضية:

\[ \begin{align*} \vec{u} &= [1, 2, 3] \\ \vec{u} \cdot \vec{u} &= (1)(1) + (2)(2) + (3)(3) \\ &= 1 + 4 + 9 \\ &= 14 \end{align*} \]

نضم العناصر المتقابلة من المتجهين ونجمع حاصل ضربهما:

result = 0
for a, b in zip(u, v):
    result += a * b
print(result)
32
result = 0
for a, b in zip(u, u):
    result += a * b
print(result)
14