به نام خدا
در اینجا یک سری تمرینات پایه ای و مهم پایتون رو قرار دادم که یادگیری اونها به پیشرفت شما در برنامه نویسی پایتون کمک خواهد کرد
عناوین سوالات عبارتند از :
- عدد پالیندروم(palindromic)
- لیست کردن اعداد پالبندورم به نحوی خاص و(بدون اعداد تکراری)
- خواندن درون یک فایل
- اعداد پاندیجیتال(Pandigital)
- دریافت رشته و بررسی یک شرط
- دنباله کولاتز(تابع بازگشتی)
- دنباله کولاتز(روش مستقیم)
- خواندن از روی فایل و جدا کردن آن بوسیله یک کاراکتر
فایل های مورد نیاز سوال هم در اختیار شما قرار میگیرد
و سورس کد پاسخ این سوالات بصورت کاملا رایگان در دسترس شماست 🙂
1- یک عدد پالیندروم (palindromic) یا واروخوانه است اگر با خوانده شدن از چپ به راست و از راست به چپ تغییری نکند.
برنامه ای بنوسید که اعداد پالیندروم که حاصل ضرب دو عدد 4 رقمی است را در یک لیست ذخیره کرده و لیست را نمایش دهد.(لیست نباید شامل اعداد تکراری باشد.)
مثال:
عدد 18099081 یک عدد پالیندروم است که از حاصل ضرب 4851 در 3731 ساخته می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# IN THE NAME OF GOD # mohandesjan.ir pal = [] def check(num): pow = 10 sum = 0 int(num) temp = num while temp > 0: sum = (pow * sum) + temp % 10 temp = temp // 10 if (sum == num): if num in pal: pass else: pal.append(num) for w in range(1000, 10000): for e in range(1000, 10000): check(w*e) print(pal) # mohandesjan.ir |
2- برنامه ای بنویسید که لیست اعداد کوچکتر از 1000000 را بدست آورد که در مبنای 10 و در مبنای 2 پالیندروم هستند. این اعداد باید در یک فایل به اسم palindrom.txt به فرمت زیر ذخیره شوند.
Decimal number : binary number
585:1001001001
مثال:
عدد 585 یک عدد پالیندروم است که در مبنای 2 این عدد برابر با 1001001001 است.
راهنمایی: برای تبدیل عدد به مبنای دو میتوانید از تابع bin() استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# IN THE NAME OF GOD # mohandesjan.ir def check(num): pow = 10 sum = 0 int(num) temp = num while temp > 0: sum = (pow * sum) + temp % 10 temp = temp // 10 if (sum == num): return num else: return False file = open("palindrom.txt", "w") for w in range(1000000): x = int(format(w, 'b')) a = check(w) b = check(x) if a and b: file.write(f"{a}:{b}\n") file.close() # mohandesjan.ir |
3- فایل numbers.txt شامل 200 عدد 25 رقمی است. (هر سطر شامل یک عدد)
برنامه ای بنویسید که شامل بخش های زیر باشد:
- یک تابع که با گرفتن نام فایل، فایل مورد نظر را خوانده و اعداد را به صورت integer در یک لیست ذخیره کند و لیست حاصل برگرداند.
- یک تابع بنویسید که با گرفتن لیست اعداد، یک متغیر کلید این لیست اعداد را به صورت یک فایل شامل اعداد زوج یا اعداد فرد مرتب شده تبدیل کند. متغیر کلید تعیین کننده فرد بودن یا زوج بودن لیست است.اعداد درون فایل باید به فرمت فایل اصلی و از بزرگ به کوچک مرتب شده باشند.
- در برنامه اصلی ابتدا تابع 1 و سپس 2 بار تابع 2 را فراخوانی کنید.
- توجه :فایل های مورد نیاز سورس کد ها آخر همین پست قرار داده شده که براحتی میتوانید دانلود کنید 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# IN THE NAME OF GOD # mohandesjan.ir def read_file(x=input("please enter name of file: ")): with open(x, "r") as file: z = file.read() list_number = z.split("\n") for h in range(200): list_number[h] = int(list_number[h]) print(list_number) list_number.sort(reverse=True) return list_number def odd_even(xx): string = input("Which numbers do you want?? even or odd : ") if string == "even": write_even(xx) elif string == "odd": write_odd(xx) else: print("you must type just even or odd!!!") odd_even() def write_even(xx): with open("even_numbers", "w") as evens: for g in range(200): if xx[g] % 2 == 0: evens.write(f"{str(xx[g])}\n") print("even numbers wrote in file that names : even_numbers") def write_odd(list_number): with open("odd_numbers", "w") as odds: for b in range(200): if xx[b] % 2 == 1: odds.write(f"{str(xx[b])}\n") print("odd numbers wrote in file that names : odd_numbers") xx = read_file() odd_even(xx) odd_even(xx) # mohandesjan.ir |
4- یک عدد در مبنای 10 پاندیجیتال(Pandigital) است اگر تکرار ارقام 0 تا 9 در آن عدد فقط یک بار باشد.
برنامه ای بنویسید که شامل بخش های زیر باشد.
- ابتدا تمام اعداد پاندیجیتال مبنای 10 را بدست آورید.(راهنمایی: می توانید از کتابخانه itertools و ماژول permutations کمک بگیرید)
- تابعی بنویسید که شرایط زیر را برای اعداد چک کند.
برای مثال عدد 1406357289 را درنظر بگیرید.
- 1 4 0 6 3 5 7 2 8 9
- d0 d1 d2 d3 d4 d5 d6 d7 d8 d9
- d1d2d3=406 is divisible by 2
- d2d3d4=063 is divisible by 3
- d3d4d5=635 is divisible by 5
- d4d5d6=357 is divisible by 7
- d5d6d7=572 is divisible by 11
- d6d7d8=728 is divisible by 13
- d7d8d9=289 is divisible by 17
- تمام اعدادی که شروط بالا برای آن ها صادق است را نمایش دهید.
(راهنمایی: برای چک کردن اعداد میتوانید از تبدیل اعداد به رشته و برعکس استفاده کنید.
راهنمایی: بزرگترین عدد مورد نظر سوال از 6000000000 کوچک تر است. پس می توانید تعداد اعداد برای بررسی شدن را محدود تر کنید.)
هر روش برای کاهش زمان اجرای برنامه امتیاز مثبت خواهد داشت.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# IN THE NAME OF GOD # mohandesjan.ir from itertools import permutations x = permutations(range(10)) num = [2, 3, 5, 7, 11, 13, 17] ch = [8, 8, 8, 8, 8, 8, 8] def check(x): for i in list(x): if i[0]<6: sum =0 for n in range(7): if int(str(i[n+1])+str(i[n+2])+str(i[n+3])) % num[n] == 0: ch[n] = 1 else: ch[0]=0 break for p in range(7): sum += ch[p] if sum == 7: print(int(str(i[0])+str(i[1])+str(i[2])+str(i[3])+str(i[4])+str(i[5])+str(i[6])+str(i[7])+str(i[8])+str(i[9]))) else: break check(x) # mohandesjan.ir |
5- تابعی بنویسید که یک رشته را به عنوان ورودی دریافت کرده و اگر در این رشته تعداد تکرار کلمه computer از تکرار کلمه student بیشتر بود مقدار True و در غیر این صورت مقدار False برگرداند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# IN THE NAME OF GOD # mohandesjan.ir x = input("please enter your string: ") com = 0 stu = 0 def check(x): com = x.count("computer") stu = x.count("student") if com > stu: return True elif com < stu: return False elif com == 0 and stu == 0: return "***in your string dont exist this words***" elif com==stu : return "***count of words is equal***" r = check(x) print(r) # mohandesjan.ir |
6- دنباله کولاتز طبق رابطه زیر تعریف میشود.
این حدس بیان می کند که به ازای هر مقدار ورودی n این دنباله به مقدار 1 ختم میشود.
تابعی بازگشتی بنویسید که به ازای هر مقدار ورودی این دنباله را محاسبه و نمایش دهد.
مثال: به ازای مقدار 13 برنامه باید دنباله زیر را نمایش دهد.
13 > 40 > 20 > 10 > 5 > 16 > 8 > 4 > 2 > 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# IN THE NAME OF GOD # mohandesjan.ir n=int(input("please enter your number: ")) def check(n): print(n,end="") if n<1: print("your number must be bigger than 1") elif n==1: return True elif n%2==0: print(end=" > ") n=n//2 return check(n) else: print(end=" > ") n=3*n+1 return check(n) print print("*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*") check(n) print("\n*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*") # mohandesjan.ir |
7- تابعی بنویسید که دنباله کولاتز سوال قبل را به صورت مستقیم محاسبه کند.
حال طولانی ترین دنباله کولاتز را در بین اعداد زیر یک میلیون پیدا کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# IN THE NAME OF GOD # mohandesjan.ir list_1 = [] list_num = [] def printt(n): list_1.append(n) while(n != 1): if n % 2 == 0: n = n//2 list_1.append(n) if n == 1: break elif n % 2 == 1: n = 3*n+1 list_1.append(n) print(list_1) for n in range(1, 1000000): list_1.append(n) while(n != 1): if n % 2 == 0: n = n//2 list_1.append(n) if n == 1: break elif n % 2 == 1: n = 3*n+1 list_1.append(n) # print(list_1) r = len(list_1) list_num.append(r) list_1 = [] # print(list_num) max1 = max(list_num) count = list_num.index(max1) print("*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*") print("The answer to the question is number:",end=" ") print(count+1) ans=input(f"Do you want to see sequence of this number: {count+1} 'yes' or 'no'??") if ans=="no": print("Done :)") elif ans=="yes": printt(count+1) print("Done :)") else: print("you should enter just yes or no!!!") print("*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*") # mohandesjan.ir |
8- فایل names.txt شامل 5163 اسم است که با کاراکتر “,” از هم جدا شده اند.
برنامه ای بنویسید که شامل بخش های زیر باشد.
- تابعی بنویسید که فایل مورد نظر را خوانده اسامی را درون یک لیست به ترتیب حروف الفبا ذخیره کند.
- تابعی بنویسید که با دریافت لیست مرتب شده لیستی از دیکشنری به فرمت زیر را برگرداند.
{“id”: int , “name”:””, “value”:0}
برای مثال دیکشنری معادل با نام AARON که اولین نام به ترتیب حروف الفباست به صورت زیر خواهد بود.
{“id”: 1 , “name”:”AARON”, “value”:0}
- تابعی بنویسید که مقدار value را به ازای هر اسم محاسبه کند.
این مقدار برابر است با ضرب مقدار ID در ارزش الفبایی هر اسم. ارزش الفبایی به این معنی است که جایگاه حروف در الفبا مشخص شده و مقدار عددی متنظار با آن قرار گیرد.
برای مثال این مقدار برای اسم AARON برابر با 1+1+18+15+14=49 است که مقدار Value نیز به این علت که ID برابر با 1 است برابر با 49 خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# IN THE NAME OF GOD # mohandesjan.ir alfa = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26} list1 = [] list2 = [] list3 = [] def read(): file = open("names.txt", "r") f = file.read() list1 = f.split(',') file.close() del list1[5162] list1.insert(5162, 'ALONSO') list1.sort() # print((list1)) return list1 def val(ls, alfa): for i in ls: r = len(i) num = 0 for m in range(r): num += alfa.get(i[m]) list3.append(num) # print(list3) return list3 def dic(ls, v): for n in range(5163): list2.append({"id": n+1, "name": ls[n], "value": v[n]*(n+1)}) print(list2) ls = read() v = val(ls, alfa) dic(ls, v) # mohandesjan.ir |
این سری از سوالات به پایان رسید
اگه خواستید به اشتراک بگذارید حتما با ذکر منبع باشه 🙂
تمام فایل هایی که نیاز دارید برای سوال سه و هشت رو در زیر قرار دادم
رمز فایل فشرده : mohandesjan.ir
تمام حروف را کوچک وارد کنید
با سلام و تبریک بابت سایت مهندس جان
مطالب بسیار کاربردی وکلیدی بود
ممنون از مهندس جان ??
سلام خوشحالم که مطالب مفید بوده
باز هم به سایت مهندس جان سر بزنید 🙂