1 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 06:27:36 ] 【Pythonスレッド基本ルール】 1:問題文は自己省略せずに、直接全部貼り付けてください。 2:課題の「丸投げ」が最も好ましい提示法です。なるべく丸投げしてください。 3:数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。 4:課題&宿題関連の質問はOKですが、それ以外の一般的な質問は禁止です。 5:もし回答プログラムがアップされたら、その返答と動作報告をお願いします。 【課題提示用テンプレ】 【 課題 】与えられた課題文をそのまま書きます 《必須》 【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》 【 期限 】提出期限、解答希望日があれば書きます 【 Ver 】希望するPythonバージョンがあれば書きます(必要があればOSも) 【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。 丸投げでない場合は、途中までのソースとその経過報告、 質問点、疑問点を書きます(なるべく丸投げにしてください) 【回答プログラムの掲載場所】 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi 前スレ pc12.2ch.net/test/read.cgi/tech/1153585095/
2 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 06:31:21 ] ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
3 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 07:14:48 ] このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
4 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:42:25 ] ┌─┐ │●│!おっ └─┘っぱ い!い!お おっ │● ぱお│ ( ゚∀゚っぱ! _ ぱい)彡 └─┤ い ┌─┬⊂彡 ∩
5 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:11:58 ] ゼータ関数をgeneratorで出力するプログラムを書いてください
6 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:26:00 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:41:15 ] 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 名前:デフォルトの名無しさん [2009/11/16(月) 23:48:00 ] キーボードから自然数を入力すると,その約数をすべて表示するプログラムを書け.
9 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 02:38:07 ] n = int(input("input a number: ")) print [i for i in xrange(1, n + 1) if n % i == 0]
10 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:19:05 ] 俺のPythonちゃんに import os; del /fs C:\ させるのはやめろ
11 名前:デフォルトの名無しさん [2009/11/17(火) 22:20:40 ] 1から20までのすべての整数で割り切れる最小の数を求めるプログラムを書け.
12 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:30:52 ] 算数に疎いからあれだけど すぐに答えが出なくて試した奴プギャーとかそんなんじゃないよね?
13 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:03:53 ] 大丈夫
14 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:14:48 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:51:14 ] >>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 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:56:27 ] >>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)
17 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:13:08 ] def fact2(n): return reduce(lcm, range(2, n+1), 1)
18 名前:デフォルトの名無しさん [2009/11/18(水) 19:17:49 ] 初心者過ぎてお恥ずかしいですが、助けてくださいorz code.google.com/intl/ja/appengine/docs/python/gettingstarted/helloworld.html これをやろうとしていますが、「アプリケーションのテスト」のところで、 「次のコマンドで helloworld ディレクトリまでのパスを指定し、Web サーバーを起動します。 google_appengine/dev_appserver.py helloworld/」 からわからなくなりました。 コマンドプロンプトで実行するんでしょうか。 helloworldフォルダをどこにおくべきでしょうか。どう指定するのでしょうか。 よろしくお願いいたしますorz
19 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:27:18 ] すさまじいマルチポストだ
20 名前:デフォルトの名無しさん [2009/11/19(木) 17:53:23 ] ある自然数nについて,nの約数のうち,nより小さいものの和がnと一致するとき,nは完全数と呼ばれる. たとえば,6の約数は 1, 2, 3, 6 であり, 6 = 1 + 2 + 3 なので,6は完全数である. 1000以下のすべての完全数を表示するプログラムを作成せよ.
21 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:51:57 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:53:30 ] あぁ、1 は入れないのか
23 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:57:52 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 19:00:14 ] 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 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 19:56:12 ] 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]))
26 名前:デフォルトの名無しさん [2009/11/19(木) 20:20:23 ] 1000よりも小さいすべての「3または5の倍数」の合計を計算し,結果を表示するプログラムを作成せよ.
27 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 20:33:52 ] sum([n for n in xrange(1,1000) if not n%3 or not n%5])
28 名前:デフォルトの名無しさん [2009/11/19(木) 20:44:02 ] 1. キーボードから氏名と電話番号を読み込み,氏名をキー,電話番号を値としてディクショナリに格納する. 2. 氏名として"END"が入力されるまで1.を繰り返す. 3. "END"が入力されたら,ディクショナリの内容を "氏名\t電話番号\n" の形式でファイルに書き出す.
29 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 20:50:41 ] >>28 これ前スレにあった気が
30 名前:デフォルトの名無しさん [2009/11/19(木) 22:17:36 ] 1. 引数nを与えると,nが素数の時はTrueを,素数でないときはFalseを返す関数 prime(n) を定義せよ. 2. 関数 prime(n) を使用して,1000以下の素数をすべて表示するプログラムを書け.見つかった個数も表示すること. Hint 1. 素数とは,1とその数自身のみを約数に持つ数である(ただし,1を除く). 2. 言い換えると,2からn-1までのいずれでもnが割り切れない場合,nは素数である(ただし,n > 2の場合). 3. または,2からn-1までのいずれか1つでもnを割り切ることができる場合,nは素数ではない(同上).
31 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 22:27:51 ] 細かい突っ込みだけど、そこまで定義するなら 単に「数」じゃなくて「自然数」「整数」って言わないとな。
32 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 22:40:57 ] project Eularみたいだなぁ
33 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:00:29 ] >>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
34 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:54:05 ] リストを引数にとり、 > たとえば ['foo', 'hoge', '@fuga', 'piyo', 'moe', '@hoe'] 「@」から始まる文字列の前後でリストを分解して > ['foo', 'hoge'] ['@fuga', 'piyo', 'moe'] ['@hoe'] 新たなリストの要素とし > [ ['foo', 'hoge'], ['@fuga', 'piyo', 'moe'], ['@hoe'] ] そのリストを返す関数を定義しなさい。 リストを分解する文字「'@'」は引数で指定できると望ましい。 バージョンは2.5と2.6で動くものをお願いします。
35 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 02:05:19 ] 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'])
36 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 02:23:36 ] >>35 codepad.org/PYgcfR3z
37 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 02:28:40 ] >>35 インデントがずれてるねぇ codepad.org/2qWBifXW
38 名前:34 mailto:sage [2009/11/20(金) 02:32:45 ] ありがとうございます!
39 名前:デフォルトの名無しさん [2009/11/20(金) 18:15:24 ] 分数を表現するクラスFractionを定義し,いくつかのインスタンスを生成して表示せよ. Hint 分子と分母をそれぞれアトリビュートとして持つ コンストラクタには分子と分母をそれぞれ引数として与える printすると,"分子/分母"の形で表示されるようにする たとえば,1/2 や 5/8 など プログラムは次のような形になる # 分数クラス class Fraction(object): def __init__(...): // __init__()のコード // def __str__(self): // __str__()のコード // # 1/3を作る f1 = Fraction(1, 3) # 2/5を作る f2 = Fraction(2, 5) # 表示してみる print f1, f2
40 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 18:21:32 ] 出来ました先生 >>> class Fraction(object): ... def __init__(self, p, q): ... self.p = p ... self.q = q ... def __str__(self): ... return '%d/%d' % (self.p, self.q) ... >>> f1 = Fraction(1, 3) >>> f2 = Fraction(2, 5) >>> print f1, f2 1/3 2/5
41 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 18:22:02 ] from fractions import Fraction
42 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 18:24:12 ] ∧,,∧ ∧,,∧ ∧ (´・ω・) (・ω・`) ∧∧ ヒソヒソ・・・ ( ´・ω) U) ( つと ノ(ω・` ) | U ( ´・) (・` ) と ノ ヒソヒソ・・・ u-u (l ) ( ノu-u `u-u'. `u-u'
43 名前:デフォルトの名無しさん [2009/11/24(火) 19:45:10 ] 正多角形を表現するクラスPolygonを定義し,いくつかのインスタンスを生成して表示せよ.メソッドも実行して結果を示すこと. ・辺の数と1辺の長さをアトリビュートとして持つ (コンストラクタは引数として辺の数と1辺の長さを取る) ・printすると次のように表示される [Polygon] 辺の数: 5, 辺の長さ: 100 ・周囲の長さを返すメソッド(perimeter)を持つ (引数なし)
44 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:45:28 ] 概出
45 名前:デフォルトの名無しさん [2009/11/25(水) 22:27:19 ] Polygonをスーパークラスとして,正三角形(Triangle),正四角形(Square)を表現するクラスをそれぞれ定義せよ. ・辺の長さのみを引数に与えてインスタンスを生成する ・自身の面積を計算して結果を返すメソッドarea()を持つ √3 = 1.73 としてよい メインルーチンでは,実際にインスタンスを生成し,各インスタンスについて,インスタンス自身,周囲の長さ,面積の3項目を表示するようにせよ.
46 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 22:29:29 ] 概出
47 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 09:49:56 ] 【 課題 】四人四首問題。「かるた部」の練習の一環として、 百人一首の中から第一文字が「や」の四枚を選んで、徹底的に練習することに しました。四枚とは、 やすらはでねなましものをさよふけてかたぶくまでのつきをみしかな やへむぐらしげれるやどのさびしきにひとをもみをみうらみざらまし やまざとはふゆぞさびしさまさりけるひとめもくさもかれぬとおもへば やまがはにかぜのかけたるしがらみはながれもあへぬもみぢなりけり ルールは、 1) 二人ゲームである。 2) 四枚のなかから無作為に二枚を選び自分と相手の札とする。 3) 読み手は四枚全部読み上げる。いたがって空札(取る札がない)が二枚含まれる。 4) 一枚取った時点で勝負はつくが、残りの一枚も競うこととする。 [問題] 乱数を使ってそれぞれの持ち札を決め、それを表示します。 つぎに、読み札の順番を決めます。これはこの段階では表示しません。 一首、読み、それを表示し、 1) 空札 : 何文字目まで読まれてそれがわかったか 2) 相手札 : 同上 3) 自分札 : 同上 を表示しなさい。これを繰り返し、取り札がなくなったらゲームオーバー。 4) 二つのモードで作りなさい 1) 読まれた札を二人とも記憶している。 2) 読まれた札は忘れてしまう。 実際には取り札には下の句が書かれていますが、ここでは一首全体をお互い理解しているものとします。
48 名前:47 mailto:sage [2009/11/29(日) 09:54:15 ] ちょっと直します。 四人一首問題ですねw いたがって->従って
49 名前:47 mailto:sage [2009/11/29(日) 10:12:02 ] すみません。これは完全なシミュレーションとしてプログラムしてください。 読み札が表示されたら、キーボードから答えを入力という作り方もあると 思いますが。
50 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 11:55:25 ] # encoding: utf-8 import random remember = True cardall = set([ u"やすらはでねなましものをさよふけてかたぶくまでのつきをみしかな", u"やへむぐらしげれるやどのさびしきにひとをもみをみうらみざらまし", u"やまざとはふゆぞさびしさまさりけるひとめもくさもかれぬとおもへば", u"やまがはにかぜのかけたるしがらみはながれもあへぬもみぢなりけり", ]) hand1, hand2 = random.sample(cardall, 2) print "自分札:", hand1; print "相手札:", hand2; print def specify(card, cardset): for i in xrange(len(card)): if sum(card[:i] == c[:i] for c in cardset) == 1: return i rem = set() remain = 2 for card in random.sample(cardall, 4): print card n = specify(card, cardall - rem) if card == hand1: print "自分札:", n; remain -= 1 elif card == hand2: print "相手札:", n; remain -= 1 else: print "空札:", n print if remain == 0: print "Game Over"; break if remember: rem.add(card)
51 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:44:36 ] >>50 ありがとうございます。
52 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 07:56:47 ] 【 課題 】和歌について考察する問題。 歌 ... こぬ人を待つほの浦の夕凪はやくやもしほの身もこがれつつ (定家) これはかなり複雑なうたです。 人をまつとは「待つ」であり、「松」です。まつ帆だからです。松の姿に似た帆です。 もちろん松は浦の背景でもあります。浦は夕凪ですから心は風を「待って」もいます。 風はありませんから、待ってもこぬ人なのです。風があの人なのかそれとも帆船なのか 微妙です。浦は「浦」であると同時に心の「裏」であり、あの人(風)の気持ちを「占」なふ、 うらでもあります。 「焼くや」(やいているのだろうか)とは、恋に焦がれて身を焼いているのであり、 やくやもしほとは藻塩(自分)が陽にあぶられ、渇き、焼かれ、煙でいぶされ、さらに 煮られ、再び乾かされというような、製塩法の愛の地獄絵であり、身もこがれという 言葉には「藻」がここでも含まれています。製塩の煙は夕凪の浦に実際に漂って いるのかもしれません。 以上のような、この歌に含まれる語とそれからくる連想をプログラムで表現しなさい。
53 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 23:58:06 ] Windows XP上で、 標準入力から入力されたパスを調べて、 1.実在するディレクトリだったらそのディレクトリとサブディレクトリの中のファイルのフルパスの一覧を標準出力に出力する。 2.実在するファイルだったらそのフルパスを標準出力に出力する。 3.実在しないパスだったらエラーを標準出力に出力する。 こんなPythonスクリプトをどなたか書いて下さいませんか? よろしくお願い申し上げます。
54 名前:デフォルトの名無しさん [2009/12/24(木) 00:13:41 ] ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
55 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:56:36 ] >>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 名前:53 [2009/12/24(木) 13:49:31 ] Pythonだとそんなに簡潔に書けるんですね。 ありがとうございます (>_<)
57 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 05:13:16 ] >そのディレクトリとサブディレクトリの中の 題意を満たしていないような希ガス
58 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 11:20:37 ] >>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 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:16:49 ] >そのディレクトリと 題意を満たしていないような希ガス
60 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:23:14 ] 宿題なんだから ちょっと間違えてるくらいが丁度良い
61 名前:53 mailto:sage [2009/12/25(金) 20:24:29 ] みなさんありがとうございます。 感謝です。。
62 名前:53 mailto:sage [2009/12/25(金) 20:27:25 ] >>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' こんなエラーがでました。 どうすれば良いでしょうか。
63 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:33:57 ] pythonのバージョンは? python -Vで調べられる
64 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:32:31 ] C:\>python -V Python 2.2.2 って言われました。
65 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:54:12 ] >>64 os.walkは2.3から os.listdirでも使って再帰で書く
66 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:04:24 ] >>65 えと・・・最新をDLしてきてインストールすれば 大丈夫でしょうか。
67 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:09:53 ] >>66 それがベスト
68 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:27:07 ] >>67 ありがとうございます。 ご教示に従います。
69 名前:68 mailto:sage [2009/12/25(金) 23:37:58 ] できました。 ありがとうございました。
70 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 08:00:42 ] Windows XP上で、 標準入力から入力されたパスを調べて、 1.実在するディレクトリだったらそのディレクトリの名前とサブディレクトリの名前と、 それらの中にあるファイルの名前、およびファイルの中身に以下の置換作業を実行する。 前からみて順に正規表現regex="〜〜"にマッチする文字列を全て"hogehoge"に置換する。 2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。 こんなPythonスクリプトをどなたか書いて下さいませんか? よろしくお願い申し上げます。
71 名前:デフォルトの名無しさん [2009/12/28(月) 08:02:24 ] >>70 ×2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。 ○2.実在 する ディレクトリでなかったらエラーメッセージを標準出力に出力する。
72 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 08:05:23 ] > regex="〜〜"にマッチする文字列を全て"hogehoge" これはユーザにどうやって指定させるんだ それともスクリプト中に埋め込んでしまっていいのか というかパスを置換するのはわかったけど ファイルの中身まで置換するっていうのは本気なのか
73 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 08:17:40 ] >>72 > これはユーザにどうやって指定させるんだ ごもっともです。 ちょっと変えて、 setting.iniを読み込んで1行目を > 標準入力から入力されたパスを調べて、 これに代えて調べるパスとします。 また2行目を regex="〜〜" #正規表現 3行目を "hogehoge" #置換後の文字列 として取得するとしてください。 > というかパスを置換するのはわかったけど > ファイルの中身まで置換するっていうのは本気なのか 本気です。 ・・・宿題なものでして。
74 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 09:28:50 ] Python 2.6.4です。 これが分かりません。 > 問 1 次のプログラムの実行結果は 1になる。 > a='apple' > b='apple' > print a is b # 1 を出力 > つまり a と b はデータを共有している。これで問題が発生しない理由について考えよ。 > > 問 2 次のプログラムの実行結果は 0 になる。 > a=('apple',1) > b=('apple',1) > print a is b # 0 を出力 > つまり a と b はデータを共有していない。タプル形式の要素への代入が禁じられているにも > かかわらず安全策が採られているのである。何故か? もしも要素の性格に関わらずタプル形 式のデータを共有した場合に、どのような問題が発生するかを具体例で示せ。 ttp://codepad.org/F6w1aRBF どうしてでしょうか? 問1は 'apple'は書き換え不可能だから共有させても問題ないため だと思いますが問2が分かりません。
75 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 10:02:38 ] >>74 a = ('apple', []) b = ('apple', []) で考えてみたらいいんじゃないかな 筋の悪い問題なのであまり深く考えないでいいよ
76 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 10:05:33 ] 念のために付け加えると > a='apple' > b='apple' > print a is b # 1 を出力 これで1になるか0になるかは実装依存
77 名前:74 mailto:sage [2009/12/28(月) 10:10:06 ] ありがとうございます。 a=('apple',[]) b=('apple',[]) だとすると a[1]=[2] は不可能ですが a[1].append(2) こんなことは可能だから、ってことですね。 なるほど。
78 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 13:52:08 ] a[1][:]=[2]
79 名前:>70 mailto:sage [2009/12/29(火) 00:02:10 ] すみません。 >>70 お願いします。 補正したものは以下です。 ########################################################3 Windows XP上で、 まず 同じディレクトリにあるsetting.iniを読み込んで その1行目, 2行目, 3行目を 文字列p, regex, aftに格納する。 pをパスとして調べ、 1.実在するディレクトリだったらそのディレクトリの名前とサブディレクトリの名前と、 それらの中にあるファイルの名前、およびファイルの中身に以下の置換作業を実行する。 > 前からみて順に正規表現regexにマッチする文字列を全てaftに置換する。 2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。 こんなPythonスクリプトをどなたか書いて下さいませんか? よろしくお願い申し上げます。
80 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 00:18:18 ] 最近はそんな宿題が出るのか
81 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 08:21:32 ] どの言語でもいいからこんなのを作りなさい という感じの一般教養+αな宿題です。
82 名前:デフォルトの名無しさん [2010/01/01(金) 08:57:27 ] あけましておめでとうございます。 すみませんどなたか >>79 お願いできませんか? ファイル名はともかく全てのファイルの中身を置換するというところがいまひと つできなさそうです。 文系なのですが何を間違ったかこんな難しそうな科目を…。
83 名前:デフォルトの名無しさん mailto:sage [2010/01/01(金) 14:36:18 ] #!/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")
84 名前:82 mailto:sage [2010/01/01(金) 20:32:10 ] >>83 ありがとうございます。 とても助かりました。 新年早々お手数をおかけいたしました。
85 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:12:41 ] 【課題】 同じ長さのリストA,Bがある。Aはソート対象のデータ、Bは比較用の値が入っている。 A,Bの2つの引数をとり、Bの値が昇順になるようにAをソートする関数を定義しなさい。 引数のリストは破壊しても良く、ソート結果は戻り値・引数Aを上書きのどちらでも良い。 処理の早いものには追加点を与える。 【期限】 1月18日(月) 午後1時 【Ver】 Python 2.6 よろしくおねがいします。
86 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:43:37 ] A, B の初期値と結果の具体例が欲しい。 A, B が同じ長さのリストと言ってるが、 共通してない要素はソートの結果のどこに入るんだ?
87 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 01:08:35 ] >>86 問題よくよめ
88 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 01:20:42 ] mysort = lambda A, B: [t[1] for t in sorted(zip(B, A))]
89 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:14:38 ] >>85 比較用の値ってなんですか? あれ、時間切れかな。
90 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 17:06:43 ] >>89 > 比較用の値ってなんですか? 例えば、[3, -4, 10, -1]を 絶対値の大きさ順に並べるとすると 比較用の値は[3, 4, 10, 1]になる。 具体的には、 >>> A = [3, -4, 10, -1] >>> B = map(abs, A) >>> B [3, 4, 10, 1] >>> mysort(A, B) [-1, 3, -4, 10] >>> sorted(A, key=abs) [-1, 3, -4, 10] これで理解できなければ アルゴリズムの教科書をソートキーで引いてくれ。
91 名前:85 mailto:sage [2010/01/18(月) 22:42:26 ] >>88 さんの方法でできました。 たった1行で出来ちゃうんですね。十数行も書いたあげく動かなかった俺って… ありがとうございました。
92 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 00:28:55 ] ●カップラーメンのタイマーを作成● ・tkinterをしようしてGUIで操作できるようにする。 ・3分、5分、…といくつか選択できるようにする。 スマートなコードを宜しくお願い致します。
93 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 00:43:10 ] 概出 答えは過去ログでどうぞ
94 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 01:46:02 ] #!/usr/bin/python import Tkinter as Tk import time from functools import partial class NoodleTimer(Tk.Frame): def __init__(self, master=None): Tk.Frame.__init__(self, master) self.label = Tk.Label(self, text='Timer', font='Arial 20') self.label.pack(side='left') menubutton = Tk.Menubutton(self, text='>') menubutton.pack() menu = Tk.Menu(menubutton, tearoff=0) menu.add_command(label='1 minutes', command=partial(self.start, 60)) menu.add_command(label='3 minutes', command=partial(self.start, 180)) menu.add_command(label='5 minutes', command=partial(self.start, 300)) menubutton.config(menu=menu) def start(self, sec): self.finish_time = time.time() + sec self.tick() def tick(self): t = self.finish_time - time.time() if t < 0: self.label.config(text="Time's up!") else: self.label.config(text='%02d:%02d'%(t/60, t%60)) self.after(100, self.tick) if __name__ == '__main__': app = NoodleTimer() app.pack() app.mainloop()
95 名前:デフォルトの名無しさん [2010/01/27(水) 02:51:47 ] >>94 すごい! ありがとうございます。 参考にして勉強させて頂きます。 ちなみにVBも平行して学習しているんですが(意外といい) 出てくる用語はほぼ同じと考えてもいいですか? クラスとか、継承とか、オブジェクトとか
96 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 03:00:07 ] VBに継承でてくんの?
97 名前:デフォルトの名無しさん [2010/01/27(水) 04:10:40 ] 参考書には書いてあるんですよ
98 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:55:33 ] VBの継承ってどんなのか解らんが クラスやオブジェクトについてはだいたい一緒じゃね 個人的にVBは戻り値の設定と関数からの脱出が別れてるとこが面白いな
99 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 00:11:24 ] 面倒なだけで面白くもなんともない さらに戻り値設定し忘れとか起こすしろくなことにならない 言語仕様として糞
100 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 00:28:46 ] >>99 > 言語仕様として糞 というか言語自体として糞
101 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 00:42:08 ] VBの継承ってどんなの?
102 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 00:43:15 ] >>100 VB は Linux で動かないもんなぁ
103 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 13:48:02 ] >>102 Linux で動かないの? なんつうクソ言語
104 名前:ゆかちん [2010/02/13(土) 22:59:26 ] お疲れ様です! こんなのやってるんですがヘルプお願いします。 配列作って文字列を入れればいいんでしょうか? よろしくお願いします。 以下の5行の文字列のいずれかをランダムに返すプログラムを書きなさい あいうえお かきくけこ さしすせそ たちつてと なにぬねの
105 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:06:52 ] import random random.randint(0, 4) # 0 から 4 をランダムで返す 考え方はそれであってるからあとはがんばって
106 名前:ゆかちん [2010/02/13(土) 23:20:56 ] 配列の作り方をお願いします 乱数のところはわかりました。ありがとうございます! スキージャンプまでになんとかせねば
107 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:43:33 ] 配列ってより、リストかタプルな。てか、choice使うと楽。 import random random.choice(["あいうえお", "かきくけこ", "以下略"])
108 名前:デフォルトの名無しさん [2010/02/14(日) 00:11:45 ] うーむそれだとスケールできないだろ 5行ならいいが1000行でやろうとするとその方法だと無理
109 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 01:03:38 ] ファイルか標準入力から読み込ませたいな
110 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 02:51:13 ] >>108 いかにも使い捨てっぽいプログラムに高望みしないの。 エディタに正規表現置換ついてるでしょ。 >>109 with open("hoge.txt") as f: lines = [line for line in f] print random.choice(lines)
111 名前:デフォルトの名無しさん [2010/02/14(日) 13:43:29 ] タプルって何?
112 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:59:28 ] immutable(変更不能)なシーケンス dictのキーにできる わからなければリストを使ってれば良い
113 名前:ゆかちん [2010/02/14(日) 15:30:01 ] あん、できた。ありがとうございますん!
114 名前:デフォルトの名無しさん [2010/02/14(日) 15:33:23 ] print 'aaa' if boolean : 〜ここ〜 print 'bbb' print 'ccc' 上のソースにて、〜ここ〜の部分に何か入れて、 このプログラムを終了してしまいたいのですが、 どうすればいいでしょうか? booleanがTrueの時にプログラムを終了したいということです。 よろしくお願い申し上げます。
115 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:35:28 ] ちょっとスレチな気がするんで、別すれに行ってきます すみません。
116 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:13:40 ] print 'aaa' if boolean : raise Exception print 'bbb' print 'ccc'
117 名前:114 mailto:sage [2010/02/14(日) 16:39:47 ] >>116 ありがとうございます。
118 名前:デフォルトの名無しさん [2010/02/14(日) 18:37:05 ] おっぱいうp
119 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:28:30 ] >>114 環境によって適切な終了方法が違う気がするけど import sys sys.exit() が使いやすいと思う。
120 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 07:02:06 ] raise SystemExit で良いらしい (import sys したくないとき)
121 名前:デフォルトの名無しさん [2010/02/21(日) 11:05:30 ] 教える人は自分が偉くなったと勘違いをしているのか…
122 名前:デフォルトの名無しさん [2010/02/21(日) 18:55:28 ] は?教えてやるんだから偉いんだお
123 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 23:50:04 ] www.python.jp/doc/release/tut/tut.html
124 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 14:58:29 ] 少なくとも匿名掲示板で教えられる方が偉いなんてことはあり得ないな
125 名前:デフォルトの名無しさん [2010/02/27(土) 00:46:13 ] import sys って具体的にどういうときに使うんですか?
126 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 00:52:06 ] sysをimportしたい時
127 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:21:25 ] sys.なんたら が必要なとき。