تكرار كتلة لكل عنصر
حلقة for تنفّذ كتلتها المزاحة مرة لكل عنصر في مجموعة، وتمنح كل عنصر اسمًا في تلك الدورة. المجموعة هنا قائمة تُكتب بأقواس مربعة وفواصل (للقوائم موضوعها الخاص لاحقًا). تشبه صياغتها صياغة if: نقطتان في نهاية السطر الأول وكتلة مزاحة تحته.
prices = [184.25, 184.5, 184.0]
for price in prices:
print(price) # 184.25, then 184.5, then 184.0range: العدّ دون قائمة
تُنتج range(n) الأعداد الصحيحة من 0 إلى n - 1: قيمة التوقف غير مشمولة، ولهذا تحتوي range(5) على خمسة أعداد. تبدأ range(start, stop) من حيث تحدد، وتقفز range(start, stop, step) بمقدار step ويمكن أن يكون سالبًا للعدّ التنازلي. استخدمها عندما تحتاج تكرار شيء عددًا من المرات أو المرور على المواضع.
# range counts, and stops before the stop value
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3))) # [2, 5, 8]
print(list(range(3, 0, -1))) # [3, 2, 1]نمط المجمِّع
تتبع معظم الحلقات نمطًا واحدًا: ابدأ متغيرًا قبل الحلقة، وحدّثه داخلها، واستخدمه بعدها. total += price * quantity اختصار لـtotal = total + price * quantity. هنا كل عنصر في القائمة زوج، وسطر الحلقة يسمّي النصفين معًا (ستشرح المواضيع التالية فك التعبئة هذا كما ينبغي).
# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
total += price * quantity
print(total) # 64525.0المرور على المواضع
أحيانًا تحتاج إلى مقارنة كل عنصر بالذي قبله. مرّ على المواضع باستخدام range(1, len(prices)): تبدأ من 1، فيكون prices[i - 1] صالحًا دائمًا. تعطي len() عدد العناصر، ويأخذ prices[i] العنصر في الموضع i بدءًا من العدّ 0.
# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
if prices[i] > prices[i - 1]:
ups += 1
print(ups) # 2بناء قائمة أثناء الحلقة
لجمع نتيجة واحدة في كل دورة، ابدأ بقائمة فارغة [] واستدعِ .append(value) داخل الحلقة. هكذا تُبنى سلالم الأسعار والمجاميع التراكمية والإشارات اليومية. تُعاد القائمة (أو تُستخدم) بعد انتهاء الحلقة.
# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
ladder.append(start + level * tick)
print(ladder) # [184.0, 184.25, 184.5, 184.75]التالي: حلقات while وbreak وcontinue للتكرار حتى يتغير شرط بدلًا من عدد ثابت من العناصر.
المختبر: ما الذي يُقيَّم
- اجمع قيمة عدة صفقات باستخدام
total_notional25 نقطة - ارسم مستويات الأسعار باستخدام
price_ladder25 نقطة - احسب عدد الأيام التي ارتفع فيها السعر باستخدام
count_up_days25 نقطة - احتفظ بمجموع تراكمي باستخدام
running_total25 نقطة