python

۱۳۸۸ آذر ۱۱, چهارشنبه

چند نکته

سوال اول

n = 1000
s = 0
for x in range(n):
    if x % 3 == 0 or x % 5 == 0:
        s = s + x
print s

--------------------------------
سوال دوم
#it is not a good solution calling the fib function 4000000 times, It is very
#time consuming. 
#take a look at the technique in this file and try to reuse it in similar cases.
a = 1 #the first fib number
b = 1 #the second fib number
s = 0 
while b < 4000000:
    if b % 2 == 0:
        s = s + b     #s is the sum of even fibs
    a , b = b, a+b    #b will be the next fib number

print s
--------------------------------
سوال سوم
import math

def is_prime(x):
    #notice the range bounded to x ** 0.5 for a better speed
    #try to explain that how much faster is it?
    for scan in range(2,int(x ** 0.5) + 1):
        if x%scan == 0:
            return False
    return True

n = 600851475143
#what does the following for do?
for scan in range(int(n ** 0.5) + 1, 2, -1):
    if n % scan != 0:
        continue
    if not is_prime(scan):
        continue
    print scan
    break
--------------------------------
سوال چهار
import math

def digit(n,i): #returns the ith digit of n, the first index is 0
    return (n / (10**(i)))%10

def num_of_digits(n): #returns the number of digits of n
    guess = 1
    while n / (10 ** (guess)) != 0:
        guess = guess + 1
    return guess

def num_of_digits2(n): #another implementation of the method
    return int(math.ceil(math.log10(n)))

def is_palindrome(n):
    nd = num_of_digits2(n)
    for x in range(nd):
        if not digit(n,x) == digit(n,nd-x - 1):
            return False    
    return True       #return true if False is never returned

max = -1
for x in range(100,1000):
    print x
    for y in range(x,1000):
        t = x * y
        if (is_palindrome(t)):
            if t > max:
                print t, x, y
                max = t
print max

این سوال به تعبیری میتواند سخت ترین سوال در این مجموعه باشد. دقت کنید که چه طور با تعریف کردن توابع خاص کار تسهیل شده است. سعی کنید به جای نوشتن یک کد بزرگ، اول مسایل خاص تری که با آنها مواجهید به شکل متود بنویسید، تا راحت تر بتوانید به مساله ی اصلی فکر کنید. همه چیز را در یک جا نچپانید! .............. راه دیگری برای این مساله، قاعدتا در نگاه اول نمیتوانید بفهمید کد زیر چرا کار میکند چون خارج از محدوده ی درسی شماست. ولی اگر به اندازه کافی تلاش کنید خواهید فهمید و چیزی یاد میگیرید که به شدت کمکتان خواهد کرد!
#This is another solution of 4th euler project problem,
#This source code is copied from the solution forum of the question
#Just try to understand how it works.
def palindrome(n):
    n = str(n)
    return n == n[::-1]

#and what do the following line do?
print max(a*b for b in range(100, 1000) for a in range(b, 1000) if palindrome(a*b))
#lovely python :x
--------------------------------
سوال پنج
این سوال مثال خوبی از فلسفه ی کارکرد گرایی در برنامه نویسی است. تنها چیزی که در ارزیابی یک برنامه مهم است این است که نتیجه ی درست را تولید کند، و این کار را به هر شکلی میتواند انجام دهد. مثلا به این شکل:
print 19*17*16*13*11*9*7*5

5 نظر:

در ۱۱ آذر ۱۳۸۸ ساعت ۱۷:۲۱, Anonymous ناشناس گفت...

salam
bebakhshid vase soale 1 mazrab haie 15 ro nabayad az s kam konid ? akhe injoori 2 bar hesab mishan , albate man noe kare "or" ro nemidoonam , shayad or in meghdar ro kam kone !

 
در ۱۱ آذر ۱۳۸۸ ساعت ۱۹:۰۸, Anonymous ناشناس گفت...

http://sharifcs1388.persianblog.ir/
webloge daneshkadeye riazi

 
در ۱۱ آذر ۱۳۸۸ ساعت ۱۹:۲۷, Anonymous ناشناس گفت...

نه هر عدد فقط یک بار محاسبه روش انجام میشه. بار دومش رو من نمیبینم

 
در ۱۱ آذر ۱۳۸۸ ساعت ۱۹:۵۹, Anonymous ناشناس گفت...

bebinid adadi ke mazrabe 15 bashan yani ham mazrabe 3 hastan va ham mazrabe 5 dosorte ? khob vaghti ke ma 1 bar 3 ro dar nazar gereftim va 1 bar 5 ro joda pas mazarebe 15 ro ham ba 3 va ham ba 5 shemordimeshon va toie majmoo hesab kardim , albate toie avalin cm ham goftam ke nemidoonam or che joori amal mikone , shayad chon or oomade va be ebarati and be kar narafte 15 ro khod be khod 1 bar hazf mikone !

 
در ۱۱ آذر ۱۳۸۸ ساعت ۲۱:۱۷, Anonymous ناشناس گفت...

or ba and fargh mikone.. or=ejtema, and=eshterak

 

ارسال یک نظر

اشتراک در نظرات پیام [Atom]

<< صفحهٔ اصلی