پایتون

if__name__== “__main__ چی هست؟

“__ if __name__ == “__mainچیست؟

 

برای فهم این مطلب به کد زیر توجه کنید:

def main():
     print ("hello world!")
print ("Sufra")
>>>
Sufra
>>>

همانطور که بعد از اجرای کد مشاهده میکنید به جای چاپ هر دو مقدار print فقط sufra چاپ شده است. به این دلیل است که تابع if__name __ ==” __main__  را  فراخوانی نکردیم.

↵ هر ماژول در پایتون ویژگی خاصی  به نام __name__  دارد. وقتی ماژول به عنوان برنامه اصلی اجرا میشود، مقدار ویژگی __name__ در __main__  قرار میگیرد . در غیر این صورت مقدار __name__ حاوی نام ماژول است.

+ وقتی مفسر پایتون کدهای فایل را میخونه تمام کدها را پیدا و اجرا میکنه.

+ وقتی پایتون تمام کد ها را به عنوان برنامه اصلی اجرا میکنه ، متغیر خاص (__name__) را برای مقدار (“__main__”) تنظیم می کند.

+ وقتی تابع اجرا میشود با خواندن عبارت if بررسی میکنه که آیا مقدار __name__ برابر __main__ هست یا نه .
+ + در پایتون، if__name __ ==” __main__  به شما اجازه میدهد هر فایل پایتونی را به عنوان ماژول های قابل استفاده مجدد یا برنامه های مستقل اجرا کنید.

 

مانند C، پایتون از == برای مقایسه و از = برای تخصیص استفاده میکند. مترجم پایتون با  دو روش اصلی از تابع استفاده می کند:

 __name__= ‘نام ماژول ‘

if statement==false

کد بالا میگه اگر __name__ برابر نام ماژول بود عبارت شرطی ما مقدار false میگیره و اسکریپت داخل _main_   اجرا نمیشود.

t1

 
کد زیر میگه اگر __name__ برابر _main_ بود،  عبارت شرطی ما مقدار true میگیره و اسکریپت داخل _main_   اجرا میشود.
__name__=__main__

if statement == True

 

 

t2
 
 
 
 
 

مثالی دیگر

def main():

W=open(“foo.txt” ,”r”)

K=W.readlines()

for x in K:

print(x)

if __name__ == “__main__”:

main()

22

ماشین حساب ساده با پایتون

کاربرد elif

 

import math
from tkinter import *
from tkinter import messagebox
sufra= Tk()
sufra.configure(background='#FF339F')
sufra.title("ماشين حساب")

def show():
 try: 
 a =asq .get() 
 b = bsq.get()
 o = op.get()
 if o == '+':
 csq = a + b
 messagebox.showinfo("جواب ", csq)
 elif o == '-':
 csq = a - b
 messagebox.showinfo("جواب ", csq)
 elif o == '*':
 csq = a * b
 messagebox.showinfo("جواب", csq)
 elif o == '/':
 csq = a / b
 messagebox.showinfo("جواب", csq) 
 else:
 print('بيشتر')
 except ValueError:
 tkMessageBox.showinfo("خطا!") 
asq=IntVar()
bsq=IntVar()
op=StringVar ()
k= Label(sufra, text="ماشين حساب ساده",background='#FF339F').grid(row=0, column=1)
E1 = Entry(sufra, bd =5,textvariable = asq).grid(row=1, column=0)
L1 = Label(sufra, text="عدد اول ",background='#FF339F').grid(row=1, column=1)
E3 = Entry(sufra, bd =5,textvariable = op).grid(row=2, column=0)
L2 = Label(sufra, text="(*/-+) ",background='#FF339F').grid(row=2, column=1)
E2 = Entry(sufra, bd =5,textvariable = bsq).grid(row=3, column=0)
L3 = Label(sufra, text="عدد دوم ",background='#FF339F').grid(row=3, column=1)

B1 = Button(sufra, text="لطفا حاصل را نمايش بده",background='#FFDA33' ,command = show).grid(row=4, column=0)
sufra.mainloop()

44

باز نشدن صفحه ۱۹۲٫۱۶۸٫۱٫۱ برای مودم TP-Link

اگر همه راهها را امتحان کردید برای وارد شدن به صفحه تنظیمات مودم و باز نشد، وارد ادرس آدرس آی پی شوید و بعد از دریافت آی پی آدرس خود را بیابید. حالا با ادرس ای پی میتوانید این صفحه را باز کنید.

ماشین حساب ساده با tkinter-python

ماشین حساب ساده با tkinter-python

from tkinter import *
import math

def calculate():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 * num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!')
def calculate2():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 / num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!')
def calculate3():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 + num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!')
def calculate4():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 - num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!',fg="white")
def calculate5():
    try:
        num1 = float(enter1.get())
        result = num1**2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!',fg="white")
