ورود

View Full Version : تاپیک سورسهای موضوعی پایتون (آموزشی)



ehp_kz6597
جمعه 02 دی 1390, 14:37 عصر
سلام
میخوام که اینجا مرجعی بشه برای کسایی که تازه واردن و یا به کدی خاص تو زمینه خاص نیاز دارن .
ترتیب سوالات بصورت موضوعی خواهد بود. به این معنی که چطور کتابها یه فهرست دارن و مطالب دسته بندی شده ، اینجا هم موضوعات دسته بندی شده ، مشخص میشه ، سوالات و جوابهای مرتبط با همون موضوع قرار میگیره.
برای روشن تر شدن موضوع مثلا اعلام میشه که این بخش درباره کار با رشته ها هست و سوالها هم تو همون زمینه نوشته میشه و پس از پایان سوالات به موضوع بعدی میرم.
درواقع آموزش پایتون از طریق ارائه سوال ، تفکر ، ارائه کد و بررسی کد صورت میگیره.
در اینجا اصلا قصد آموزش پایتون به اون معنای همیشگی رو ندارم. یعنی مثل آموزش Tkinter (http://barnamenevis.org/showthread.php?314437-GUI-in-python) دیگه از توضیحات خبری نیست . حالا ممکنه نکته ای ، چیزی وجود داشته باشه ذکر بشه ولی ...

چندتا نکته :
1- دوستان لطف کنن اگه سوالی ، موردی ، چیزی بود ، با پیغام خصوصی مطرح کنین تا پیوستگی مطالب حفظ بشه .
2- اصلا قرار نیست سوالات سخت مطرح بشه . فقط قراره چند سوال در هر سرفصل مطرح بشه تا دوستان مهارت و تجربشون زیاد بشه .
2- فعلا تا آخر هفته هیچ سوالی درج نمیشه تا دوستان همه با خبر بشن بعد .(میخوام کار مشارکتی باشه )
3- سوال مطرح میشه و دوستان میتونن جوابهای خودشون را در رابطه با اون سوال بصورت پست جدید درج کنن.فقط اینکه :


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

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

( با اجازه دوست خوبم )

Geek1982: دوستان این دو تا مورد رو لطفا حتما رعایت کنید


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


شاد و موفق یاشید :لبخند:

ehp_kz6597
پنج شنبه 15 دی 1390, 10:28 صبح
1-مقدمات و ساختار های کنترلی :
------------------------


1- برنامه ای بنویسید که عددی را از ورودی دریافت کند و سپس به تعداد این عدد اعدادی را دریافت کرده ، مجموع و میانگین آن را محاسبه کرده و نمایش دهد . / پاسخ . پست 3 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1411683&viewfull=1#post1411683)

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


2- (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1412016&viewfull=1#post1412016) برنامه ای بنویسید که اعداد بین 0 تا 2 را با فاصله 0.2 نمایش دهد / پاسخ . پست 7 (http://barnamenevis.org/%C3%98%C2%A8%C3%98%C2%B1%C3%99%C2%86%C3%98%C2%A7%C 3%99%C2%85%C3%99%C2%87%20%C3%98%C2%A7%C3%9B%C2%8C% 20%C3%98%C2%A8%C3%99%C2%86%C3%99%C2%88%C3%9B%C2%8C %C3%98%C2%B3%C3%9B%C2%8C%C3%98%C2%AF%20%C3%9A%C2%A 9%C3%99%C2%87%20%C3%98%C2%A7%C3%98%C2%B9%C3%98%C2% AF%C3%98%C2%A7%C3%98%C2%AF%20%C3%98%C2%A8%C3%9B%C2 %8C%C3%99%C2%86%200%20%C3%98%C2%AA%C3%98%C2%A7%202 %20%C3%98%C2%B1%C3%98%C2%A7%20%C3%98%C2%A8%C3%98%C 2%A7%20%C3%99%C2%81%C3%98%C2%A7%C3%98%C2%B5%C3%99% C2%84%C3%99%C2%87%200.2%20%C3%99%C2%86%C3%99%C2%85 %C3%98%C2%A7%C3%9B%C2%8C%C3%98%C2%B4%20%C3%98%C2%A F%C3%99%C2%87%C3%98%C2%AF)
3- (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1412569&viewfull=1#post1412569)برنامه ای بنویسید که کاراکترهای a تا z رو همراه با کد اسکی اون چاپ کنه . / پاسخ و نکته . پست 9 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1413423&viewfull=1#post1413423)
4- (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1414106&viewfull=1#post1414106) برنامه ای بنویسید که رشته ای رو از ورودی دریافت کنه و کد اسکی اون رو نشون بده . در خروجی فقط کد اسکی و یک فاصله چاپ بشه (به صورت افقی) / پست 11 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1414877&viewfull=1#post1414877)و 12 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1414925&viewfull=1#post1414925)
5- (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1415001&viewfull=1#post1415001) برنامه ای بنویسید که رشته ای را از ورودی دریافت کرده و تعداد فضای خالی بین کلمات را شمارش کند . رشته مورد نظر با دریافت سه نقطه پشت سر هم (...) به پایان میرسد / پست 14 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1416446&viewfull=1#post1416446)
6- (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1416547&viewfull=1#post1416547) سوال قبل را با while پیاده سازی کنید. / پست 16 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1416976&viewfull=1#post1416976)
7- (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1418000&viewfull=1#post1418000)برنامه ای بنویسید که عدادی را از ورودی دریافت کند و درصورتی که تعداد ارقام عدد فرد است و یک رقمی نیست وارون آن را چاپ کند و در غیر اینصورت --- را چاپ کند/ادامه توضیحات در پست مربوطه... / پست24 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1418751&viewfull=1#post1418751)
8- (http://barnamenevis.org/showthread.php?p=1419165#post1419165) برنامه ای بنویسید که اولویت اعمال در عبارت زیر را بگونه ای تنظیم کند که نتیجه محاسبه عدد 20 شود/
3*5+4-1*4/3+1/پست 33 (http://barnamenevis.org/showthread.php?319590-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%28%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C%29&p=1421576&viewfull=1#post1421576)

MohsenPy
پنج شنبه 15 دی 1390, 20:20 عصر
سلام خیلی کار خوبی کردین باعث شد من بعد از چندی دوباره پایتون کار کنم ممنون

import os
x = int(input("Please enter a number: "))
x3 = 0
x2 = 0
for a in range(1,x + 1):
x2 = int(input("Please enter a number: "))
x3 += x2

print("Sum = " + str(x3) + " Average = " + str(x3 / x))
os.system("PAUSE")

ehp_kz6597
جمعه 16 دی 1390, 13:35 عصر
سلام
از جناب geek1982 (http://barnamenevis.org/member.php?u=113200) بابت پیگیری و همکاریشون ممنونم
جناب MohsenPy (http://barnamenevis.org/member.php?233538-MohsenPy) با تشکر از پاسختون ، به نظر شما استفاده از کدهای خط اول و آخر لازمه ؟ اگه اینطوره لطف کنید دلیلش رو زیر پاسختون ارائه کنید
------------------------------------------------------------------------------------------
برنامه ای بنویسید که اعداد بین 0 تا 2 را با فاصله 0.2 نمایش دهد
خروجی :
0
0.2
0.4
0.8
.
.
.
2

MohsenPy
جمعه 16 دی 1390, 15:53 عصر
من که متوجه این سوال نشدم یعنی در در یک خط با فاصله 0.2 نمایش بده؟خواهشا یکم واضح تر سوال طرح کن جناب ehp_kz6597 عزیز.
...
در مورد اون Pause شدن برنامه نه میشه نوشت میشه ننوشت ولی برای اینکه برنامه سریع بسته نشه نوشتم و یادم رفت برش دارم از کد برنامه برای انتقال به اینجا حالا چطور مگه؟

ehp_kz6597
جمعه 16 دی 1390, 16:43 عصر
سوال تصحیح شد و نمونه خروجی مورد نظر هم ارائه شد
این که دیگه ماژول نمیخواست .خب مثل زبانهای دیگه یه درخواست ورودی میدادی . یعنی دستور () input رو آخر کد اضافه میکردی
اگه لطف کنین کدتون رو تو همون پست به این صورت (بدون ماژول) ویرایش کنید ممنون میشم

MohsenPy
جمعه 16 دی 1390, 17:05 عصر
خدا خیرت بده سوالو درست کردی :لبخند:
بفرما:

for i in range(1,10 + 1):
print((i / 10) * 2 )

در ضمن از Python 3.2 هم استفاده میکنم یادم رفت ذکر کنم.
...
والا تا جایی که بنده حقیر یاد دارم اینجوری هست عزیز و تو زبون های دیگه هم مثل c همینه:
system("pause");
البته اون راهم هستا ولی من حالا از این راه استفاده میکنم دیگه گیر نده شما:لبخند:.

ehp_kz6597
شنبه 17 دی 1390, 10:21 صبح
سلام
من بیخیالش شدم ولی ... :متفکر:
جناب MohsenPy (http://barnamenevis.org/member.php?u=233538) ، از پاسخ دادن شما معلومه که مبتدی نیستین ، به همین خاطر همونطور که تو پست اول هم مطرح کردم لطف کنید فردای روزی که سوال مطرح میشه جوابتون رو ارائه کنید تا دوستان تازه وارد هم کمی رو مسئله فکر کنن . مخصوصا که این اوایل سوالات چندان سخت نیست و مفاهیم اولیه رو در غالب شرایط مختلف بررسی میکنه و میتونه برای تقویت پایه های یادگیری مناسب باشه .
سوالات سخت نیست دوستانی که این پست ها رو مشاهده میکنن سعی کنن تو حل مسائل مطرح شده همکاری کنن .
-------------------------------------------------------------------------
برنامه ای بنویسید که کاراکترهای a تا z رو همراه با کد اسکی اون چاپ کنه .

MohsenPy
یک شنبه 18 دی 1390, 10:48 صبح
خب مثل اینکه خبری نیست اوکی اینم خودم جواب میدم.
پاسخ:

for i in range(97,122 + 1):
print(chr(i) +" "+ str(i))
توضیح: کد اسکی حروف کوچک از 97 تا 122 هست و کد اسکی حروف بزرگ از 65 تا 90.

ehp_kz6597
دوشنبه 19 دی 1390, 09:17 صبح
سلام
بابا ایول به این همه فعالیت . آخه من موندم کدوم کد رو به عنوان پاسخ سوال درج کنم :متعجب:
باز هم دوست عزیز جناب MohsenPy (http://barnamenevis.org/member.php?233538-MohsenPy) . اگه نبود احتمالا در این تاپیک تخته میشد :قهقهه:
------------------------------------------------------------------
این سوال هم آسونه و هم به نوعی در ارتباط با سوال قبله . پس دوستان سعی کنن این یکی رو جواب بدن
برنامه ای بنویسید که رشته ای رو از ورودی دریافت کنه و کد اسکی اون رو نشون بده . در خروجی فقط کد اسکی و یک فاصله چاپ بشه (به صورت افقی) مثلا
ورودی : abc خروجی : 99 98 97

ASedJavad
سه شنبه 20 دی 1390, 01:40 صبح
ناراحت نشو عزیز
نمیذارم در این تاپیک تخته شه:
فقط از اونجایی که خودم رو استاد در پایتون میدونم! (بالاخره از آشنایی من و پایتون نزدیک به دو سه هفته میگذره!) صبر میکنم تا بقیه کدشون رو بذارن:قهقهه:
python 2.7 - windows



x=raw_input('please enter a word: ')
for i in x:
print ord(i),

ehp_kz6597
سه شنبه 20 دی 1390, 08:53 صبح
سلام
ناراحت که نیستم ولی وقتی ببینم دوستان استقبال بیشتر میکنن ، فعالیت میکنن و ... خب روحم شاد میشه :چشمک:
از طرفی این سوالات و آموزشها برای افراد تازه کار بیشتر مناسبه (انشاء الله تا مراحل پیشرفته تر ادامه داره) . وقتی هم میگین دو سه هفته یعنی یعنی با اصول اولیه آشنایید و مطمئنا با یه کم تلاش و جستجو میتونین سوالات رو حل کنید و این تلاش و جستجو برای پیدا کردن جواب تاثیر عجیبی در یادگیری داره :متعجب:
از پاسختون ممنونم :تشویق:
کد بالا در پایتون 3 به صورت زیر تغییر میکنه :

x=input('please enter a word: ')
for i in x:
print (ord(i),end=' ')

ehp_kz6597
سه شنبه 20 دی 1390, 10:19 صبح
برنامه ای بنویسید که رشته ای را از ورودی دریافت کرده و تعداد فضای خالی بین کلمات را شمارش کند . رشته مورد نظر با دریافت سه نقطه پشت سر هم (...) به پایان میرسد

saina2006
پنج شنبه 22 دی 1390, 07:26 صبح
x=input("Enter text and end it with ...")
noOfSpace=0
for i in range(0,len(x),1):
if x[i]==" ":
noOfSpace+=1
if x[i:i+3]=="...":
break
print("Total no of spaces is %d" % noOfSpace)

Python 3.2, Windows Platform

ehp_kz6597
پنج شنبه 22 دی 1390, 10:35 صبح
با تشکر از جناب saina2006 (http://barnamenevis.org/member.php?16464-saina2006)
الف - سوال قبل را با while پیاده سازی کنید.
ب -آیا هر کد نوشته شده با حلقه while را میتوان به for تبدیل کرد و برعکس ؟ در صورتی که پاسخ به این سوال منفی است با دلیل و مثال نقض اثبات کنید (2 نمره :لبخند:)

saina2006
پنج شنبه 22 دی 1390, 19:07 عصر
x=input("Enter text and end it with ...")
noOfSpace=0
i=0
while not x[i:i+3]=="...":
if x[i]==" ":
noOfSpace+=1
i+=1
print("Total no of spaces is %d" % noOfSpace)

Python 3.2, Windows Platform

به نظر من میشه چون در حقیقت for شکل دیگه ای از while هست

ASedJavad
جمعه 23 دی 1390, 02:22 صبح
ب -آیا هر کد نوشته شده با حلقه while را میتوان به for تبدیل کرد و برعکس ؟ در صورتی که پاسخ به این سوال منفی است با دلیل و مثال نقض اثبات کنید[/COLOR] (2 نمره :لبخند:)

ساخت حلقه بینهایت با دستور for فکر میکنم یه خورده مشکله
با زبونی مثل vb مطمئنم به این راحتیا نمیشه ولی با اون چیزی که از پایتون دیدم احساس میکنم با یک کم تلا ش بشه.
اصلا میتونه سوال بعدیت همین باشه:
ساخت حلقه بینهایت با for
!!!

saina2006
جمعه 23 دی 1390, 06:21 صبح
ساخت حلقه بینهایت با دستور for فکر میکنم یه خورده مشکله
با زبونی مثل vb مطمئنم به این راحتیا نمیشه ولی با اون چیزی که از پایتون دیدم احساس میکنم با یک کم تلا ش بشه.
اصلا میتونه سوال بعدیت همین باشه:
ساخت حلقه بینهایت با for
!!!
ساخت حلقه بینهایت با for خیلی ساده هست فقط کافیه start=1 وend=0 و step=1 باشه

ehp_kz6597
جمعه 23 دی 1390, 15:07 عصر
با تشکر از دوستان



ForLoop (http://wiki.python.org/moin/ForLoop)
؟ When do I use for loops
For loops are traditionally used when you have a piece of code which you want to repeat n number of times. As an alternative, there is the WhileLoop, however, while is used when a condition is to be met, or if you want a piece of code to repeat forever

WhileLoop (http://wiki.python.org/moin/WhileLoop)
؟ When do I use them
While loops, like the ForLoop, are used for repeating sections of code - but unlike a for loop, the while loop will not run n times, but until a defined condition is met. As the for loop in Python is so powerful, while is rarely used, except in cases where a user's input is required


با توجه به توضیحات رسمی پایتون ، میشه این طور برداشت کرد که برعکس برخی زبانهای دیگه که تبدیل این دو حلقه به هم راحت تر انجام میشه ، اینجا قرار نیست شما اصلا اینو جای اون استفاده کنید و از اون مهمتر انگار شما نباید با for یه حلقه بینهایت ایجاد کنید :متفکر: (به لینکهای بالا مراجعه کنید)
ولی خب اگه کسی حال داشت بشینه اینو بررسی کنه و جوابشو اینجا بذاره

ساخت حلقه بینهایت با for یه کوچولو ور رفتم هنگ کردم و ctrl + alt + delete > end process :گیج:

r00tkit
جمعه 23 دی 1390, 15:16 عصر
دوستان اگه تکنیک خاصی توی کد هاشون استفاده می کنن ان ها رو شرح بدن مثلا همین string slicing که به کار رفته
http://rgruet.free.fr/PQR27/PQR2.7.html

ehp_kz6597
شنبه 24 دی 1390, 10:29 صبح
برنامه ای بنویسید که عدادی را از ورودی دریافت کند و درصورتی که تعداد ارقام عدد فرد است و یک رقمی نیست وارون آن را چاپ کند و در غیر اینصورت --- را چاپ کند
برنامه باید با ورود هر عدد خروجی را در همان لحظه نمایش دهد
این برنامه زمانی به پایان میرسد که کاربر عبارت exit را تایپ کند
ورودی : 123 خروجی : 321 ورودی : 9 خروجی :---

ASedJavad
شنبه 24 دی 1390, 16:55 عصر
یه نمونه حلقه تا حدودی بینهایت با for در python 2.7 در ویندوز:
البته نمیشه گفت به طور کامل حلقه بینهایته ولی تا جایی که حافظه یاری کنه، کار میکنه ظاهرا!


a=[1]
for i in a:
a.append(1)

این چیزی بود که به ذهن من رسید
هرچند نه سرعتش مناسبه و نه میزان استفاده از حافظش
ولی بالاخره کار میکنه!

حالا با اجازه میخوام دوباره همین سوال رو مطرح کنم که

-آیا هر کد نوشته شده با حلقه while را میتوان به for تبدیل کرد و برعکس ؟ در صورتی که پاسخ به این سوال منفی است با دلیل و مثال نقض اثبات کنید

r00tkit
شنبه 24 دی 1390, 19:34 عصر
دوستان سوالات رو کمی پیچیده تر کنن ( استفاده از keyword های بیشتری از زبان منظورمه به طوری که از خود زبان چیز یاد بگیریم )

saina2006
یک شنبه 25 دی 1390, 03:34 صبح
while True:
num=""
numrev=""
num=str(input("Enter a number [For exit enter exit]: "))
if num=="exit":
break
if len(num)==1:
print("---")
continue
if len(num)%2 !=1:
continue
for i in range(len(num)-1,-1,-1):
numrev+=num[i]
print("Reverse Number is: %s" % numrev)


Phython 3.2, Windows Platform

IamOverlord
یک شنبه 25 دی 1390, 11:20 صبح
-آیا هر کد نوشته شده با حلقه while را میتوان به for تبدیل کرد و برعکس ؟ در صورتی که پاسخ به این سوال منفی است با دلیل و مثال نقض اثبات کنید

حلقه ی For از روی While ساخته شده، یعنی حالت خاصی از While هست.

black phoenix
یک شنبه 25 دی 1390, 11:40 صبح
while True:

num=""

numrev=""

num=str(input("Enter a number [For exit enter exit]: "))

if num=="exit":

break

if len(num)==1:

print("---")

continue

if len(num)%2 !=1:

continue

for i in range(len(num)-1,-1,-1):

numrev+=num[i]

print("Reverse Number is: %s" % numrev)





سلام
میشه یه توضیح راجع به کدتون بدید؟

ehp_kz6597
یک شنبه 25 دی 1390, 16:35 عصر
سلام
الان از سر امتحان اومدم . سرم داره منفجر میشه ، چشام داره میترکه و حالم شبیه اینه :گیج: . اگه مطلب چرت و پرتی دیدید به بزرگواری ببخشید :چشمک:

میشه یه توضیح راجع به کدتون بدید؟ خب اینکه توضیح خاصی نمیخواد
تازمانی که حلقه while درست است (حلقه بینهایت ) ، ورودی را از کاربر میگیرد و در num قرار میدهد .برنامه مقدار num را چک میکند که اگر برابر exit باشد حلقه خاتمه می یابد (دستور breack ) . سپس ( len(num ، یعنی طول ورودی کاربر ، را بررسی میکند . در صورتی که برابر 1 بود ، یعنی عدد وارد شده تک رقمی بود "---" چاپ میشود .
len(num)%2 !=1 این کد هم بررسی میکنه که اگر طول عدد وارد شده فرد باشد ، از ادامه حلقه منصرف شده و دور بعد شروع میشود (دوباره از کاربر درخواست ورودی میکند ) // البته قرار بود که در این حالت نیز همون "---" چاپ شود ولی خب تو کلیت جواب تاثیری نداره
اگر همه شرایط روبه راه بود میاد و از طول عبارت وارد شده منهای 1 تا 1- رو یکی یکی دنده عقب میره یعنی مثلا 5 4 3 2 1 0 و کاراکتر ها رو چاپ میکنه
---------------------------------------------------
اینجا قرار بر اینه که بیشتر سوال و راه حل ببینیم و با نکات ریز آشنا بشیم . خیلی وقتا راهایی هست که یا نمیدونیم یا تو اون لحظه به ذهنمون نمیاد و ...
پس دیگه توضیح مفصل برای کدها داده نخواهد شد
-------------------------------------------------

حلقه ی For از روی While ساخته شده، یعنی حالت خاصی از While هست. با قسمت دوم موافقم ولی با قطعیتی که تو قسمت اول وجود داره کمی مشکل دارم .
1- فقط تو پایتون اینجوره ؟
2- یعنی کامپایلر و یا مفسر کد for رو به while تبدیل میکنه ???? :متفکر: منبع ؟؟

دوستان سوالات رو کمی پیچیده تر کنن ( استفاده از keyword های بیشتری از زبان منظورمه به طوری که از خود زبان چیز یاد بگیریم ) اگه منظورتون keyword همون چندتا کلمه کلیدی هست که با دستور help >keyword نشون میده که فکر کنم به همین ترتیب که پیش بریم تا چند سوال دیگه تقریبا همشون حداقل یکبار مورد استفاده قرار میگیرن ، اگه نه لطف کنید کمی بیشتر توضیح بدید ممنون میشم
به عنوان مثال همین سوال قبل 6-7 تا کلمه کلیدی استفاده شده
در مورد سختی سوالات هم ، چشم ،سعی میکنم از این به بعد دو سوال در دو سطح مطرح کنم ولی خداییش سوال هدف دار طرح کردن سخته . احتمال زیاد تا یه چند مدت دیگه سوالاتی که مطرح میکنم خودم هم تو حلش گیر کنم

ehp_kz6597
یک شنبه 25 دی 1390, 16:48 عصر
این سوال چطوره ؟
برنامه ای بنویسید که اولویت اعمال در عبارت زیر را بگونه ای تنظیم کند که نتیجه محاسبه عدد 20 شود

3*5+4-1*4/3+1

ASedJavad
دوشنبه 26 دی 1390, 03:20 صبح
فقط تو پایتون اینجوره ؟
2- یعنی کامپایلر و یا مفسر کد for رو به while تبدیل میکنه
تا اونجایی که من اطلاع دارم (هر چند اطلاعاتم خیلی ناقصه) دو تا از ساده ترین . ابتدایی ترین دستورات هر پروسسور دستور شرط و دستور پرش هست
یعنی این عبارت که "اگه شرط برقراره، بپر به خط فلان"
و این اساس کار انواع حلقه هاست.


برنامه ای بنویسید که اولویت اعمال در عبارت زیر را بگونه ای تنظیم کند که نتیجه محاسبه عدد 20 شود
سوال جالبیه!:تشویق:

saina2006
دوشنبه 26 دی 1390, 05:47 صبح
1- فقط تو پایتون اینجوره ؟
2- یعنی کامپایلر و یا مفسر کد for رو به while تبدیل میکنه ???? منبع ؟؟
کلا در کامپیوتر حلقه وحود نداره و در Assembly تمامی حلقه ها با دو دستور انجام میشه که cmp و دستورات jmp مثل jmp,jae,je,jg,jge,... و آدرس خط کد بوجود میان

saina2006
دوشنبه 26 دی 1390, 05:50 صبح
این سوال چطوره ؟
برنامه ای بنویسید که اولویت اعمال در عبارت زیر را بگونه ای تنظیم کند که نتیجه محاسبه عدد 20 شود

3*5+4-1*4/3+1

میشه یکم بیشتر توضیح بدی؟؟؟
خود برنامه اینقدر امتحان کنه تا ببینه چطور جوابش 20 میشه یا اینکه عبارت رو اینجوری بنویسیم
3*5+(((4-1)*4)/3)+1

ehp_kz6597
دوشنبه 26 دی 1390, 06:44 صبح
سلام
دقیقا.
برنامه این عبارت را دریافت میکنه و حالت های مختلف رو تست میکنه و هر حالتی رو که به جواب 20 رسید با پرانتزها چاپ میکنه . یعنی این عبارتی که شما نوشتی خروجی کدشما است.

ASedJavad
چهارشنبه 28 دی 1390, 15:02 عصر
خدمت شما:
یه عبارت ریاضی (شامل جمع، ضرب، منها، تقسیم، باقیمانده و توان) بهش میدی، بعد حاصل نهایی رو هم میدی، بهتون عبارت درست رو میده
فقط نکته ای که مهمه اینه که مثلا عبارت مورد نظر در سوال رو به صورت "3 * 5 + 4 - 1 * 4 / 3 + 1" بدید نه به صورت "3*5+4-1*4/3+1" (منظورم فاصله هاشه)

در ضمن تشکر میکنم از آقای ehp_kz6597 بابت این سوال که برا اولین بار در عمر چند ساله برنامه نویسیم، اهمیت توابع بازگشتی رو بهم نشون داد

پایتون 2.7 - سیستم عامل تست شده: سیمبین


def hesab(lst,num,k=0):
global olaviat
if len(lst)<=3:
if eval(''.join(lst))==num:
return True
else:
return False
else:
for i in range(0,len(lst)-2,2):
A=lst[:i]
A.append(str(eval(''.join(lst[i:i+3]))))
A.extend(lst[i+3:])
if hesab(A,num,k+1):
olaviat[k]=i
return True

x=str(raw_input('ebarat ra vared konid'))
n=int(input('hasel ra vared konid'))
a=x.split()
olaviat=((len(a)-3)/2)*[0]
if hesab(a,n):
for i in olaviat:
a[i]='(' + a[i] + a[i+1] + a[i+2] + ')'
del(a[i+1:i+3])
print ''.join(a)
else:
print 'Nashod......'


منتظر جوابهای دیگر عزیزان هم هستم

ehp_kz6597
جمعه 30 دی 1390, 09:48 صبح
سلام
جناب asedjavad

olaviat=((len(a)-3)/2)*[0]
تو py3 با خطای زیر مواجه شدم . تو py2 بدون مشکل اجرا شد ؟
متن خطا :TypeError: can't multiply sequence by non-int of type 'float'
اصلا اون [0] که نوشتین مربوط به چیه . به نظر میاد که به خونه صفری اشاره داره ولی برای کدوم متغیر؟

ASedJavad
جمعه 30 دی 1390, 13:15 عصر
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
>>> 4*[0]
[0, 0, 0, 0]
>>> 6*['a']
['a', 'a', 'a', 'a', 'a', 'a']


فکر کنم با این مثال معلوم میشه!

ehp_kz6597
شنبه 01 بهمن 1390, 09:09 صبح
سلام
خب الان واضح شد. خیلی ممنون
ولی انگار اون خط 20 تو py3 مشکل داره که همون خطایی که در پست قبل اشاره کردم رخ میده
دوستانی که از py3 استفاده میکنن خط 20 رو به صورت زیر تغییر بدن

olaviat=(int((len(a)-3)/2))*[0]
یعنی نتیجه اون تقسیم باید یه عدد صحیح باشه تا جواب بدست بیاد . در غیر اینصورت مثل این میمونه که بگی آقا دوتا و نیم [0] میخوام

ehp_kz6597
دوشنبه 03 بهمن 1390, 08:43 صبح
2- تابع
سلام دوستان
در این پست و پست های آینده به مبحث توابع می پردازیم (هرچند سوال قبل هم به وسیله تابع پیاده سازی شد ولی فکر کنم برای شروع سنگین بود)
برنامه ای بنویسید که با گرفتن طول اضلاع یک مثلث قائم الزاویه ، مقادیر سینوس ، کسینوس ، تانژانت و کتانژانت زوایای غیر قائم را بدست آورد. / از تابع استفاده کنید

ASedJavad
جمعه 07 بهمن 1390, 06:56 صبح
سعی کردم از هر دو نوع روش معرفی تابع استفاده کنم:
برنامه دو ضلع زاویه مورد نظر رو میگیره و چیزایی که خواسته بودید، تحویل میده:
پایتون 2.7 ویندوز:

def zele3(a,b):
a=float(a)
b=float(b)
if a>b:
return pow(a**2-b**2,0.5)
else:
return pow(b**2-a**2,0.5)
sin=lambda x1,x2:zele3(x1,x2)/max(x1,x2)
cos=lambda x1,x2:float(min(x1,x2))/max(x1,x2)
tan=lambda x1,x2:sin(x1,x2)/cos(x1,x2)
cot=lambda x1,x2:1/tan(x1,x2)
x=input("2 Zel'e zavieye morede nazar ra vared konid:\n mesal: 3,5\n")
print "sin: %f"%sin(x[0],x[1])
print "cos: %f"%cos(x[0],x[1])
print "tan: %f"%tan(x[0],x[1])
print "cot: %f"%cot(x[0],x[1])

hisalam
شنبه 08 بهمن 1390, 22:17 عصر
در حاشیه :
http://codingbat.com/python
اینجا هم حتما یه سری بزنید میتونید مسائل رو به صورت انلاین حل کنید و نتیجه رو ببینید