برنامه نویسی برای همه مهم است زیرا هیچ رایانه و یا هر نوع دستگاه دیجیتالی، بدون برنامه نویسی قادر به کارکردن نیست. افراد علاقمند به برنامه نویسی، هنگامی به توانایی کدنویسی دست مییابند، که هم آموزش صحیح دیده و هم پشتکار داشته باشند.
اگر دوست دارید با روش فکر کردن و چگونگی نوشتن یک برنامهی پایتون، بیشتر آشنا شوید، ما را همراهی کنید.
نوشتن برنامهی کاربردی با پایتون:
برنامهای بنویسید که یک عدد صحیح از کاربر بگیرد و در پاسخ اعلام کند که عدد مذکور یک عدد اول است یا خیر؟
برای حل یک مسئله، اول باید بفهمیم که سوال مورد نظر چه چیزی از ما خواسته است. در اینجا ابتدا باید یک عدد صحیح از کاربر بگیریم که با وارد کردن دستور ورودی، آن را انجام میدهیم.
در قسمت بعدی، از ما خواسته شده که اول بودن، عدد ورودی را بررسی کنیم. که ما نخست باید بدانیم، عدد اول چیست؟ و سپس برای تشخیص آن، از چه الگوریتمی استفاده کنیم؟
الگوریتم، مجموعه دستورالعملهای پشت سر هم و مرتبی است که به رایانه میدهیم تا با اجرای به ترتیب آنها، مسائل را حل کند. هر مسئله میتواند از طریق چندین الگوریتم، حل شود اما الگوریتمی کاراتر است که بهینه شده و از سرعت بالاتری برخوردار باشد.
عدد اول چیست؟
همانطور که میدانید به صورت خلاصه، عددی را عدد اول گویند که به جز عدد یک و خودش، به هیچ عدد دیگری بخشپذیر نباشد.
اگر هر عدد را بر اعداد کوچکتر از خودش تقسیم کنیم و فقط به یک بخشپذیر باشد، عدد اول است. برای این امر، از الگوریتمهای مختلفی میتوان استفاده کرد که در این مقاله، از سه الگوریتم متفاوت برای پیاده سازی برنامهی تشخیص عدد اول در پایتون استفاده میکنیم. تا شما کاربرد الگوریتم در برنامهنویسی را بهتر درک کنید.
الگوریتم اول
الگوریتم اول برنامهی تشخیص عدد اول در پایتون به این صورت است:
یک عدد بگیر و در number قرار بده.
یک جمعکنندهی تعداد مقسومعلیهها به نام accumulator انتخاب کن و 0 را در آن قرار بده.
یک شمارنده به نام i را انتخاب کن و 1 را در آن قرار بده.
اگر باقیماندهی تقسیم number بر i مساوی 0 باشد، یک واحد به مقدار accumulator اضافه کن.
یک واحد به مقدار i اضافه کن.
اگر مقدار i کوچکتر مساوی number است، به گام 4 برگرد.
اگر مقدار accumulator مساوی 2 است، پیغام "عدد شما، عدد اول است" را چاپ کن و به گام 10 برو.
پیغام "عدد شما، عدد اول نیست" را چاپ کن.
به اجرای الگوریتم خاتمه بده.
نوشتن کد:
ابتدا یک عدد را از کاربر میگیریم. برای گرفتن ورودی از کاربر، از دستور input() و برای تبدیل رشته به عدد صحیح از دستور int() استفاده میکنیم. عدد ورودی را در متغیر number قرار میدهیم. به این صورت:
number =int(input('please input your number: '))
اکنون متغیر accumulator که جمعکنندهی تعداد مقسومعلیهها است، را تعریف میکنیم و عدد 0 را به آن اختصاص میدهیم. به این صورت:
accumulator = 0
برای تقسیم عدد ورودی بر اعداد کوچکتر مساوی خودش، از یک حلقهی تکرار for استفاده میکنیم. از آنجا که قصد داریم خود متغیر number نیز در حلقه باشد، یک را به آن اضافه میکنیم.
در حلقه، اگر باقیماندهی تقسیم ورودی بر عدد جاری حلقه، برابر صفر بود یکی به متغیر accumulator اضافه میکنیم. به این صورت:
for i in range(1, number+1):
if number % i == 0:
accumulator +=1
وقتی حلقهی ما به پایان میرسد، باید مقدار متغیر accumulator را بررسی کنیم. اگر مساوی 2 بود، پیغام "عدد اول است" و در غیر اینصورت پیغام " عدد اول نیست" را چاپ میکنیم. برای این کار از دستور if-else استفاده میکنیم. به این صورت:
if accumulator == 2:
print('your number is prime')
else:
print('your number is not prime')
ما به راحتی توانستیم با این الگوریتم ساده، برنامهی پایتون تشخیص عدد اول را بنویسیم. کد این برنامه را میتوانید در زیر ببینید.
number = int(input('please input your number: '))
accumulator = 0
for i in range(1, number+1):
if number%i == 0:
accumulator+=1
if accumulator==2:
print('your number is prime')
else:
print('your number is not prime')
الگوریتم دوم:
در الگوریتم اول با استفاده از یک جمعکنندهی تعداد مقسومعلیهها توانستیم برنامهای بنویسیم که عدد اول را تشخیص دهد. اکنون میخواهیم از الگوریتمی استفاده کنیم که برای پیاده سازی برنامهی تشخیص عدد اول در پایتون، نیاز به جمعکنندهی تعداد مقسومعلیهها ندارد.
یک عدد بگیر و در number قرار بده.
اگر number کوچکتر مساوی یک است، پیغام "عدد شما، عدد اول نیست" را چاپ کن و به گام 8 برو.
یک شمارنده به نام i انتخاب کن و مقدار 2 را در آن قرار بده.
اگر باقیماندهی تقسیم number بر i مساوی 0 است، پیغام "عدد شما، عدد اول نیست" را چاپ کن و به گام 8 برو.
یک واحد به مقدار i اضافه کن.
اگر مقدار i کوچکتر از number / 2 است، به گام 4 برگرد.
پیغام "عدد شما، عدد اول است" را چاپ کن.
به اجرای کد خاتمه بده.
نوشتن کد:
مانند کد قبلی، ابتدا از کاربر یک عدد صحیح میگیریم و در متغیر number ذخیره میکنیم. به این صورت:
number = int( input('please input your number: '))
با استفاده از دستور شرطی if-else، اگر عدد ورودی بزرگتر از یک باشد، برای بررسی به بلوک if هدایت میشود. و اگر عدد یک باشد در بلوک else پیغام "عدد شما، عدد اول نیست" چاپ میشود. به این صورت:
if number > 1:
pass
else:
print('your number is not prime')
اکنون به سراغ نوشتن کدهای بلوک if میرویم. طبق الگوریتم ما باید عدد ورودی را بر اعداد 2 تا نصف خودش، برای بخشپذیر بودن بررسی کنیم. پس یک حلقهی تکرار for با دامنهی اعداد از 2 تا عدد ورودی تقسیم بر 2 مینویسیم. به این صورت:
for i in range(2 , number // 2):
نکته: از آنجا که الگوریتم خوب، باید بهینه شده باشد، ما عدد ورودی را تا نصف خودش بررسی میکنیم. زیرا هر عدد اگر تا نصف خودش بر عددی بخشپذیر نباشد، بر اعداد بزرگتر از نصفش نیز، بخشپذیر نیست.
در حلقه، اگر باقیماندهی تقسیم عدد ورودی بر i مساوی صفر بود، پیغام " عدد اول نیست" را چاپ میکنیم. سپس با استفاده از دستور break برنامه را به پایان میرسانیم. به این صورت:
if number % i == 0:
print('your number is not prime')
break
نکته: چون عدد یک و number در حلقه نیستند، اگر number بر هر عددی بخشپذیر باشد، آن عدد، اول نیست.
پلهی آخر:
اما اگر حلقهی for بدون هیچ اتفاقی به پایان برسد، در یک else پیغام "عدد اول است" را چاپ میکند. به این صورت:
else:
print('your number is prime')
اشکالزدایی کد:
در این الگوریتم، به دلیل آن که عدد ورودی را بر 2 تقسیم میکنیم، هنگام وارد کردن عدد 4، آن تبدیل به عدد 2 شده و به اشتباه یک عدد اول شناخته میشود. برای رفع این مشکل، قبل از حلقه For یک شرط مینویسیم تا عدد 4 وارد حلقه نشود. به این صورت:
...
if number > 1:
if number == 4:
print('your number is not prime')
else:
for i in range(2 , number//2):
...
راهحل سادهتری نیز وجود دارد، به این صورت که در if اول، یک شرط به صورت and اضافه شود، که عدد ورودی مساوی 4 نباشد. در کد کامل شده ما، میتوانید این مورد را مشاهده کنید.
به این طریق ما به کمک الگوریتمی دیگر توانستیم برنامهی پایتون تشخیص عدد اول را بنویسیم. کد این برنامه به این صورت است:
number = int(input('please input your number: '))
if number > 1 and number != 4:
for i in range(2 , number//2):
if number % i == 0:
print('your number is not prime')
break
else:
print('your number is prime')
else:
print('your number is not prime')
نکتهی حائز اهمیت، این است که الگوریتم دوم به دلیل بررسی number/2، بهینهتر و از سرعت بالاتری برخوردار است. پس برای نوشتن برنامههایتان، الگوریتمی استفاده کنید که بهینهشده باشد، زیرا سرعت اجرای برنامه بیشتر و حافظه کمتری اشغال میکند. در الگوریتم بعدی، کد ما بهینهتر خواهد شد.
الگوریتم سوم:
در الگوریتم سوم برنامهی تشخیص عدد اول در پایتون قصد داریم از الگوریتمی استفاده کنیم که خیلی بهینهشدهتر و سریعتر است. در این الگوریتم به جای آن که تا عدد ورودی بررسی شود، تا جذر عدد ورودی بررسی خواهد شد.
یک عدد بگیر و در number قرار بده.
اگر number کوچکتر مساوی 1 است، پیغام "عدد شما، عدد اول نیست" را چاپ کن و به گام 10 برو.
اگر number کوچکتر مساوی 3 است، پیغام "عدد شما، عدد اول است" را چاپ کن و به گام 10 برو.
اگر باقیماندهی تقسیم number بر 2 یا باقیماندهی تقسیم number بر 3 مساوی 0 است، پیغام "عدد شما، اول نیست" را چاپ کن و به گام 10 برو.
یک شمارنده به نام i انتخاب کن و عدد 5 را در آن قرار بده.
اگر باقیماندهی تقسیم number بر i یا باقیماندهی تقسیم number بر i+2 مساوی 0 است، پیغام "عدد شما، عدد اول نیست را چاپ کن و به گام 10 برو.
مقدار 6 را به i اضافه کن.
اگر i*i کوچکتر مساوی number است، به گام 6 برگرد.
پیغام "عدد شما، عدد اول است" را چاپ کن.
به اجرای الگوریتم خاتمه بده.
نوشتن کد:
طبق موارد قبلی، ابتدا یک ورودی از کاربر میگیریم. به این صورت:
number = int( input('please input your number: '))
براساس الگوریتم، برای آن که برنامه در هر گام به پایان برسد، آن را در حلقهای نوشته که یکدور میزند. پس ما از یک حلقهی while استفاده میکنیم و یک متغیر boolean به نام active با مقدار True تعریف میکنیم. به این صورت:
active = True
while active:
pass
در داخل حلقه، با شرط اول، اگر number کوچکتر مساوی یک باشد، پیغام "عدد اول نیست" چاپ میشود. سپس با دستور break از برنامه خارج میشود. به این صورت:
if number <= 1 :
print('your number is not prime')
break
با عدم برقراری شرط اول، با شرط دوم، اگر number کوچکتر مساوی 3 باشد، پیغام "عدد اول است" چاپ میشود. سپس با دستور break از برنامه خارج میشود. به این صورت:
if number <= 3 :
print('your number is prime')
break
با برقرار نبودن شرط دوم، به سراغ نوشتن شرط سوم میرویم. اگر باقیماندهی تقسیمهای number بر 2 یا number بر 3، مساوی 0 باشد، پیغام "عدد اول نیست" چاپ میشود. سپس با دستور break از برنامه خارج میشود. به این صورت:
if number % 2 == 0 or number % 3 == 0 :
print('your number is not prime')
break
اکنون به گام 5 الگوریتم میرسیم، یک متغیر به نام i تعریف کرده و 5 را به آن اختصاص میدهیم. سپس یک حلقهی while مینویسیم که تا شرط i*i کوچکتر مساوی number باشد، ادامه پیدا میکند. به این صورت:
i = 5
while i * i <= number :
pass
در حلقه، اگر باقیماندهی تقسیمهای number بر i یا number بر i+2، مساوی 0 باشد، پیغام "عدد اول نیست" را چاپ میکند. سپس با دستور break از برنامه خارج میشود، در غیر این صورت مقدار 6 را به i اضافه میکند. به این صورت:
i = 5
while i * i <= number:
if number % i == 0 or number % (i + 2) == 0 :
print('your number is not prime')
break
i = i + 6
پلهی آخر:
اکنون برای آن که حلقهی while اولی به پایان برسد، مقدار متغیر active را به False تغییر میدهیم. سپس پیغام "عدد شما، یک عدد اول است" را چاپ میکنیم. به این صورت:
active = False
print('your number is prime')
به این ترتیب، ما با یک الگوریتم سریع و بهینه، موفق به نوشتن یک برنامه پایتون تشخیص عدد اول شدیم. کد کامل این الگوریتم را در زیر ببینید.
number = int(input('please input your number: '))
active = True
while active:
if number <= 1:
print('your number is not prime')
break
if number <= 3:
print('your number is prime')
break
if number % 2 == 0 or number % 3 == 0:
print('your number is not prime')
break
i = 5
while i * i <= number:
if number % i == 0 or number % (i + 2) == 0:
print('your number is not prime')
break
i = i + 6
active = False
print('your number is prime')
نوشتن تابع تشخیص عدد اول:
برای نوشتن یک تابع برای تشخیص اول بودن اعداد، میتوانیم از هر سه الگوریتم بالا استفاده کنیم. اما ما ترجیح میدهیم از الگوریتم سوم استفاده کنیم زیرا بهینهتر است.
توضیحات کافی در خصوص هر سه الگوریتم در برنامهنویسی دادیم. فقط لازم است بدانید، خروجی تابع ما یک boolean است. اگر عدد ورودی، اول باشد، خروجی True و اگر عدد اول نباشد، خروجی False خواهد بود. کد تابع ما به این صورت خواهد بود:
def isPrime(n) :
if (n <= 1) :
return False
if (n <= 3) :
return True
if (n % 2 == 0 or n % 3 == 0) :
return False
i = 5
while (i * i <= n) :
if (n % i == 0 or n % (i + 2) == 0) :
return False
i = i + 6
return True
# ==================== end of function
number = int( input('please input your number: '))
if isPrime(number) :
print('your number is prime')
else :
print('your number is not prime')
جمعبندی
با نوشتن یک برنامهی کاربردی پایتون، با سه الگوریتم و روش مختلف به شما نشان دادیم که یک برنامه نویس، چگونه باید تفکر الگوریتمی داشته باشد و چگونه یک الگوریتم را به کد تبدیل کند. تمامی الگوریتمها در مقادیر کوچک، مشکل سرعت نخواهند داشت و این محاسبه اعداد بزرگ است که نشان میدهد آیا یک الگوریتم و برنامهی پایتون بهینهشده است یا خیر؟ لذا شما در حین اینکه برنامهنویسی میآموزید، به سراغ یادگیری الگوریتمها نیز بروید تا توانایی بهینهسازی برنامههایتان را داشته باشید.
در قسمت بعدی این مجموعه مقالات نوشتن برنامهی مقلوب یک عدد در پایتون، را به شما آموزش خواهیم داد. با ما همراه باشید.
اگر به یادگیری بیشتر در زمینهی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دورهی آموزش پایتون توسعه وب در آینده میتونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزهی هوش مصنوعی هم شوی.
۶۵ دیدگاه
فاطمه۱۷ آبان ۱۴۰۲، ۱۵:۱۹
سلام وقت بخیر اگه بخایم از روش اولی که گذاشتید اعداد اول رو ابتدا از کاربر بگیره و اعداد اول قبل از اون عدد رو نمایش بده چجوری؟
نازنین کریمی مقدم۲۳ آبان ۱۴۰۲، ۲۰:۳۷
درود
میتونید از جواب تیک خورده تاپیک زیر استفاده کنید:
https://stackoverflow.com/questions/27439898/printing-prime-numbers-up-to-a-users-input
Diyar۲۱ آذر ۱۴۰۲، ۰۵:۴۱
اگه بخواهید کمک کنم شما رو
حنا۰۷ مهر ۱۴۰۲، ۱۷:۰۶
سلام چرا چیزی ندارید که با شما ارتباط گرفت دوره پایتون دارید ؟
نازنین کریمی مقدم۲۴ مهر ۱۴۰۲، ۰۵:۵۶
درود
پایتون در حوزههای مختلف کاربرد داره و بهتره یک حوزه رو انتخاب کنید و در اون زمینه پایتون رو قوی کنید.
ما سه دوره پایتون مقدماتی - پایتون وب و پایتون هوش مصنوعی داریم که از بخش دورههای آموزشی میتونید سرفصلهای هرکدوم رو ببینید.
برای تماس با ما میتونید از راههای ارتباطی که در پایین صفحه قرار دادیم استفاده کنید.
Alireza Maleki۰۷ مهر ۱۴۰۲، ۱۲:۴۲
سلام روزتون بخیر
من متوجه نشدم که چرا در روش سوم در گام پنج به i مقدار 6 تا اضافه میکنیم؟
نازنین کریمی مقدم۲۴ مهر ۱۴۰۲، ۱۱:۰۱
درود
یکم پایینتر آقای مولایی درموردش در کامنتها توضیح دادند، بی زحمت همون رو مطالعه کنید که اطلاعات تکراری صفحه رو شلوغ نکنه.
علی عبداللهی۰۶ مهر ۱۴۰۲، ۰۶:۵۴
درود
الگوریتم سوم ایراد دارد برای ورودی 25 یا 55 نتیجه هم عدد اول و هم عدد غیر اول میدهد
your number is not prime
your number is prime
الگوریتم صحیح به صورت زیر است.
n = int(input('number: '))
flag = True
if n <= 1:
flag = False
elif n <= 3:
flag = True
elif n % 2 == 0 or n % 3 == 0:
flag = False
else:
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
flag = False
break
i += 6
if flag:
print('prime')
else:
print('NOT prime')
نازنین کریمی مقدم۲۴ مهر ۱۴۰۲، ۱۱:۰۳
درود
بله حق باشماست. ممنون که با ما همراه هستید و به دوستان سون لرنی کمک میکنید.
۲۰ شهریور ۱۴۰۲، ۰۳:۵۳
تشکر
۰۸ مرداد ۱۴۰۲، ۱۰:۵۱
سلام امکانش هست داخل همین دستور بجای گرفتن عدد از کاربر خودمون با range نشون بدیم؟
نازنین کریمی مقدم۱۵ مرداد ۱۴۰۲، ۱۰:۲۱
درود
بله میشه. بستگی به سوال داره اگر گفته بود از کاربر دریافت کنه این کد وگرنه کد شما هم درست هست.
۲۳ اردیبهشت ۱۴۰۲، ۱۷:۱۵
امکانش هست اون سوال جمع اعداد اخر بعد از سوال پرسیدن اگر یس بود جمع ببنده؟کدش رو بنویسین
نازنین کریمی مقدم۰۲ خرداد ۱۴۰۲، ۱۰:۰۲
درود
یه نمونه کد در <a href="https://stackoverflow.com/questions/638048/how-do-i-sum-the-first-value-in-each-tuple-in-a-list-of-tuples-in-python" target="_blank" rel="noopener nofollow ugc">تاپیک جمع تاپلها</a> وجود داره میتونید از همون استفاده کنید.
۲۳ اردیبهشت ۱۴۰۲، ۰۵:۲۰
سلام ،من یه سوال داشتم و مدت هاست گیر کردم،،من فرض کنید ۳ تا لیست دارم،،
(1,2,3),,,(5,7,9),,,(90,78,65) ,بعد میخوام بیام از کاربر مثلا سوال کنه با یس و نو،،اگه یس بود اعداد اخر هر مجموعه رو با هم جمع کنه،و اگر نو بودش اونو جمع نکنه،،چی کااااار کنم
نازنین کریمی مقدم۲۳ اردیبهشت ۱۴۰۲، ۰۶:۳۰
درود
فرآیند سوال کردنش که با یه اینپوت گرفتن از کاربر و چک کردنش اوکی میشه.
اما برای جمع مقادیر باید اول هر لیست رو به یک عضو از آرایه numpy یا همون np.array تبدیل کنید و بعد با استفاده از حلقه خانه آخر هر یک رو جمع کنید.
۲۳ دی ۱۴۰۱، ۲۰:۵۳
من اینو خودم نوشتم
x=2
print(&#39;adad ra vared kon&#39;)
i=int(input())
while x&lt;i:
if i%x ==0:
print(&#39;aval nist&#39;)
print(x)
break
x+=1
continue
if x==i:
print(&#39;aval ast&#39;)
نازنین کریمی مقدم۲۵ دی ۱۴۰۱، ۱۱:۱۸
متاسفانه چون فواصل در پایتون هست و اینجا بهم میریزه نمیتونم درستی کدتون رو تمام و کمال تایید کنم اما ممنون بابت اشتراک گذاری تلاش تون :)
۰۳ آذر ۱۴۰۱، ۰۶:۱۶
سلام . ببخشید ایا الگوریتمی وجود دارد که ورودی نداشته نباشد ؟ اگه وجود دارد میشه یک مثال بزنید .
نازنین کریمی مقدم۰۵ آذر ۱۴۰۱، ۲۱:۱۷
درود
اغلب الگوریتمها ورودی دارند اما بله امکانش هست.
فرض کنید که سوال این باشه که دنباله اعداد اول یا اعداد زوج یا فیبوناچی و... رو چاپ کنید. اینجا ورودی ندارید و خودتون از یک شروع میکنید و پیش میرید.
۱۸ آبان ۱۴۰۱، ۱۹:۱۴
سلام
اگر بخواییم برنامه ای بنویسیم که ،عددی وارد کنیم و تعداد اعداد اول قبلشو بهمون بگه چجوری باید نوشت؟
نازنین کریمی مقدم۲۰ آبان ۱۴۰۱، ۱۴:۲۸
درود
عدد وارد شده رو در یک متغیر بریزید.
کافیه یک حلقه بنویسید که از 1 تا اون متغیر تکرار میشه.
در بدنه حلقه هم کافیه یکی از الگوریتمهای بالا رو بذارید و هروقت عدد اولی رو تشخیص داد، به تعداد یکی اضافه کنه.
درنهایت تعداد رو چاپ میکنید.
۰۹ آبان ۱۴۰۱، ۱۵:۴۲
من 13 سالمه و همینو خیلی ساده اینطوری حل کردم
adad=int(input(&quot;adad?&quot;))
aadad=[]
for i in range(1,adad+1):
if adad%i==0:
aadad.append(i)
print(&#39;inAdadBar&#39;,aadad,&#39;bakhshPazirAsr!!&#39;)
if len(aadad)==2:
print(&quot;adadAvalAst&quot;)
else :
print(&quot;adadMorakabAst&quot;)
۲۱ شهریور ۱۴۰۱، ۱۲:۵۹
سلام ممنون میشم پاسخ بدین?
برنامه ای بنویسید که ابتدا اعضای یک لیست را خوانده سپس از طریق نمایش یک منو و انتخاب گزینه ای توسط کاربر اعمال زیر را انجام دهد
۱)عضوی را به لیست اضافه میکند
۲)عضوی را در مکان خاص از لیست درج میکند
۳)اعضای لیست را مرتب میکند
۴)عضوی را از لیست حذف کند
۵)تعداد تکرار مقادیر را در لیست شمارش کند
۶)مکان یک مقدار را در لیست پیدا کند
۷) خروج
نازنین کریمی مقدم۲۲ شهریور ۱۴۰۱، ۰۸:۲۱
درود
بحث <a href="https://www.w3schools.com/python/python_lists.asp" target="_blank" rel="noopener nofollow ugc">لیست رو از سایت w3schools</a> پیش برید خوب توضیح داده.
۲۸ مرداد ۱۴۰۱، ۱۴:۰۳
روش نوشتن کد این چجوریه
تعداد اعداد اول زیر ۱۰۰۰
نازنین کریمی مقدم۲۹ مرداد ۱۴۰۱، ۰۷:۱۰
درود
کافیه یک حلقه بنویسید که از 1 تا هزار تکرار میشه.
در بدنه حلقه هم کافیه یکی از الگوریتمهای بالا رو بذارید و هروقت عدد اولی رو تشخیص داد، به تعداد یکی اضافه کنه.
درنهایت تعداد رو چاپ میکنید.
علیرضا دهنوی۲۵ مرداد ۱۴۰۱، ۰۷:۲۹
سلام وقت بخیر اگر عددی بگیریم و بخواییم کوچکترین عدداولی که تعداد رقم هاش با عدد ورودی یکیه بنویسید
نازنین کریمی مقدم۲۶ مرداد ۱۴۰۱، ۰۴:۴۴
درود
باید اول براساس تعداد ارقام یک شرط بگذاریم که اگر مثلا سه رقمی بود از 100، اگر دو رقمی بود از 10 و... شروع کنه.
بعد در یک حلقه اعداد رو چک کنه تا به عدد اول برسه و اون رو چاپ کنه.
۲۳ مرداد ۱۴۰۱، ۱۱:۳۰
اگر بخوایم برنامه n عدد مشخص از کاربر بگیره و تعداد اعداد اولشون رو مشخص کنه ،چه جوری میشه این برنامه؟
نازنین کریمی مقدم۲۴ مرداد ۱۴۰۱، ۰۵:۲۹
درود
کافیه تعداد عدد مشخص رو از کاربر بگیرید و در یک متغیر بریزید، بعد یک حلقه بنویسید که شمارنده اش همون متغیری هست که درنظر گرفتید.
در بدنه حلقه هم کافیه یکی از الگوریتمهای بالا رو بذارید.
۰۹ مرداد ۱۴۰۱، ۰۸:۳۷
روش سوم برای عدد 96998989 دچار باگ میشود ---- روش دوم خطای کمتری دارد
۰۲ مرداد ۱۴۰۱، ۲۰:۳۸
سلام میشه یه توضیحی در مورد for وrenge بدید و همچنین ارتباتشون
نازنین کریمی مقدم۰۳ مرداد ۱۴۰۱، ۰۴:۱۳
درود
حلقه for یک کار رو به تعداد مشخصی تکرار میکنه. یعنی مثلا در کد زیر عبارت سلام 10 بار اجرا میشه.
<code>
for n in range(10):
print("سلام")</code>
تابع range یک بازه از اعداد رو تولید میکنه که در مثال بالا 0 تا 10 هست.
پیشنهاد میکنم به بخش <a href="https://7learn.com/course/programming-alphabet" rel="noopener" target="_blank">شروع برنامه نویسی</a> سر بزنید.
۱۴ تیر ۱۴۰۱، ۰۹:۰۷
وقت بخیر
در برنامه تشخیص عدد اول
هرزمان که سیستم عدد اول را تشخیص میدهد از برنامه خارج میشود.
به عبارتی چطور میتوان کدی داد که تا زمانی که متلا x را اعلام نکردم، دوباره سیستم از ما ورودی بخواهد
نازنین کریمی مقدم۱۸ تیر ۱۴۰۱، ۰۶:۵۸
درود
باید کل الگوریتم رو درون یک حلقه while بنویسید تا طبق شرط شما دائم اجرا بشه.
۱۹ خرداد ۱۴۰۱، ۱۹:۰۷
سلام اگه بگن تا زمانیکه کاربر عدد مثبت وارد میکند اعدار زوج کوچیکتر از آن را در خروجی نمایش بدهید این سوال چطور میشه حل کرد؟
نازنین کریمی مقدم۲۰ خرداد ۱۴۰۱، ۰۰:۱۶
درود
مراحل به این ترتیب هست:
۱. گرفتن ورودی و ذخیره در یک متغیر
۲. چک کردن اینکه مثبت هست یا نه.
۳. اگر مثبت بود در یک حلقه از یک تا اون عدد رو چاپ کنه. درغیر این صورت برنامه تموم بشه.
۴. برای اینکه تا زمانی که کاربر عدد مثبت وارد کرد این روند ادامه پیدا کنه، بهتره مراحل ۲ و ۳ داخل یک تابع نوشته بشه و به ازای هر ورودی فراخوانی بشه.
۰۹ اردیبهشت ۱۴۰۱، ۱۶:۰۳
عالیییی بود??✔?
۲۰ اسفند ۱۴۰۰، ۰۷:۵۴
سلام. الگوریتم سوم پیچیدگی زمانی کمتری نسبت به الگوریتمی که برای اعداد بزرگتر از یک، بخش پذیری از 2 تا مجذور +1 بررسی میکنه، داره؟!
نازنین کریمی مقدم۲۱ اسفند ۱۴۰۰، ۱۱:۴۱
درود
الگوریتم سوم عملا داره تا n/2 رو بررسی میکنه و نسبت به سایرین که تا n بررسی میکنند کمی بهینهتر هست، وگرنه از لحاظ تعریفی مرتبه اش همچنان مشابه با سایرین میشه.
۱۵ بهمن ۱۴۰۰، ۱۰:۱۶
اگه بخواهیم این اعداد رو با وایل خالی تشخیص بدیم چجوری میشه
نازنین کریمی مقدم۱۶ بهمن ۱۴۰۰، ۰۹:۲۶
درود
کافیه در الگوریتم اول بجای خطی که for داره، جمله while رو قرار بدید.
۲۸ دی ۱۴۰۰، ۱۲:۰۲
زیبا بود
۰۸ دی ۱۴۰۰، ۱۲:۳۲
برنامتون عالیه حق مطلب رو کاملا میرسونه ممنون از شما
۰۳ دی ۱۴۰۰، ۱۸:۰۰
سلام چطوری میتونم اعداد اول در یک حلقه رو بیابم ؟
نازنین کریمی مقدم۰۴ دی ۱۴۰۰، ۰۶:۳۰
درود
منظورتون اینه که اعداد اول یک بازه رو تشخیص بدیم،
یا منظورتون اینه که تو الگوریتمش حتما از یک حلقه استفاده بشه؟
۱۹ آذر ۱۴۰۰، ۲۰:۲۴
مثلا بگن برنامه ای بنویسی که اعداد صحیح بین 10000تا100000را بیابید باید چطوری بنویسیم اون برنامه رو؟؟
نازنین کریمی مقدم۲۰ آذر ۱۴۰۰، ۰۵:۴۷
سلام
برای این کار کافیه از حلقه استفاده کنید:
<code>for i in range(10000,100001):
print(i)</code>
ali۱۰ آذر ۱۴۰۰، ۱۶:۳۵
ممنون از شما
جالبته وقتی عدد 25 به برنامه میدی
خروجی هم Prime پرینت میشه و هم not prime اما برای اعداد دیگر اینجور نیست!!!!
Nazanin KarimiMoghaddam۱۳ آذر ۱۴۰۰، ۰۶:۲۴
درود
کدوم الگوریتم تون اینطوری هست؟ چون من الگوریتم آخر رو تست میکنم چنین مشکلی نداره
۲۳ آذر ۱۴۰۰، ۰۵:۲۵
کد بالای کد آخر اون که فانکشن نیست!
number = int(input(&#39;please input your number: &#39;))
active = True
while active:
if number &lt;= 1:
print(&#39;your number is not prime&#39;)
break
if number &lt;= 3:
print(&#39;your number is prime&#39;)
break
if number % 2 == 0 or number % 3 == 0:
print(&#39;your number is not prime&#39;)
break
i = 5
while i * i &lt;= number:
if number % i == 0 or number % (i + 2) == 0:
print(&#39;your number is not prime&#39;)
break
i = i + 6
active = False
print(&#39;your number is prime&#39;)
مهدی ۰۱ آذر ۱۴۰۰، ۱۴:۵۹
سلام لطفا تشخیص عدد اول به روش حلقههای تودرتو بذارید
Nazanin KarimiMoghaddam۰۳ آذر ۱۴۰۰، ۰۶:۰۶
درود
برای اینکه دوباره کاری نشه، بی زحمت پاسخ تیک خورده از<a href="https://stackoverflow.com/questions/22007492/prime-number-python-nested-loops" target="_blank" rel="noopener nofollow ugc"> این لینک</a> رو مطالعه کنید. جواب سوالتون رو کامل میده.
بهراد تاجیک۲۲ آبان ۱۴۰۰، ۱۰:۲۹
سلام خسته نباشید.
میتونید بگید ما همین اول بودن یا نبودن رو چه جوری میتونیم با تابع بازگشتی بنویسیم؟
Nazanin KarimiMoghaddam۲۲ آبان ۱۴۰۰، ۱۰:۴۴
درود
پاسخهای <a href="https://stackoverflow.com/questions/37095508/how-do-i-find-a-prime-number-using-recursion-in-python" target="_blank" rel="noopener nofollow ugc">این لینک</a> استک رو ببینید جوابتون رو به طور کامل میگیرید.
فربد ۲۵ مهر ۱۴۰۰، ۱۰:۱۴
سلام
یک مشکلی هست اونم اینه که عدد 1 رو میدیم میگه اول نیست و اگه میشه این مشکل رو بر طرف کنید.
نازنین کریمی مقدم۲۶ مهر ۱۴۰۰، ۰۰:۰۸
درود
برای اینه که عدد یک اول نیست واقعا، در ریاضیات کوچکترین عدد اول 2 هست.
pouriya۲۳ بهمن ۱۳۹۹، ۱۷:۵۵
الگوریتم دوم باگ داره
4 رو بهش میدی پرایم میاره
من دیباگش کردم الان درستش اینه:
[code]
number = int(input(''))
while number % 2 == 0:
if number % 2 == 0:
print ('not prime')
break
else:
if number > 1:
for i in range(2 , number//2):
if number % i == 0:
print('not prime')
break
else:
print('prime')
else:
print('not prime')
[/code]
عبدالرضا مولایی۲۶ بهمن ۱۳۹۹، ۰۶:۳۵
سلام دوست عزیز،
خوشحالیم که با دقت آموزشهای ما را دنبال میکنید. در الگوریتم دوم به دلیل اینکه ما عدد ورودی را بر 2 تقسیم میکنیم، عدد 4 تبدیل به 2 شده و به اشتباه آن را یک عدد اول تشخیص میدهد. برای جلوگیری از این مشکل برای اولین راه حل کافی است یک شرط قبل از حلقهی for نوشته تا عدد 4 وارد حلقه نشود. به این طریق باگ موجود بر طرف میشود. البته یک راه حل سادهتر نیز وجود دارد که در متن اصلی قرار دادم. راه حل اول به این صورت است:
[code]
if number == 4:
print('your number is not prime')
else:
for i in range(2 , number//2):
[/code]
میثم نصرتی آذر۲۵ آبان ۱۳۹۹، ۱۰:۱۱
با سلام
ببخشید راستش من این الگوریتم سوم رو مخصوصا اونجا که i = i + 6 کرده رو متوجه نشدم ، امکانش هست بیشتر توضیح بدید؟
عبدالرضا مولایی۲۶ آبان ۱۳۹۹، ۰۷:۰۶
سلام دوست عزیز،
در این الگوریتم به جای اینکه عدد مورد نظر را بر تمامی اعداد قبل خودش تقسیم کنیم، ابتدا آن را بر 2 و 3 تقسیم میکنیم اگر بخش پذیر بود خیلی راحت متوجه میشویم که عدد اول نیست و اگر بخشپذیر نبود آن بر اعداد 5 و 7 تقسیم میکنیم و باز اگر بخش پذیر بود عدد ما اول نیست و در غیر این صورت i خود را که 5 باشد با 6 جمع میکنیم (i = i+6) و دوباره مرحله قبل را که بر 5 و 7 بود را این مرتبه با 11 و 13 امتحان میکنیم.. و این کار را ادامه میدهیم تا وقتی که i*i بزرگتر مساوی عدد مورد نظرمان شود. اگر هیچکدام از این شرایط برقرار نشد پیغام عدد ما اول است را چاپ میکنیم. امیدوارم الان بهتر متوجه شده باشید.
harez۰۶ مرداد ۱۳۹۹، ۱۱:۳۷
الگوریتم دوم باگ داره
4 رو بدی بهش prime میده
J.m۰۶ اردیبهشت ۱۳۹۹، ۰۵:۲۷
سلام , اقا زحمت کشیدید , ولی بهتر نبود کد هاتون رو اول تست میکردید بعد مینوشتید . چون خیلی اشتباه نوشته شده , مثلا در الگوریتم دوم که در اخر که کدها رو کامل نوشتید ایندنت else زیر for نوشته شده , باید زیر if باشد . اشکال دیگر اینکه جلوی کلمه break پرانتز گذاشتید!!
عبدالرضا مولایی۰۶ اردیبهشت ۱۳۹۹، ۰۹:۵۷
سلام دوست عزیز، تمامی کدها تست شده است.. درمورد else در for این از ویژگیهای زبان پایتون است اگر قصد آشنایی بیشتر در این مورد را دارید از این لینک استفاده کنید:
https://book.pythontips.com/en/latest/for_-_else.html
درمورد پرانتز در break نیز در یک مورد، اشتباه تایپی رخ داده. ممنون از اینکه اطلاع دادید.