مدرسه زبان برنامه‌نویسی PYTHON

وبلاگی جهت معرفی - آموزش و تحلیل زبان برنامه نویسی ‍پایتون

مدرسه زبان برنامه‌نویسی PYTHON

وبلاگی جهت معرفی - آموزش و تحلیل زبان برنامه نویسی ‍پایتون

۵۰ مطلب در تیر ۱۳۹۸ ثبت شده است

کار کردن با فایل

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

try:
   f = open("filename.txt")
   print(f.read())
finally:
   f.close()

این تضمین می کند که فایل همیشه بسته است، حتی اگر یک خطا رخ دهد.

روش دیگری برای انجام این کار با استفاده از statements است.که در این روش یک متغیر موقت را که معمولا با f در نظر میگیرند را مشخصی می کنند و اعمال مختلفی را بر روی آن پیاده سازی می کنند.

with open("filename.txt") as f:
   print(f.read())

نکته:فایل به طور خودکار در انتهای بیانیه With بسته می شود، حتی اگر با Exception برخورد کند.

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ تیر ۹۸ ، ۲۱:۵۳
سعید دامغانیان

نوشتن در فایل

برای نوشتن در فایل ها از متد write استفاده می کنیم. به طوری که در این روش می توان رشته ای را به در متن فایل ایجاد کرد.
مثلا:

file = open("newfile.txt", "w")
file.write("This has been written to a file")
file.close()

file = open("newfile.txt", "r")
print(file.read())
file.close()

خروجی:

>>>
This has been written to a file
>>>

نکته:حالت “w” یک فایل ایجاد می کند، اگر قبلا وجود نداشته باشد.

هنگامی که یک فایل در حالت نوشتن باز می شود، محتوای موجود در فایل حذف می شود.

file = open("newfile.txt", "r")
print("Reading initial contents")
print(file.read())
print("Finished")
file.close()

file = open("newfile.txt", "w")
file.write("Some new text")
file.close()

file = open("newfile.txt", "r")
print("Reading new contents")
print(file.read())
print("Finished")
file.close()

خروجی:

>>>
Reading initial contents
some initial text
Finished
Reading new contents
Some new text
Finished
>>>

نکته:همانطور که می بینید محتوای فایل رونویسی شده است.

متد write در صورتی که موفق باشد مقدار بایت نوشته شده رد فایل را فراخواهد خواند.

msg = "Hello world!"
file = open("newfile.txt", "w")
amount_written = file.write(msg)
print(amount_written)
file.close()

خروجی:

>>>
12
>>>
۰ نظر موافقین ۰ مخالفین ۰ ۰۷ تیر ۹۸ ، ۲۱:۵۱
سعید دامغانیان

خواندن فایل در پایتون

محتویات یک پرونده که در حالت متن باز شده است می تواند با استفاده از متد read خوانده شود. (خواندن فایل در حال حاضر محدود به فایل متنی است)

file = open("filename.txt", "r")
cont = file.read()
print(cont)
file.close()

نکته:این همه محتویات فایل “filename.txt” را چاپ می کند.

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

file = open("filename.txt", "r")
print(file.read(16))
print(file.read(4))
print(file.read(4))
print(file.read())
file.close()

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

file = open("filename.txt", "r")
file.read()
print("Re-reading")
print(file.read())
print("Finished")
file.close()

خروجی:

>>>
Re-reading

Finished
>>>

برای بازیابی هر خط در یک فایل، می توانید از روش readlines برای بازگشت یک لیست که در آن هر عنصر یک خط در فایل است، استفاده کنید.
مثلا:

file = open("filename.txt", "r")
print(file.readlines())
file.close()

خروجی:

>>>
['Line 1 text \n', 'Line 2 text \n', 'Line 3 text']
>>>

شما می توانید از یک حلقه برای تکرار از طریق خطوط در فایل استفاده کنید:

file = open("filename.txt", "r")

for line in file:
    print(line)

file.close()

خروجی:

>>>
Line 1 text

Line 2 text

Line 3 text
>>>

نکته:در خروجی، خطوط با خط خالی جدا می شوند، به عنوان تابع چاپ به طور خودکار یک خط جدید را در انتهای خروجی آن اضافه می کند.

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ تیر ۹۸ ، ۲۱:۵۰
سعید دامغانیان

پروژه برعکس کننده کلمات ! 


در این تمرین ابتدا با تابع input از کاربر یک رشته گرفته ایم و در word ریخته ایم. سپس با تابع len طول آن رشته را در یک متغیر به اسم i ذخیره کرده ایم. و سپس متغیر rev را برای رشته برعکس شده ساخته ایم.

در حلقه while شرط گذاشته ایم که تا وقتی که i صفر نشده، محتویات متغیر rev را با [i-1] رشته مان یعنی word جمع کن و بعد یکی از i کم کن.

همانطور که میدانید کامپیوتر ها از صفر میشمرند یعنی مثلا اگر طول word ما 3 بود بدین صورت است :

حرف اول : 0

حرف دوم: 1

حرف سوم:2

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

در آخر تمام این کدها در یک حلقه بینهایت (While True) قرار داده شده تا برنامه تا همیشه اجرا شود.


824627_photo_2019-06-27_23-26-00.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ تیر ۹۸ ، ۲۱:۴۷
سعید دامغانیان

چاپ جایگشت های حروف یک عبارت


برای محاسبه تعداد جایگشت های حروف یک کلمه ابتدا باید کتابخانه itertools را وارد کنیم، سپس از کاربر واژه مورد نظر را با input بگیریم و در متغیر word ذخیره کنیم. در نهایت میتوانیم با itertools.permutations به یک لیست از جایگشت های word برسیم که اینجا در متغیر per ذخیره شده.