def calculate6():
    try:
        num1 = float(enter1.get())
        result = math.sqrt(num1)
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!',fg="white")
root = Tk()
root.configure(background='black')
label1 = Label(root, text='عدد اول',bg="black", fg="white")
label1.grid(row=0, column=0,columnspan=2)
enter1 = Entry(root, bg='white')
enter1.grid(row=1, column=0,columnspan=2)
label2 = Label(root, text='عدد دوم',bg="black", fg="white")
label2.grid(row=2, column=0,columnspan=2)
enter2 = Entry(root, bg='white')
enter2.grid(row=3, column=0, columnspan=2)
btn1 = Button(root, text='ضرب', command=calculate,bg="black",activebackground="green", fg="white")
btn1.grid(row=4, column=0)
btn2 = Button(root, text='تقسيم', command=calculate2,bg="black",activebackground="orange", fg="white")
btn2.grid(row=5, column=0)
btn3 = Button(root, text='جمع', command=calculate3,bg="black",activebackground="purple", fg="white")
btn3.grid(row=5, column=1)
btn4 = Button(root, text='تفريق', command=calculate4,bg="black",activebackground="red", fg="white")
btn4.grid(row=4, column=1)
btn5 = Button(root, text='توان ۲ عدد اول', command=calculate5,bg="black",activebackground="cyan", fg="white")
btn5.grid(row=6, column=0, columnspan=2)
btn6 = Button(root, text='ريشه عدد اول', command=calculate6,bg="black",activebackground="yellow", fg="white")
btn6.grid(row=7, column=0, columnspan=2,)
label3 = Label(root, bg="black", fg="red")
label3.grid(row=8, column=0, columnspan=2)
enter1.focus()
enter1.bind('', func=lambda e:enter2.focus_set())
root.mainloop()

re

آموزش پایتون-توابع

تابع یکی از مهمترین مفهومات در ریاضیات است. تابع ساده زیر را در نظر بگیرید:

y=x+1

function(x)=x+1

https://www.mathsisfun.com/sets/function.html

https://www.mathsisfun.com/sets/function.html

x به عنوان ورودی (پارامتر)  و y به عنوان خروجی در نظر گرفته میشود.

تابع در برنامه نویسی هم بر گرفته ازهمین مفهوم است. در واقع ما وقتی یک برنامه چند خطی ساده مینویسیم متوجه اهمیت تابع نمیشویم ولی وقتی تعداد خطوط زیاد شد،  همچنین تکرار برخی خطوط بالا رفت، این کدهای تکراری را با عنوان یک تابع با نام خاص میسازیم. و هر کجای برنامه و به هر تعداد که خواستیم استفاده میکنیم، همچنین به برنامه نویسان اجازه اشتراک گذاشتن کد ها را می دهد. سپس متوجه اهمیت آن میشویم. 

توابع تحت نام های مختلف در زبان های برنامه نویسی شناخته می شوند، برای مثال : زیرمجموعه ها(subroutines)، روال ها(routines)، روش ها(procedures)، روش ها(methods) یا زیر برنامه ها(subprograms).

تابع در پایتون با با کلمه کلیدی def تعریف و بعد فراخوانی میشود. تابع از سه بخش تشکیل میشود:

نام، پارامتر، بدنه:

 

 

>>> def add(x,y):
	return x+y
>>> add(2,3)
۵
>>>

تابعی برای جمع دو عدد تعریف میکنیم:

در خط اول توسط def نامی برای تابع انتخاب و تعریف شده است. سپس دو پارامتر به عنوان ورود ی تعریف میکنیم . : را میگذاریم و اینتر را میزنیم. سپس تابع را توسط نام آن  و انتخاب دو آرگومان فراخوانی میکنیم. اینتر را زده و نتیجه را مشاهده میکنیم.

کاربرد تابع در tkinter

وقتی کد زیر اجرا میشود پنجره ای حاوی باتن را مشاهده میکنیم که قراره با کلیک روی آن رویدای که نمایش پیام است را ببینیم و این رویداد توسط فراخوانی تابع انجام میگیرد.

 

import tkinter.messagebox
from tkinter import *
top = Tk()
def helloCallBack():
   messagebox.showinfo( "Hello Python", "Hello World")
B = Button(top, text ="Hello", command = helloCallBack,bg='red', fg='white')
B.pack()
top.mainloop()

45

جمع دو عدد با ماژول tkinter

 

import tkinter.messagebox
import sys
from tkinter import *
top = Tk()
top.configure( bg = 'yellow' )
def sum():
    arg1= a.get()
    arg2 = b.get()
    t=arg1+arg2
    messagebox.showinfo("مجموع ۲ عدد",t )

a=IntVar()
b=IntVar()
Label(top, text="عدد اول",bg='yellow').grid(row=0)
Label(top, text="عدد دوم ",bg='yellow').grid(row=1)
e1 = Entry(top,textvariable = a).grid(row=0, column=1)
e2 = Entry(top,textvariable = b).grid(row=1, column=1)

