كيف تعمل هذه الساعة بالبايثون؟

محتاج حد يشرح كود ده يوضحه ؟ فى كومنتات لو ناقصه حاجه يكمله


import time

while True:
	uin = input(">> ")
	try:
		when_to_stop = abs(int(uin))
	except KeyboardInterrupt:
		break
	except:
		print("Not a number!")

	while when_to_stop > 0:
		m, s = divmod(when_to_stop, 60)
		h, m = divmod(m, 60)
		time_left = str(h).zfill(2) + ":" + str(m).zfill(2) + ":" + str(s).zfill(2)
		print(time_left + "\r", end="")
		time.sleep(1)
		when_to_stop -= 1
	print()
1 Like

خلينا أول شيء نفهم كل دالة موجودة لدينا

الدالة abs، هي القيمة المطلقة في الرياضيات يعني أي شيء فيها يخرج بالموجب
مثال:

abs(50) # النتيجة 50
abs(-50) # أيضا النتيجة 50
abs(0) # أكيد 0 

الدالة int، تحول كلمة إلى رقم
مثال:

int('500') # النتيجة 500

فائدة الدالة int تأتي غالبا مع استعمال input (وهي تطلب من المستخدم ادخال أرقام على شكل string، ليتم تحويلها إلى أرقام على شكل integer)


الدالة divmod، ترجع القيمتين نتيجة القسمة وباقي القسمة

مثال:

divmod(25, 5) # ترجع القيمة (5, 0) نتيجة القسمة 5 وباقي القسمة 0
divmod(26, 5) # ترجع القيمة (5, 1) نتيجة القسمة 5 وباقي القسمة 1

الدالة str، عكس الدالة int تحول القيمة من عدد إلى نص

مثال:

string(500) # 'النتيجة '500

الدالة zfill، تقوم بإضافة أصفار على يسار الكلمة

مثال

x = '12'.zfill(1) # النتيجة 12
x = '12'.zfill(2) # النتيجة 12
# سبب عدم اختلاف النتيجة هو أن الأصفار المطلوبة أقل من النص

x = '12'.zfill(3) # النتيجة 012
# صفر اضافي على يسار الرقمين 12

الدالة time.sleep، تقوم بايقاف البرنامج حسب عدد الثواني المحددة

مثال

time.sleep(2) # تنتظر لمدة ثانيتين

المستخدم يقوم بادخال الثواني في البرنامج من خلال هذه الأكواد:

	uin = input(">> ")
	try:
		when_to_stop = abs(int(uin))
	except KeyboardInterrupt:
		break
	except:
		print("Not a number!")

ويتم تحويل القيمة إلى عدد موجب (لا يوجد وقت بالسالب :laughing:)

وفي هذه الحلقة يتم انقاص واحد كل مرة والانتظار لمدة ثانية:

	while when_to_stop > 0:
        ...
		time.sleep(1)
		when_to_stop -= 1

بالنسبة للأسطر التالية:

		m, s = divmod(when_to_stop, 60)
		h, m = divmod(m, 60)
		time_left = str(h).zfill(2) + ":" + str(m).zfill(2) + ":" + str(s).zfill(2)
		print(time_left + "\r", end="")

فهي تقوم باستعمال الدالة divmod لكي تحسب عدد الدقائق والساعات (كل دقيقة 60 ثانية، وكل ساعة 60 دقيقة)

ويتم اضافة الأصفار على اليسار لكي تظهر مثل الساعة الالكترونية هكذا (00:00:00)

بهذا تكون عرفت كيف يعمل البرنامج كاملا :wink:

1 Like

شكرا لك يا استاذ♥ لكنى لم اوصل الى هدفى بعد اريد كيفة عمل 25 دقيقه ثم راحه 5 دقائق ثم 25 دقيقه ثم 5 دقائق ثم هكذه ثم 30 دقيقه راحه لا اعرف كيفة ترتب الاكواد ماذا اكتب بالظبط من قلة خبرتى

1 Like

حاول تنظم الأفكار قبل كتابة أي كود

  1. تطلب من الشخص الوقت الذي يريده

  2. تعمل وقت استراحة محدد (5 دقائق)

  3. تطلب منه مجددا الوقت وهكذا

بمعنى:

while True:
    minutes = get_user_minutes()
    start_timer(minutes)
    start_break()

السطر Whilte True يعمل إلى ما لا نهاية (حتى تقوم بإيقاف البرنامج بنفسك)

هذه الخطوات كتبتها بأبسط شكل، تقدر الآن تكتب أنت محتوى كل دالة get_user_minutes، start_timer، start_break

هنا القصد ب 3 بان الرقم المطبوع سيكون من 3 خانات
012

عندما كان 2
طبع فقط 12 لانه لا يوجد مكان لطباعة الاصفار

هل هذا صحيح ؟

1 Like

نعم بالضبط

1 Like

@YaserAlnajjar

استاذ الكود فى خطاء IndentationError ما معنى هذا

import time

while True:
	uin = input(">> ")
	try:
		when_to_stop = abs(int(uin))
	except KeyboardInterrupt:
		break
	except:
		print("Not a number!")

	while when_to_stop > 0:
		m, s = divmod(when_to_stop, 60)
		h, m = divmod(m, 60)
		time_left = str(h).zfill(2) + ":" + str(m).zfill(2) + ":" + str(s).zfill(2)
		print(time_left + "\r", end="")
		time.sleep(1)
		when_to_stop -= 1
	print()

import time

while True:
	uin = input(">> ")
	try:
		when_to_stop = abs(int(uin))
	except KeyboardInterrupt:
		break
	except:
		print("Not a number!")

	while when_to_stop > 0:
		m, s = divmod(when_to_stop, 60)
		h, m = divmod(m, 60)
		time_left = str(h).zfill(2) + ":" + str(m).zfill(2) + ":" + str(s).zfill(2)
		print(time_left + "\r", end="")
		time.sleep(1)
		when_to_stop -= 1
	print()
 while True:
     minutes = get_user_minutes()
     start_timer(minutes)
     start_break()
print()
1 Like
  • الكود مكرر مرتين (ربما هذا جزء من المشكلة)

الخطأ indentation error معناه يوجد خطأ في المسافات

نسخت ولصقت الكود هنا وهو يعمل:

1 Like

انا كتابة خطا المشكله معايا يا استاذ انه بيطلع نتيجه اللى انا مش عاوزه انا عاوز البرنامج يعمل 25 دقيقه ثم 5 دقائق ثم 25 ثم 5 ثم 30

import time

while True:
	uin = input(">> ")
	try:
		when_to_stop = abs(int(uin))
	except KeyboardInterrupt:
		break
	except:
		print("Not a number!")

	while when_to_stop > 0:
		m, s = divmod(when_to_stop, 60)
		h, m = divmod(m, 60)
		time_left = str(h).zfill(2) + ":" + str(m).zfill(2) + ":" + str(s).zfill(2)
		print(time_left + "\r", end="")
		time.sleep(1)
		when_to_stop -= 1
	print()


def start_timer(minutes):
    pass


def get_user_minutes():
    pass


while True:
          minutes: object = get_user_minutes(6)
          start_timer(1)
start_break (5)
print()