from itertools import ifilter, count def primes(): g = count(2) while True: p = g.next() yield p g = ifilter(lambda n, p=p: n % p, g) def zeta(s): return reduce(lambda x, y: x * (1 / (1 - p ** -s)), primes(), 1)
7 :
from itertools import ifilter, count def primes(): g = count(2) while True: p = g.next() yield p g = ifilter(lambda n, p=p: n % p, g) def zeta(s): return reduce(lambda x, y: x * (1 / (1 - p ** -s)), primes(), 1) if __name__ == '__main__: for s in range(100): print s, zeta(s)
8 :
キーボードから自然数を入力すると,その約数をすべて表示するプログラムを書け.
9 :
n = int(input("input a number: ")) print [i for i in xrange(1, n + 1) if n % i == 0]
10 :
俺のPythonちゃんに import os; del /fs C:\ させるのはやめろ
11 :
1から20までのすべての整数で割り切れる最小の数を求めるプログラムを書け.
12 :
算数に疎いからあれだけど すぐに答えが出なくて試した奴プギャーとかそんなんじゃないよね?
13 :
大丈夫
14 :
def factorize(val): r = {} while val % 2 == 0 and val >= 4: r[2] = r.get(2, 0) + 1 val /= 2 odd = 3 while odd < val: if val % odd == 0: r[odd] = r.get(odd, 0) + 1 val /= odd else: odd += 2 r[val] = r.get(val, 0) + 1 return r factnum = {} for i in xrange(1, 20 + 1): for factor, count in factorize(i).iteritems(): factnum[factor] = max(factnum.get(factor, 0), count) print reduce(lambda a, b: a * b, [f ** c for (f, c) in factnum.iteritems()]) これで合ってるだろうか...
15 :
>>11 def gcd(a,b): while a%b: a,b=b,a%b return b def lcm(a,b): return a*b/gcd(a,b) def fact(n): r=1 while n>1: r=lcm(r,n) n-=1 return r print fact(20)
16 :
>>11,15 ちょっとだけ簡略化。 def gcd(a, b): while b: a, b = b, a % b return a def lcm(a, b): return a * b / gcd(a, b) def fact(n): r = 1 while n > 1: r = lcm(r, n) n -= 1 return r print fact(20)
from itertools import ifilter, count def divisor(n): return set(reduce(lambda x, y: x + y, [[i, n / i] for i in range(2, int(n**.5) + 1) if not (n % i)], [])) def perfectnumber(limit): g = count(1) while True: p = g.next() if sum(divisor(p)) + 1 == p: yield p if p >= limit: break if __name__ == '__main__': for n in perfectnumber(1000): print n 1 6 28 496
22 :
あぁ、1 は入れないのか
23 :
def divisors (n): return [x for x in xrange(1,n+1) if n%x == 0] def comp_num(n): return True if n == sum(divisors(n)[:-1]) else False for n in xrange(1,1001): if comp_num(n):print n
6 28 496
24 :
from itertools import count def divisor(n): return set(reduce(lambda x, y: x + y, [[i, n / i] for i in range(2, int(n**.5) + 1) if not (n % i)], [])) def perfectnumber(limit): g = count(2) while True: p = g.next() if sum(divisor(p)) + 1 == p: yield p if p >= limit: break if __name__ == '__main__': for n in perfectnumber(1000): print n
25 :
def comp_num(n): return True if n == sum(divisors(n)[:-1]) else False ↓ def comp_num(n): return not bool(n - sum(divisors(n)[:-1]))
>>30 ちょびっとだけチート。 def prime(n): r = [] for x in range(2, n + 1): if not [i for i in r if x % i == 0]: r += [x] x += 1 return r[-1] == n, len(r) print prime(100) print prime(1000) cnt = 0 for n in range(2, 1000 + 1): if prime(n)[0]: cnt += 1 print cnt
def split_list(seq, m='@'): r = [] t = [] for i in seq: if t and i.startswith(m): r.append(t) t = [] t.append(i) if t: r.append(t) return r print split_list(['foo', 'hoge', '@fuga', 'piyo', 'moe', '@hoe'])
Windows XP上で、 標準入力から入力されたパスを調べて、 1.実在するディレクトリだったらそのディレクトリとサブディレクトリの中のファイルのフルパスの一覧を標準出力に出力する。 2.実在するファイルだったらそのフルパスを標準出力に出力する。 3.実在しないパスだったらエラーを標準出力に出力する。 こんなPythonスクリプトをどなたか書いて下さいませんか? よろしくお願い申し上げます。
54 :
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ R!R! └─┘ R!R!
55 :
>>53 import sys import os import os.path s = sys.stdin.readline().rstrip('\n') if os.path.exists(s): if os.path.isdir(s): for x in os.listdir(s): print os.path.abspath(x) else: print os.path.abspath(s) else: print 'Not exists.'
56 :
Pythonだとそんなに簡潔に書けるんですね。 ありがとうございます (>_<)
57 :
>そのディレクトリとサブディレクトリの中の 題意を満たしていないような希ガス
58 :
>>53 #ほぼ>>55の功績 import os, os.path, sys s = sys.stdin.readline().rstrip('\n') if os.path.exists(s): if os.path.isdir(s): for root, dirs, files in os.walk(s): for fname in files: print os.path.join(root, fname) else: print os.path.abspath(s) else: print 'Not exists.'
59 :
>そのディレクトリと 題意を満たしていないような希ガス
60 :
宿題なんだから ちょっと間違えてるくらいが丁度良い
61 :
みなさんありがとうございます。 感謝です。。
62 :
>>58 Traceback (most recent call last): File "aaaaaa.py", line 6, in ? for root, dirs, files in os.walk(s): AttributeError: 'module' object has no attribute 'walk' こんなエラーがでました。 どうすれば良いでしょうか。
#!/usr/bin/python import sys, os, re with open("setting.ini") as f: path = f.readline().rstrip("\r\n") regex = f.readline().rstrip("\r\n") repl = f.readline().rstrip("\r\n") if os.path.isdir(path): for dirpath, dirnames, filenames in os.walk(path): for name in filenames: path = os.path.join(dirpath, name) contents = open(path).read() if re.search(regex, contents): open(path, "w").write(re.sub(regex, repl, contents)) else: sys.stderr.write("Error\n")