B = Button(top, text ="نتيجه", command = sum,bg='red', fg='white').grid(row=2, column=1)

top.mainloop()

jam

Tkinter_Variable Classes در پایتون

نحوه استفاده از  کلاس متغیرها(Variable Classes)

انواع در tkinter کمی متفاوت از انواع در برنامه نویسی پایتون است .StringVar () یکی از آن انواع در tkinter است.

با استفاده از این انواع ما یاد می گیریم چگونه داده ها را از رابط گرافیکی tkinter  گرفته و در متغیرها ذخیره کنیم نا از آن داده ها استفاده کنیم.

در جدول زیر برخی از انواع  موجود در tkinter مشاهده میکنید:

 

 

7ture

 

بررسی با یک مثال :

وارد محیط شل پایتون شوید و برای ایجاد یک شی یا نمونه از کلاس StringVar   عبارت زیر را تایپ کنید:

>>>x=StringVar()
Traceback (most recent call last):
File "<pyshell#29>", line 1, in 
x=StringVar()
NameError: name 'StringVar' is not defined

با مشاهده این ارر متوجه میشویم برای استفاده از این کلاس باید ماژول tkinter را فراخوانی کنیم:

>>> from tkinter import*
>>> x=StringVar()
Traceback (most recent call last):
File "<pyshell#31>", line 1, in 
x=StringVar()
AttributeError: 'NoneType' object has no attribute '_root'

ارر بعدی مربو ط به این است که ما باید قبل از هر دستور دیگری بعد ازfrom tkinter import*، یک نمونه از کلاس Tk  درست میکردیم. یه جورایی میشه گفت سازنده کلاس را فرخوانی کردیم. مثل فرخوانی تابع.

الان دیگه بستر برای ایجاد یه نمونه از کلاس StringVar  مهیا شده است:

 

>>> root=Tk()
>>> x=StringVar()
>>> x.set("Sufra")
>>> x.get()
'Sufra'
>>> print(x)
PY_VAR0
>>> y=x.get()
>>> print(y)
Sufra
>>> y.get()
Traceback (most recent call last):
 File "<pyshell#48>", line 1, in <module>
 y.get()
AttributeError: 'str' object has no attribute 'get'
>>> print(x.get())

>>>
>>> x.get()
''
>>> print(x)
PY_VAR1

متد GET & SET

خیلی مهمه در هنگام نوشتن StringVar  به حروف بزرگ و کوچک توجه کنید چون با ارر مواجه میشوید. حالا برای مقدار دهی به x، از متد set استفاده میکنیم. توسط متد get  رشته ای را که در x ذخیره شده مشاهده میکنیم. سپس این مقدار را در متغیر دیگری ذخیره و توسط print نمایش میدهیم.. برای دیدن مقادیر پیش فرض نمیتونیم مستقیم متغیر را با PRINT چاپ کنیم. چون فقط یک متغیری را میبینیم که برای هر نمونه ایجاد شده در حال افزاش میباشد ولی مقدار پیش فرض را نمایش
نمیدهد. 

مقادیر پیش فرض

>>> print(StringVar ())
PY_VAR3
>>> g=StringVar ()
>>> print(g)
PY_VAR4
>>> print(g.get ())

>>>
>>> h=IntVar ()
>>> print(h)
PY_VAR7
>>> print(h.get())
۰
>>> j=DoubleVar ()
>>> print(j.get())
۰٫۰
>>> k=BooleanVar ()
>>> print(k.get())
False
>>>

http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

یک مثال کاربردی 

 

from tkinter import *
top = Tk()
label = Label(top, text='Hello World!') label.pack()
mainloop()
http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

from tkinter import *
top =Tk()
label = Label(top, text='Hello World!')
label.pack()
label.config(text="Hello Sufra!")
mainloop()
http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

from tkinter import *
root = Tk()
inp = StringVar()
inp.set("New Text!")
label =Label(root, textvariable = inp).pack()
mainloop()
http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

در شل پایتون وضوح تغییر در مقدار متغیر بیشتر است.

الان ما بدون استفاده از کلاسهای متغیر مقداری را به برچسب نسبت دادیم و خروجی آن را مشاهده کردیم.

l4

با استفاده از کلاس متغیر رشته یک نمونه ساخته و در متغیر inp قرار دادیم. سپس با استفاده از متد set آن را مقدار دهی کردیم،و در textvariable =inp برچسب قرار دادیم.

l5

ما یه نمونه ی دیگر ساخته و مقدار دهی کردیم

l6

مقادیری که در این شی ها ذخیره کرده بودیم را عوض کردیم همانطور که مشاهده میکنید فورا مقدار آنها عوض شد و قبلی ازمیان رفت.