حالا میتوانیم آنها را با یک حلقه چاپ کنیم. در حلقه گفته ایم به ازای هر i در per ، متغیر i را تبدیل به رشته معمولی کن - با استفاده از ''.join () - و چاپ کن.

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


02888_photo_2019-06-27_23-25-56.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ تیر ۹۸ ، ۲۱:۴۵
سعید دامغانیان


y051948_photo_2019-06-27_23-25-49.jpg


۰ نظر موافقین ۰ مخالفین ۰ ۰۷ تیر ۹۸ ، ۲۱:۴۲
سعید دامغانیان

باز کردن فایل در پایتون

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

myfile = open("filename.txt")

نکته:آرگومانی که برای این تابع وجود دارد برای دریافت محل فایل متنی می باشد. در صورتی که فایل مورد نظر در محلی مشابه فایل حاوی کد باشد فقط کافیست که به جای دایرکتوری کامل فایل، اسم فایل را به ورودی تابع دهید.

شما می توانید حالت مورد استفاده برای باز کردن یک فایل را با استفاده از یک آرگومان دوم به تابع open مشخص کنید.
ارسال “r” به معنی باز در حالت خواندن است، که به طور پیش فرض است.
ارسال “w” به معنای حالت نوشتن است برای بازنویسی محتویات یک فایل.
ارسال “a” به معنای حالت افزودن برای اضافه کردن محتوای جدید به انتهای فایل است.

اضافه کردن “b” به عنوان آرگومان آن را در حالت باینری باز می کند، که برای فایل های غیر متنی (مانند فایل های تصویر و صدا) استفاده می شود.

مثلا:

# write mode
open("filename.txt", "w")

# read mode
open("filename.txt", "r")
open("filename.txt")

# binary write mode
open("filename.txt", "wb")

هنگامی که فایل باز شده و مورد استفاده قرار می گیرد، باید آن را ببندید.
این کار با روش close کردن فایل انجام می شود.

file = open("filename.txt", "w")
# do stuff to the file
file.close()

نکته:در آینده نحوه خواندن/نوشتن محتویات فایل را بررسی خواهیم کرد.

۱ نظر موافقین ۰ مخالفین ۰ ۰۶ تیر ۹۸ ، ۲۲:۴۴
سعید دامغانیان

assertion یا تاکید

assertion و در حقیقت به نوعی تایید اطلاعات به عنوان یک شرط بررسی صحت درزبان پایتون در نظر گرفته می شود که شما می توانید آن را در حالت on و یا off در انتهای تست برنامتون قرار بدید.
یک نمونه که در آن در صورتی که با خطایی مواجه شد یک exception raise را برای بررسی Assertion و یا تایید اطلاعات صدا خواهد زد.

print(1)
assert 2 + 2 == 4
print(2)
assert 1 + 1 == 3
print(3)

خروجی:

>>>
1
2
AssertionError
>>>

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

یک assertion می تواند یک آرگومان دوم را داشته باشد که در صورتی که ادعا ناقص باشد به AssertionError انتقال دهد.

temp = -10
assert (temp >= 0), "Colder than absolute zero!"

خروجی:

>>>
AssertionError: Colder than absolute zero!
>>>

نکته:استثناء AssertionError می تواند مانند هر استثنائی دیگر با استفاده از دستور try-except به دست آید و اگر چنین کاری انجام نشود، این نوع استثنا برنامه را خاتمه می دهد.

۱ نظر موافقین ۰ مخالفین ۰ ۰۶ تیر ۹۸ ، ۲۲:۴۳
سعید دامغانیان

raising exception

شما می توانید exception ها را با استفاده از دستور raise فرا خوانی کنید.

print(1)
raise ValueError
print(2)

خروجی:

>>>
1
ValueError
>>>

نکته:شما باید نوع استثنا یا Exception را مشخص کنید.

Exception ها را می توان با استدلال هایی مطرح کرد که جزئیات آنها را در بر می گیرد.
مثلا:

name = "123"
raise NameError("Invalid name!")

خروجی:

>>>
NameError: Invalid name!
>>>

در بلوک Except ، بیانیه Raise می تواند بدون استدلال مورد استفاده قرار گیرد تا هر استثنائی را دوباره ایجاد کند.
مثلا:

try:
   num = 5 / 0
except:
   print("An error occurred")
   raise

خروجی:

>>>
An error occurred

ZeroDivisionError: division by zero
>>>
۱ نظر موافقین ۰ مخالفین ۰ ۰۶ تیر ۹۸ ، ۲۲:۴۲
سعید دامغانیان

finally

برای اطمینان از اینکه کد اجرا می شود مهم نیست چه خطایی رخ می دهد، شما می توانید یک بیانیه finally را استفاده کنید. بیانیه finally در پایین یک بیانیه try/except قرار می گیرد. کد شامل finally همیشه بعد از اجرای کد در try و احتمالا در بلاک except ها اجرا می شود.

try:
   print("Hello")
   print(1 / 0)
except ZeroDivisionError:
   print("Divided by zero")
finally:
   print("This code will run no matter what")

خروجی:

>>>
Hello
Divided by zero
This code will run no matter what
>>>

کد finally حتی زمانی که یکی از Exception ها عمل نکند هم به کار خود ادامه خواهد داد.

try:
   print(1)
   print(10 / 0)
except ZeroDivisionError:
   print(unknown_var)
finally:
   print("This is executed last")

خروجی:

>>>
1
This is executed last

ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
NameError: name 'unknown_var' is not defined
>>>
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ تیر ۹۸ ، ۲۲:۴۰
سعید دامغانیان