discord icon
سرور دیسکورد گاردایران
Mr.Python

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

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

تمرین 4

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

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

table = {'?l':'abc', '?d':'123'}
string = '?d ?d?d ?l?d some string hello?ghk?d?d and ?l'

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

['123', '123', '123', 'abc', '123', 'some string hello?ghk', '123', '123', 'and', 'abc']

 

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


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

تمرین 1 

 

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

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

حل :

string = input('')
def StrToInt(string):
    sum = 0
    n = len(string) - 1
    for s in string:
        sum+=numbers_ords[s] * 10 ** n
        if n==0:break
        n -= 1
    return sum
m = ''
numbers = []
numbers_ords = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
for i in string:
    if i in numbers_ords:
        m+=i
    else:
        if m!='':
            numbers.append(StrToInt(m))
            m = ''
if m != '':
    numbers.append(StrToInt(m))
max_number = numbers[0]
for i in numbers:
    if i > max_number:
        max_number = i
print(max_number)

 

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 21 ساعت قبل، Mr.Python گفته است :

تمرین 4

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

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


table = {'?l':'abc', '?d':'123'}
string = '?d ?d?d ?l?d some string hello?ghk?d?d and ?l'

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


['123', '123', '123', 'abc', '123', 'some string hello?ghk', '123', '123', 'and', 'abc']

 

حل

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

table = {'?l':'abc', '?d':'123'}
string = '?d ?d?d ?l?d some string hello?ghk?d?d and ?l'
gen_str = ''
def generate(gen_str, string):
    mylist = list()
    if len(string) == 0:return mylist  
    else:
        if string[0] == '?':
            if string[0] + string[1] in table:
                if len(gen_str) != 0 and gen_str.isspace()==False:mylist.append(gen_str.strip());gen_str=''
                mylist.append(table[string[0] + string[1]])
                mylist+=generate(gen_str, string[2:])
            else:
                gen_str+=string[0]; mylist+=generate(gen_str, string[1:])
        else:gen_str+=string[0]; mylist+=generate(gen_str, string[1:])
        return mylist
print(generate(gen_str, string))

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

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

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


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

تمرین 4 

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

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

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

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

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

moshtaq('-y5x^4c4yb-2x^5+4x+7+40x-8+2')
moshtaq('-5x^4c4yb-2x^5+4x-5x-5+7+40x-8+2')

خروجی :

-80y^2cbx^3-10x^4+4+40
-80cybx^3-10x^4+4-5+40

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

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

 

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

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


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

جواب تمرین 4 :

 

 

 

 

 

 

 

 

import re
def moshtaq(k):
    reg = r'\-*[a-zA-Z1-9]*\d*x\^*\-*\d*[a-zA-Z1-9]*'
    all = re.compile(reg).findall(k)
    dv = ''
    for p in all:
        if '^' not in p:
            for i in re.compile(r'(\-*[a-zA-Z1-9]*\d*)x').findall(p):
                if i == '':dv+='1'
                elif i == '-':dv+='-1'
                else:
                    if '-' not in i:
                        dv+='+'+i
                    else:
                        dv+=i
        else:  
            zarayeb = ''.join(re.compile('(.*)x\^\-*\d*(.*)').findall(p)[0])
            zarib = 1
            zarib_q = ''
            z_q = ''
            for jj in re.compile(r'\d+').findall(zarayeb):
                zarib *= int(jj)
                zarayeb = zarayeb.replace(jj, '')
            while zarayeb != '':
                if zarayeb[0] == '-':
                    zarib *= -1
                else:
                    zarib_q += zarayeb[0]
                zarayeb = zarayeb[1:]
            while zarib_q != '':
                c = zarib_q.count(zarib_q[0])
                if  c > 1:
                    z_q+= zarib_q[0]+'^'+str(c)
                    zarib_q = zarib_q.replace(zarib_q[0], '')
                else:
                    z_q+=zarib_q[0]
                    zarib_q = zarib_q.replace(zarib_q[0], '')
            reg_2 = r'x\^(\-*\d*)'
            gg = re.compile(reg_2).findall(p)
            zarib *= int(gg[0])
            if '-' not in str(zarib)+z_q:
                dv += '+'+ str(zarib)+z_q+'x^'+str(int(gg[0]) - 1)
            else:
                dv += str(zarib)+z_q+'x^'+str(int(gg[0]) - 1)
    print(dv)
moshtaq('-y5x^-4c4yb-2x^5+4x+7+40x-8+2')
moshtaq('-200x^4c4yb-2x^5+4x-5x-5+7+40x^-1-8+2')
moshtaq('-ab')
moshtaq('ab')
moshtaq('1')
moshtaq('-x')
moshtaq('+x')
moshtaq('ax+b')
moshtaq('ax^2+bx+c')
moshtaq('ax^1')
moshtaq('222x')
moshtaq('10-40x+30')

 

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


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

تمرین 5:

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

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

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


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

جواب تمرین 5 :

seconds = int(input('Enter the time : '))
h = seconds//3600
m = (seconds-(seconds//3600)*3600)//60
s = seconds-(h*3600+m*60)
if h < 10:  
    h = '0'+str(h)
if m < 10:
    m = '0'+str(m)
if s < 10:
    s = '0'+str(s)
print(f'{h}:{m}:{s}')

 

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


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

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری