اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الخطأ لديك بسبب المتغير X الموجود على الجهة اليمنى المضروب ب 3.

عندما تحاول بايثون قراءة قيمته تجده غير معرّف.

يمكنك تمريره كوسيط للدالة fun:

def fun(x):  # x = 1
  x=x*3      #=> 3*1 = 3
  return(y)  # y = 3
x=1

fun(x)        # => fun(1)

print(fun(x)) # 3

يصبح الآن y غير معرف لذلك يمكن إسناد قيمة التعبير الحسابي له:

def fun(x):  
  y=x*3      #=> y = 3*1 = 3
  return(y)  # y = 3


x=1

print(fun(x)) # 3

 

  • 0
نشر (معدل)
def fun():
  x=x*3
  return(y)
x=1
fun()

تعريف الدالة او الامر صحيح 

لكن انت هنا تقوم بضرب قيمة غير معرفة بقيمة 3 في هذا السطر x=x*3

فهنا x فقط مؤشر في الذاكره لا يحتوي اي قيمة و لا يمكننا استعمال المؤشرات التي لا تدل على قيمة بداخلها اثناء العمليات الحسابيه 

للقيلم بعمليات حسابيه يجب ان يكون هنا قيمة للمؤشر x  حتى يتم عمل الحسابات المرادة 

ثم بعد ذلك انت تقوم بارجاع ايضا y  و التي لم تقم اصلا بتعريفها باي مكان و لا اسناد اي قيمة لها فكما قال لك السيد وائل يجب انت تقوم باسناد قيمة او حتى تعريفها مؤقتا حتى يتم كتابتها بالذاكرة و من ثم استخدامها داخل برنامجك كالتالي :

 

def fun():
  y=x*3
  return(y)
fun()


OR 
//--------------------------//

def fun(x):
	return x*x
fun(3)

OR
//---------------------------//

def fun():
	x=1
	y= x*x
	return x
fun()

 

تم التعديل في بواسطة Nuhla Almasri
  • 0
نشر

- المشكلة في محاولة تعديل قيمة متغير عام، ضمن دالة.
أولاً يجب أن تضع في ذهنك أن هناك تصنيفين أساسيين للمتحولات variable هما:
1. المتغيرات المحلية Local Variables.
2. المتغيرات العامة Global variables.
المتغيرات العامة هي تلك التي لم يتم الإعلان عنها داخل أي دالة، ويكون نطاقها عام Global، بينما المتغيرات المحلية هي تلك التي يتم الإعلان عنها داخل دالة ونطاقها يكون محصور ضمن الدالة التي عُرّفت ضمنها فقط. بمعنى آخر، يمكننا القول أن المتغيرات المحلية يمكن الوصول إليها فقط داخل الدالة التي تمت تهيئتها من خلالها بينما يمكن الوصول إلى المتغيرات العامة في جميع أنحاء البرنامج وداخل كل دالة.

الآن طبقاً للتعريف أعلاه فمن المفترض أن يعمل الكود الخاص بك دون أن تظهر لك مشكلة، لأنك تقوم باستخدام متغير عام (يمكن الوصول له من أي مكان في الكود)، لكن في واقع الأمر هنا يوجد اختلاف بسيط وهو أنك تحاول تعديل قيمته وليس الوصول إليه فقط، ولحل المشكلة يجب أن نقوم باستخدام الكلمة المفتاحية global معه قبل محاولة إجراء أي تعديل على قيمته.

def fun():
  global x
  x=x*3
  return(x)
x=1
fun()

وبذلك تكون الأمور سليمة.
لمزيد من المعلومات عن المتغيرات والدوال والنطاقات يمكنك مراجعة المقالات التالية:

https://wiki.hsoub.com/Python/scopes-and-namespaces

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...