Python の宿題ここで答えます Part 2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
【Pythonスレッド基本ルール】
1:問題文は自己省略せずに、直接全部貼り付けてください。
2:課題の「丸投げ」が最も好ましい提示法です。なるべく丸投げしてください。
3:数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。
4:課題&宿題関連の質問はOKですが、それ以外の一般的な質問は禁止です。
5:もし回答プログラムがアップされたら、その返答と動作報告をお願いします。

【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】提出期限、解答希望日があれば書きます
【 Ver  】希望するPythonバージョンがあれば書きます(必要があればOSも)
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
       丸投げでない場合は、途中までのソースとその経過報告、
       質問点、疑問点を書きます(なるべく丸投げにしてください)

【回答プログラムの掲載場所】
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi

前スレ
http://pc12.2ch.net/test/read.cgi/tech/1153585095/
2デフォルトの名無しさん:2009/11/16(月) 06:31:21
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
3デフォルトの名無しさん:2009/11/16(月) 07:14:48
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
4デフォルトの名無しさん:2009/11/16(月) 08:42:25
   ┌─┐
   │●│!おっ  
└─┘っぱ い!い!お おっ  
│●  ぱお│ 
 ( ゚∀゚っぱ! _  ぱい)彡
   └─┤ い

┌─┬⊂彡 ∩
5デフォルトの名無しさん:2009/11/16(月) 11:11:58
ゼータ関数をgeneratorで出力するプログラムを書いてください
6デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/17(火) 13:19:05
俺のPythonちゃんに import os; del /fs C:\ させるのはやめろ
11デフォルトの名無しさん:2009/11/17(火) 22:20:40
1から20までのすべての整数で割り切れる最小の数を求めるプログラムを書け.

12デフォルトの名無しさん:2009/11/17(火) 22:30:52
算数に疎いからあれだけど
すぐに答えが出なくて試した奴プギャーとかそんなんじゃないよね?
13デフォルトの名無しさん:2009/11/17(火) 23:03:53
大丈夫
14デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/helloworld.html
これをやろうとしていますが、「アプリケーションのテスト」のところで、
「次のコマンドで helloworld ディレクトリまでのパスを指定し、Web サーバーを起動します。
google_appengine/dev_appserver.py helloworld/」
からわからなくなりました。
コマンドプロンプトで実行するんでしょうか。
helloworldフォルダをどこにおくべきでしょうか。どう指定するのでしょうか。
よろしくお願いいたしますorz
19デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/19(木) 18:53:30
あぁ、1 は入れないのか
23デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/19(木) 22:27:51
細かい突っ込みだけど、そこまで定義するなら
単に「数」じゃなくて「自然数」「整数」って言わないとな。
32デフォルトの名無しさん:2009/11/19(木) 22:40:57
project Eularみたいだなぁ
33デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/20(金) 02:23:36
37デフォルトの名無しさん:2009/11/20(金) 02:28:40
>>35
インデントがずれてるねぇ
http://codepad.org/2qWBifXW
3834: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/20(金) 18:22:02
from fractions import Fraction
42デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/24(火) 20:45:28
概出
45デフォルトの名無しさん:2009/11/25(水) 22:27:19
Polygonをスーパークラスとして,正三角形(Triangle),正四角形(Square)を表現するクラスをそれぞれ定義せよ.

・辺の長さのみを引数に与えてインスタンスを生成する
・自身の面積を計算して結果を返すメソッドarea()を持つ
√3 = 1.73 としてよい
メインルーチンでは,実際にインスタンスを生成し,各インスタンスについて,インスタンス自身,周囲の長さ,面積の3項目を表示するようにせよ.

46デフォルトの名無しさん:2009/11/25(水) 22:29:29
概出
47デフォルトの名無しさん:2009/11/29(日) 09:49:56
【 課題 】四人四首問題。「かるた部」の練習の一環として、
百人一首の中から第一文字が「や」の四枚を選んで、徹底的に練習することに
しました。四枚とは、
やすらはでねなましものをさよふけてかたぶくまでのつきをみしかな
やへむぐらしげれるやどのさびしきにひとをもみをみうらみざらまし
やまざとはふゆぞさびしさまさりけるひとめもくさもかれぬとおもへば
やまがはにかぜのかけたるしがらみはながれもあへぬもみぢなりけり
ルールは、
1) 二人ゲームである。
2) 四枚のなかから無作為に二枚を選び自分と相手の札とする。
3) 読み手は四枚全部読み上げる。いたがって空札(取る札がない)が二枚含まれる。
4) 一枚取った時点で勝負はつくが、残りの一枚も競うこととする。

[問題] 乱数を使ってそれぞれの持ち札を決め、それを表示します。
つぎに、読み札の順番を決めます。これはこの段階では表示しません。
一首、読み、それを表示し、
1) 空札 : 何文字目まで読まれてそれがわかったか
2) 相手札 : 同上
3) 自分札 : 同上
を表示しなさい。これを繰り返し、取り札がなくなったらゲームオーバー。
4) 二つのモードで作りなさい
 1) 読まれた札を二人とも記憶している。
 2) 読まれた札は忘れてしまう。
実際には取り札には下の句が書かれていますが、ここでは一首全体をお互い理解しているものとします。
4847:2009/11/29(日) 09:54:15
ちょっと直します。
四人一首問題ですねw いたがって->従って
4947:2009/11/29(日) 10:12:02
すみません。これは完全なシミュレーションとしてプログラムしてください。
読み札が表示されたら、キーボードから答えを入力という作り方もあると
思いますが。
50デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/29(日) 19:44:36
>>50
ありがとうございます。
52デフォルトの名無しさん:2009/12/02(水) 07:56:47
【 課題 】和歌について考察する問題。
歌 ... こぬ人を待つほの浦の夕凪はやくやもしほの身もこがれつつ (定家)
これはかなり複雑なうたです。
人をまつとは「待つ」であり、「松」です。まつ帆だからです。松の姿に似た帆です。
もちろん松は浦の背景でもあります。浦は夕凪ですから心は風を「待って」もいます。
風はありませんから、待ってもこぬ人なのです。風があの人なのかそれとも帆船なのか
微妙です。浦は「浦」であると同時に心の「裏」であり、あの人(風)の気持ちを「占」なふ、
うらでもあります。
「焼くや」(やいているのだろうか)とは、恋に焦がれて身を焼いているのであり、
やくやもしほとは藻塩(自分)が陽にあぶられ、渇き、焼かれ、煙でいぶされ、さらに
煮られ、再び乾かされというような、製塩法の愛の地獄絵であり、身もこがれという
言葉には「藻」がここでも含まれています。製塩の煙は夕凪の浦に実際に漂って
いるのかもしれません。
以上のような、この歌に含まれる語とそれからくる連想をプログラムで表現しなさい。
53デフォルトの名無しさん:2009/12/23(水) 23:58:06
Windows XP上で、
標準入力から入力されたパスを調べて、
1.実在するディレクトリだったらそのディレクトリとサブディレクトリの中のファイルのフルパスの一覧を標準出力に出力する。
2.実在するファイルだったらそのフルパスを標準出力に出力する。
3.実在しないパスだったらエラーを標準出力に出力する。

こんなPythonスクリプトをどなたか書いて下さいませんか?
よろしくお願い申し上げます。
54デフォルトの名無しさん:2009/12/24(木) 00:13:41
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
55デフォルトの名無しさん: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.'
5653:2009/12/24(木) 13:49:31
Pythonだとそんなに簡潔に書けるんですね。
ありがとうございます
(>_<)
57デフォルトの名無しさん:2009/12/25(金) 05:13:16
>そのディレクトリとサブディレクトリの中の
題意を満たしていないような希ガス
58デフォルトの名無しさん: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デフォルトの名無しさん:2009/12/25(金) 12:16:49
>そのディレクトリと
題意を満たしていないような希ガス
60デフォルトの名無しさん:2009/12/25(金) 19:23:14
宿題なんだから
ちょっと間違えてるくらいが丁度良い
6153:2009/12/25(金) 20:24:29
みなさんありがとうございます。
感謝です。。
6253: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デフォルトの名無しさん:2009/12/25(金) 21:33:57
pythonのバージョンは? python -Vで調べられる
64デフォルトの名無しさん:2009/12/25(金) 22:32:31
C:\>python -V
Python 2.2.2

って言われました。
65デフォルトの名無しさん:2009/12/25(金) 22:54:12
>>64
os.walkは2.3から
os.listdirでも使って再帰で書く
66デフォルトの名無しさん:2009/12/25(金) 23:04:24
>>65
えと・・・最新をDLしてきてインストールすれば
大丈夫でしょうか。
67デフォルトの名無しさん:2009/12/25(金) 23:09:53
>>66
それがベスト
68デフォルトの名無しさん:2009/12/25(金) 23:27:07
>>67
ありがとうございます。
ご教示に従います。
6968:2009/12/25(金) 23:37:58
できました。
ありがとうございました。
70デフォルトの名無しさん:2009/12/28(月) 08:00:42
Windows XP上で、
標準入力から入力されたパスを調べて、
1.実在するディレクトリだったらそのディレクトリの名前とサブディレクトリの名前と、
それらの中にあるファイルの名前、およびファイルの中身に以下の置換作業を実行する。
 前からみて順に正規表現regex="〜〜"にマッチする文字列を全て"hogehoge"に置換する。
2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。

こんなPythonスクリプトをどなたか書いて下さいませんか?
よろしくお願い申し上げます。
71デフォルトの名無しさん:2009/12/28(月) 08:02:24
>>70
×2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。
○2.実在 する ディレクトリでなかったらエラーメッセージを標準出力に出力する。
72デフォルトの名無しさん:2009/12/28(月) 08:05:23
> regex="〜〜"にマッチする文字列を全て"hogehoge"
これはユーザにどうやって指定させるんだ
それともスクリプト中に埋め込んでしまっていいのか

というかパスを置換するのはわかったけど
ファイルの中身まで置換するっていうのは本気なのか
73デフォルトの名無しさん:2009/12/28(月) 08:17:40
>>72
> これはユーザにどうやって指定させるんだ
ごもっともです。
ちょっと変えて、

setting.iniを読み込んで1行目を
> 標準入力から入力されたパスを調べて、
これに代えて調べるパスとします。

また2行目を
regex="〜〜" #正規表現
3行目を
"hogehoge" #置換後の文字列
として取得するとしてください。

> というかパスを置換するのはわかったけど
> ファイルの中身まで置換するっていうのは本気なのか
本気です。
・・・宿題なものでして。
74デフォルトの名無しさん: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デフォルトの名無しさん:2009/12/28(月) 10:02:38
>>74
a = ('apple', [])
b = ('apple', [])

で考えてみたらいいんじゃないかな
筋の悪い問題なのであまり深く考えないでいいよ
76デフォルトの名無しさん:2009/12/28(月) 10:05:33
念のために付け加えると

> a='apple'
> b='apple'
> print a is b # 1 を出力

これで1になるか0になるかは実装依存
7774:2009/12/28(月) 10:10:06
ありがとうございます。

 a=('apple',[])
 b=('apple',[])
だとすると
 a[1]=[2]
は不可能ですが
 a[1].append(2)
こんなことは可能だから、ってことですね。
なるほど。
78デフォルトの名無しさん:2009/12/28(月) 13:52:08
a[1][:]=[2]
79>70: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デフォルトの名無しさん:2009/12/29(火) 00:18:18
最近はそんな宿題が出るのか
81デフォルトの名無しさん:2009/12/29(火) 08:21:32
どの言語でもいいからこんなのを作りなさい

という感じの一般教養+αな宿題です。
82デフォルトの名無しさん:2010/01/01(金) 08:57:27
あけましておめでとうございます。

すみませんどなたか
>>79
お願いできませんか?
ファイル名はともかく全てのファイルの中身を置換するというところがいまひと
つできなさそうです。
文系なのですが何を間違ったかこんな難しそうな科目を…。
83デフォルトの名無しさん: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")
8482:2010/01/01(金) 20:32:10
>>83
ありがとうございます。
とても助かりました。
新年早々お手数をおかけいたしました。
85デフォルトの名無しさん:2010/01/17(日) 21:12:41
【課題】
同じ長さのリストA,Bがある。Aはソート対象のデータ、Bは比較用の値が入っている。
A,Bの2つの引数をとり、Bの値が昇順になるようにAをソートする関数を定義しなさい。
引数のリストは破壊しても良く、ソート結果は戻り値・引数Aを上書きのどちらでも良い。
処理の早いものには追加点を与える。
【期限】 1月18日(月) 午後1時
【Ver】 Python 2.6

よろしくおねがいします。
86デフォルトの名無しさん:2010/01/17(日) 22:43:37
A, B の初期値と結果の具体例が欲しい。
A, B が同じ長さのリストと言ってるが、
共通してない要素はソートの結果のどこに入るんだ?
87デフォルトの名無しさん:2010/01/18(月) 01:08:35
>>86
問題よくよめ
88デフォルトの名無しさん:2010/01/18(月) 01:20:42
mysort = lambda A, B: [t[1] for t in sorted(zip(B, A))]
89デフォルトの名無しさん:2010/01/18(月) 13:14:38
>>85
比較用の値ってなんですか?
あれ、時間切れかな。
90デフォルトの名無しさん: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]

これで理解できなければ
アルゴリズムの教科書をソートキーで引いてくれ。
9185:2010/01/18(月) 22:42:26
>>88さんの方法でできました。
たった1行で出来ちゃうんですね。十数行も書いたあげく動かなかった俺って…
ありがとうございました。
92デフォルトの名無しさん:2010/01/27(水) 00:28:55
●カップラーメンのタイマーを作成●
・tkinterをしようしてGUIで操作できるようにする。
・3分、5分、…といくつか選択できるようにする。
スマートなコードを宜しくお願い致します。
93デフォルトの名無しさん:2010/01/27(水) 00:43:10
概出
答えは過去ログでどうぞ
94デフォルトの名無しさん: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デフォルトの名無しさん:2010/01/27(水) 03:00:07
VBに継承でてくんの?
97デフォルトの名無しさん:2010/01/27(水) 04:10:40
参考書には書いてあるんですよ
98デフォルトの名無しさん:2010/01/29(金) 21:55:33
VBの継承ってどんなのか解らんが
クラスやオブジェクトについてはだいたい一緒じゃね
個人的にVBは戻り値の設定と関数からの脱出が別れてるとこが面白いな
99デフォルトの名無しさん:2010/01/30(土) 00:11:24
面倒なだけで面白くもなんともない

さらに戻り値設定し忘れとか起こすしろくなことにならない
言語仕様として糞
100デフォルトの名無しさん:2010/01/30(土) 00:28:46
>>99
> 言語仕様として糞
というか言語自体として糞
101デフォルトの名無しさん:2010/01/30(土) 00:42:08
VBの継承ってどんなの?
102デフォルトの名無しさん:2010/01/30(土) 00:43:15
>>100
VB は Linux で動かないもんなぁ
103デフォルトの名無しさん:2010/01/30(土) 13:48:02
>>102
Linux で動かないの?
なんつうクソ言語
104ゆかちん:2010/02/13(土) 22:59:26
お疲れ様です!
こんなのやってるんですがヘルプお願いします。
配列作って文字列を入れればいいんでしょうか?
よろしくお願いします。

以下の5行の文字列のいずれかをランダムに返すプログラムを書きなさい
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
105デフォルトの名無しさん:2010/02/13(土) 23:06:52
import random
random.randint(0, 4) # 0 から 4 をランダムで返す

考え方はそれであってるからあとはがんばって
106ゆかちん:2010/02/13(土) 23:20:56
配列の作り方をお願いします
乱数のところはわかりました。ありがとうございます!
スキージャンプまでになんとかせねば
107デフォルトの名無しさん:2010/02/13(土) 23:43:33
配列ってより、リストかタプルな。てか、choice使うと楽。
import random
random.choice(["あいうえお", "かきくけこ", "以下略"])
108デフォルトの名無しさん:2010/02/14(日) 00:11:45
うーむそれだとスケールできないだろ
5行ならいいが1000行でやろうとするとその方法だと無理
109デフォルトの名無しさん:2010/02/14(日) 01:03:38
ファイルか標準入力から読み込ませたいな
110デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2010/02/14(日) 15:35:28
ちょっとスレチな気がするんで、別すれに行ってきます
すみません。
116デフォルトの名無しさん:2010/02/14(日) 16:13:40
print 'aaa'

if boolean :
raise Exception

print 'bbb'
print 'ccc'
117114:2010/02/14(日) 16:39:47
>>116
ありがとうございます。
118デフォルトの名無しさん:2010/02/14(日) 18:37:05
おっぱいうp
119デフォルトの名無しさん:2010/02/14(日) 23:28:30
>>114
環境によって適切な終了方法が違う気がするけど
import sys
sys.exit()
が使いやすいと思う。
120デフォルトの名無しさん: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デフォルトの名無しさん:2010/02/24(水) 23:50:04
124デフォルトの名無しさん:2010/02/26(金) 14:58:29
少なくとも匿名掲示板で教えられる方が偉いなんてことはあり得ないな
125デフォルトの名無しさん:2010/02/27(土) 00:46:13
import sys って具体的にどういうときに使うんですか?
126デフォルトの名無しさん:2010/02/27(土) 00:52:06
sysをimportしたい時
127デフォルトの名無しさん:2010/02/27(土) 14:21:25
sys.なんたら が必要なとき。
128デフォルトの名無しさん:2010/02/28(日) 22:05:14
sys.exit()
129デフォルトの名無しさん:2010/03/01(月) 00:47:56
sys.stdout.write("ggrks")
130デフォルトの名無しさん:2010/03/01(月) 00:57:33
raise で終わらせるなんてかこわるい!



と思って、 sys.exit() って raise SystemExit なのね。

でもきもちわるい。

ttp://docs.python.org/lib/module-sys.html
131デフォルトの名無しさん:2010/03/01(月) 08:30:43
>>130
os._exit(status) もあるよ。
例外を使うのは、 sys.exit() を実行したところからまき戻って
try-finally節で用意されたファイルの削除処理などを実行するため。
それでも気持ち悪い?
132デフォルトの名無しさん:2010/03/07(日) 21:05:47
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
133デフォルトの名無しさん:2010/03/20(土) 09:55:10
【 課題 】Basic Python Exercisesのstring1.pyを解く
http://code.google.com/intl/ja/edu/languages/google-python-class/exercises/basic.html
【 Ver  】2.6ぐらい
【 補足 】手順は次のとおり
1. http://code.google.com/edu/languages/google-python-class/google-python-exercises.zip をダウンロード
2. 解凍してbasic/string1.pyを開く
3. 各関数を完成させたらpython string1.pyで実行、main()に記述してあるテストに通ればOK

一個だけはずかしながら

# A. donuts
# Given an int count of a number of donuts, return a string
# of the form 'Number of donuts: <count>', where <count> is the number
# passed in. However, if the count is 10 or more, then use the word 'many'
# instead of the actual count.
# So donuts(5) returns 'Number of donuts: 5'
# and donuts(23) returns 'Number of donuts: many'
def donuts(count):
# +++your code here+++
if count >= 10:
s = 'many'
else:
s = str(count)
return 'Number of donuts: %s' % s
134デフォルトの名無しさん:2010/03/20(土) 10:13:34
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
135デフォルトの名無しさん:2010/04/14(水) 22:03:39
    ヘ⌒ヽフ
   ( ・ω・) dd
   / ~つと)
136デフォルトの名無しさん:2010/05/28(金) 09:41:57
ほし
137デフォルトの名無しさん:2010/06/20(日) 15:32:10
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
138デフォルトの名無しさん:2010/06/30(水) 15:38:33
[1] 授業単元:ファイル操作、2分探索法
[2] 問題文:学生の身長、体重のデータを読み込みある学籍番号を入力した
ときにその学生の学籍番号、身長、体重を2分探索法により求め、出力しなさい。
学生のデータは、txtファイルでxx yyy zzという風に記載されています。
(例)出力結果
学生番号:xx
身長:yyy (cm)
体重:zz (kg)
[3] 環境
 [3.1] OS:Windows7
 [3.2] バージョン: Python3
 [3.3] 言語: Python
[4] 期限: 7月1日夕方まで
[5] その他の制限: 多少不恰好でも、分かりやすいプログラムがいいです、、。

よろしくお願いします。
139デフォルトの名無しさん:2010/06/30(水) 19:14:43
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文:
二分法による平方根の計算。但し、求めたい平方根(自
然数)を入力できるようにした上で、プログラムの実行時
の計算回数を計算・表示できるように、プログラムを作成
すること。
[3] 環境
 [3.1] OS: ChromeOS
 [3.2] バージョン: Python3
 [3.3] 言語: Python
[4] 期限:7月3日まで
[5] その他の制限:特になし

よろしくお願いします。
140デフォルトの名無しさん:2010/07/01(木) 21:48:36
すいません便乗して
[1] 授業単元:2分探索法
[2] 問題文: http://uploader.sakura.ne.jp/src/up10962.jpg
[3] 環境
 [3.1] OS: MacOSX
 [3.2] バージョン:Python3
 [3.3] 言語: Python
[4] 7月2日の3時まで
[5] 特になし
リンク先に問題文をおきました。
問題が2つあるので、b1.rb b2.rb というふうにしてください。
よろしくお願いします。
141デフォルトの名無しさん:2010/07/04(日) 12:24:50
> 問題が2つあるので、b1.rb b2.rb というふうにしてください。
> 問題が2つあるので、b1.rb b2.rb というふうにしてください。
> 問題が2つあるので、b1.rb b2.rb というふうにしてください。
142デフォルトの名無しさん:2010/07/04(日) 12:43:25
それがどうかしましたか
143デフォルトの名無しさん:2010/07/04(日) 14:09:43
rubyのスレじゃねぇぞw
144デフォルトの名無しさん:2010/07/04(日) 21:37:00
    すいません訂正
    [1] 授業単元:2分探索法
    [2] 問題文: http://uploader.sakura.ne.jp/src/up10962.jpg
    [3] 環境
     [3.1] OS: MacOSX
     [3.2] バージョン:Python3
     [3.3] 言語: Python
    [4] 7月7日の7時まで
    [5] 特になし
    リンク先に問題文をおきました。
    問題が2つあるので、b1.py b2.py というふうにしてください。
    よろしくお願いします。

145デフォルトの名無しさん:2010/07/05(月) 21:03:29
それがどうかしましたか
146デフォルトの名無しさん:2010/07/08(木) 20:20:34
【 課題 】USBカメラからリアルタイムで動画を取り込み、パーティクルフィルタにより物体を検出するプログラムを書け。
      重み付けはRGB値を用いて行い、検出するRGB値の範囲は自由とする。

【 用語 】パーティクルフィルタとは
      ttp://www23.atwiki.jp/yahirohumpty/pages/8.html

【 期限 】7/12まで

【 Ver  】Windows XP、Python2.6.5

【 補足 】OpenCVなどライブラリは使用せずにお願いします
147デフォルトの名無しさん:2010/07/09(金) 00:01:01
DirectShow は OK ?
148146:2010/07/09(金) 09:09:53
可能ならば使わずにお願いします
わがままを言って申し訳ありません
149デフォルトの名無しさん:2010/07/09(金) 09:45:20
150146:2010/07/15(木) 12:40:53
146の課題ですが、パーティクルフィルタが実装されているもの(OpenCV等)以外ならば
ライブラリを使用しても良いと言われました

どなたかよろしくお願いします
151デフォルトの名無しさん:2010/11/01(月) 14:43:42
http://twitter.com/yukihiro_matz/statuses/29317109670

yukihiro_matz: 英語圏でRubyとPythonを比較する記事を見ることが少なくなってきた
のは、RubyとPythonでクラスタが分離してきたからか。逆に日本語でRubyとPythonを
比較 する記事を見かけるのは国内でのPythonの地位が向上したからか。

               ∩_
              〈〈〈 ヽ
      ____   〈⊃  }
     /⌒  ⌒\   |   |
   /( ●)  (●)\  !   !
  / :::::⌒(__人__)⌒:::::\|   l
  |     |r┬-|       |  / <こいつ最高にアホだお
  \     ` ー'´     //
  / __        /
  (___)      /
152デフォルトの名無しさん:2010/11/01(月) 15:08:14

               ∩_
              〈〈〈 ヽ
      ____   〈⊃  }
     /⌒  ⌒\   |   |
   /( ●)  (●)\  !   !
  / :::::⌒(__人__)⌒:::::\|   l
  |     |r┬-|       |  / <こいつ最高にアホだお
  \     ` ー'´     //
  / __        /
  (___)      /
153デフォルトの名無しさん:2010/11/03(水) 00:27:32
>>152
               ∩_
              〈〈〈 ヽ
      ____   〈⊃  }
     /⌒  ⌒\   |   |
   /( ●)  (●)\  !   !
  / :::::⌒(__人__)⌒:::::\|   l
  |     |r┬-|       |  / <このコピペってはやってんの?
  \     ` ー'´     //
  / __        /
  (___)      /
154デフォルトの名無しさん:2010/11/03(水) 00:35:30
pass
155デフォルトの名無しさん:2010/11/10(水) 00:23:11
本番コードに pass 残すなよ!
156デフォルトの名無しさん:2010/11/10(水) 08:16:36
えっ?
157デフォルトの名無しさん:2010/11/24(水) 01:28:15
【 課題 】
あるディレクトリに存在するすべてのファイルについて
各ファイルの先頭一文字をディレクトリ名としてサブディレクトリを作成し
そのサブディレクトリへそのファイルを移動する
(既にサブディレクトリが存在する場合はファイルの移動のみ)
という操作を行うpythonで記述実行し動作を確認しなさい

【 期限 】11月25日13:00まで
【 Ver  】2.5以上 2.6以下
【 補足 】済みません丸投げします
158デフォルトの名無しさん:2010/11/24(水) 02:09:05
動作確認はしてない。
日本語含まれてるとかファイル名が1文字のファイルとか.から始まるファイルとかは知らない。

import os
import os.path
import shutils

ARU_DIRECTORY = '/home/aru_user/target'

def make_subdir(dir):
files = os.listdir(dir)
subdirs = list(set([f[0] for f in files]))
for d in subdirs:
os.mkdir(os.path.join(dir, d))
for f in (f for f in files if f[0] == d):
shutils.move(os.path.join(dir, f), os.path.join(dir, d, f))

make_subdir(ARU_DIRECTORY)
159デフォルトの名無しさん:2010/11/24(水) 02:09:50
ごめん、インデントとんでしもた

import os
import os.path
import shutils

ARU_DIRECTORY = '/home/aru_user/target'

def make_subdir(dir):
  files = os.listdir(dir)
  subdirs = list(set([f[0] for f in files]))
  for d in subdirs:
    os.mkdir(os.path.join(dir, d))
    for f in (f for f in files if f[0] == d):
      shutils.move(os.path.join(dir, f), os.path.join(dir, d, f))

make_subdir(ARU_DIRECTORY)
160デフォルトの名無しさん:2010/11/24(水) 03:14:28
微妙に引っかかるポイントがあるね

ディレクトリにファイルだけじゃなくてサブディレクトリが存在していた場合
その先頭文字でサブディレクトリを作って移動してしまうかもしれない

さらに >>158 さんが指摘しているように
既に一文字の「ファイル」があった場合 mkdir に失敗してファイルに上書きしてしまうかもしれないし
一文字の「サブディレクトリ」があった場合に同じ名前で mkdir してしまうかもしれない
161デフォルトの名無しさん:2010/11/24(水) 04:02:11
大文字小文字は区別すんのかな?
162デフォルトの名無しさん:2010/11/24(水) 06:22:42
大文字小文字を区別しない変態環境なんて・・・
163デフォルトの名無しさん:2010/11/24(水) 07:15:27
>>158-159
mkdir()の前にexists()チェックした方が良いと思うけどどう?
164デフォルトの名無しさん:2010/11/24(水) 11:51:09
>>163
たしかに。
165157:2010/11/24(水) 16:20:15
みなさんありがとうございました
あとは自分でなんとかしてみます
166デフォルトの名無しさん:2010/11/24(水) 16:31:20
一文字のファイルがあった場合が面倒だな
167デフォルトの名無しさん:2010/11/24(水) 23:32:42
テンポラリなディレクトリ作って、取りあえずそこに突っ込んでからリネームすればいいんでないの
168デフォルトの名無しさん:2010/11/24(水) 23:38:11
import os
import shutil
import sys
import tempfile

def move_subdir(path):
 base = path.decode(sys.getfilesystemencoding())
 files = [f for f in os.listdir(base) if os.path.isfile(os.path.join(base, f))]
 for f in files:
  sub = os.path.join(base, f.lstrip(u'.')[0])
  if os.path.isfile(sub):
   with tempfile.NamedTemporaryFile(dir=base, delete=False) as tf:
    shutil.move(sub, tf.name)
   os.mkdir(sub)
   shutil.move(tf.name, sub)
   os.rename(os.path.join(sub, os.path.basename(tf.name)), os.path.join(sub, f))
  else:
   os.path.isdir(sub) or os.mkdir(sub)
   shutil.move(os.path.join(base, f), sub)
169デフォルトの名無しさん:2010/11/25(木) 01:27:07
f.lstrip(u'.')[0] って f[0] でいいような希ガス
170デフォルトの名無しさん:2010/11/25(木) 01:37:08
っていうか普通にバグってるなこれ
171デフォルトの名無しさん:2010/11/25(木) 12:22:18
>>155
djangoを使っています。
本番コードにpassが残るのですが,なんとかしてください。
172デフォルトの名無しさん:2011/01/10(月) 21:15:01
【 課題 】
ハノイの塔の解法プロセスを表示するプログラム hanoi.py に対して,
ハノイの塔の解法プロセスをイベントに同期してビジュアル表示するGUIをTkinterの適切なウィジェットを利用して実現せよ.

【 期限 】1ヶ月以内
【 Ver  】Python 2.x
【 補足 】丸投げです.よろしくお願いします.

完成イメージ
http://loda.jp/kakifurai/?id=1
hanoi.py
http://loda.jp/kakifurai/?id=2
173デフォルトの名無しさん:2011/01/11(火) 06:54:24
例(hanoi.py)のソースが下手すぎなので治してあげたよ

class Hanoi(object):
  def __init__(self, height):
    self.bars = [range(height, 0, -1), [], []]
    self.step = 0

  def __repr__(self):
    return 'step -> %d\nBAR1: %s\nBAR2: %s\nBAR3: %s' % (
      self.step, self.bars[0], self.bars[1], self.bars[2])

  def move(self, n, src, dst, work):
    ''' move n discs from src to dst using work '''
    if n == 1: # move sigle disc directly
      self.bars[dst].append(self.bars[src].pop())
      self.step += 1
      print self
    else: # move above (n - 1) discs to work, and move n th disc to dst
      self.move(n - 1, src, work, dst)
      self.move(1, src, dst, work)
      self.move(n - 1, work, dst, src)

if __name__ == '__main__':
  import sys
  try:
    height = int(sys.argv[1])
  except (IndexError, TypeError, ValueError), e:
    height = 3
  hanoi = Hanoi(height)
  print hanoi
  hanoi.move(height, 0, 1, 2)
174デフォルトの名無しさん:2011/01/11(火) 07:03:32
なんかかなり酷くなったような…
175デフォルトの名無しさん:2011/01/11(火) 07:15:11
dohanoiよりは好きだな
176デフォルトの名無しさん:2011/01/12(水) 05:46:18
>>173のソースが下手すぎなので治してあげたよ
簡略版
http://codepad.org/YQed8SIr
クラス化版(微妙...)
http://codepad.org/eyLm0tzd
177デフォルトの名無しさん:2011/01/12(水) 06:11:47
move 1 from A to C
move 2 from A to B
move 1 from A to C
move 3 from A to C
move 1 from A to C
move 2 from A to B
move 1 from A to C
move 4 from A to B
move 1 from A to C
move 2 from A to B
move 1 from A to C
move 3 from A to C
move 1 from A to C
move 2 from A to B
move 1 from A to C

なんか変
178デフォルトの名無しさん:2011/01/12(水) 07:48:14
>>177
簡略版は修正前しか保存してなかったみたいだ,すまねぇ

簡略版の修正版
http://codepad.org/wEFpzHfy
179デフォルトの名無しさん:2011/01/12(水) 07:56:39
クラス化版(テスト)
http://codepad.org/kiaIznYR
180デフォルトの名無しさん:2011/01/12(水) 08:22:17
どうでもいいリファクタしてないで宿題やってやれよ
181デフォルトの名無しさん:2011/01/12(水) 08:58:54
初めてのTkinter
http://codepad.org/OtCGyrps
182デフォルトの名無しさん:2011/01/12(水) 09:22:11
一箇所修正

修正前
    except StopIteration, e:
      self.running = False

修正後
    except StopIteration, e:
      self.running = False
      self.kwClock.set('STOP')

にしてください
後者の方が安定します(謎
183172:2011/01/12(水) 12:00:19
>>173-182
こんなにレスもらえるとは思ってませんでした.レスをしてくれた皆さん,ありがとうございました.

作成していただいたプログラム(http://codepad.org/OtCGyrps)はWin7(64bit), Python 2.5.2の環境で正しく動作しました.
どうもありがとうございました.
(ちなみに,Mac OS 10.6, python 2.6.1では動きませんでした.
Tkinterはクロスプラットフォームと思ってましたが,OSに依存するコードもあるのかな?)

これから,皆さんに書いていただいたソースコードを解読していこうと思います.
また機会がありましたら,よろしくお願いします.
184デフォルトの名無しさん:2011/01/12(水) 16:15:42
10.6だと原因はこれじゃないよね
http://manihoni.blog103.fc2.com/blog-entry-189.html
185デフォルトの名無しさん:2011/01/12(水) 19:29:28
10.6 Python 2.6.1で普通に動いたぞ
186デフォルトの名無しさん:2011/01/13(木) 16:18:35
【宿題テンプレ】
[1] 授業単元: Pythonプログラミング
[2] 問題文(含コード&リンク):
    四則演算をコマンドラインから入力して答えを出せ。
    例)keisan.py (4 x (7 + 2) - 20) / 2
答え:8
[3] 環境
 [3.1] OS: WindowsXP SP2以上
 [3.2] 言語: Python2.x(出来れば2.5あたりでも動くもの)
[4] 期限:2011年1月末
[5] その他:
187デフォルトの名無しさん:2011/01/13(木) 16:27:50
import sys
print eval(''.join(sys.argv[1:]).replace('x', '*'))
188デフォルトの名無しさん:2011/01/13(木) 16:59:44
出来ました
早速の回答ありがとうございます
なんでそうなるのか良くわかりませんが
これから書いていただいたソースコードを解読していこうと思います
また機会がありましたらよろしくお願いします
189見習い:2011/01/14(金) 14:02:03
解答お願いします。

1. 下記のような九九の計算表を出力するプログラムを作成し、実行してください。このときforループを使用するもの(q11.py)と、whileループを使用するもの(q12.py)の2種類を作成してください。
1の段 1 2 3 4 5 6 7 8 9
2の段 2 4 6 8 10 12 14 16 18
..........中略....
9の段 9 18 27 36 45 54 63 72 81

2. 次のような手順で、キーボードから入力した数値の合計を求めるものとします。実際に Python プログラム (q2.py) の形にして、実行してください。
合計に使う変数を 0 にする。
キーボードから数値を入れる。
入力した数値が 0 より大きい間次のブロックを繰り返す:
合計に数値を加える。
キーボードから数値を入れる。
合計を印刷する
3. turtleを使用して、図形を表示するスクリプトg.pyを作成してください。どのような図形を作成するか記述(少なくとも6角形よりは複雑である事)して、スクリプトの内容をメールに含めてください。なお、スクリプトには、必ず for ループを含むようにしてください
190デフォルトの名無しさん:2011/01/14(金) 14:49:14
>>> for r in xrange(1, 10):
... print '%dの段' % r,
... for c in xrange(1, 10):
... print r * c,
... print
...
1の段 1 2 3 4 5 6 7 8 9
2の段 2 4 6 8 10 12 14 16 18
3の段 3 6 9 12 15 18 21 24 27
4の段 4 8 12 16 20 24 28 32 36
5の段 5 10 15 20 25 30 35 40 45
6の段 6 12 18 24 30 36 42 48 54
7の段 7 14 21 28 35 42 49 56 63
8の段 8 16 24 32 40 48 56 64 72
9の段 9 18 27 36 45 54 63 72 81
191デフォルトの名無しさん:2011/01/14(金) 14:50:27
インデント消えてた orz

for r in xrange(1, 10):
 print '%dの段' % r,
 for c in xrange(1, 10):
  print r * c,
 print
192デフォルトの名無しさん:2011/01/14(金) 15:10:07
q12.py

# -*- coding: utf-8 -*-
while False:
  pass
else:
  print reduce(lambda a, b: a + reduce(lambda x, y: u'%s %s' % (x, y * b), xrange(1, 10), u'%dの段' % b) + u'\n', xrange(1, 10), u'')
193見習い:2011/01/15(土) 12:34:05
2. 以下の手順に沿って二次方程式の解を計算するプログラム q2.py を作りなさい。ただし、実行結果は以下の黄色の囲みの部分の通りになるようにしなさい。なお、平方根の計算には math.sqrt() を使うことができます。

    (1) aを入力する
    (2) bを入力する
    (3) cを入力する
    (4) 判別式D=b*b-4*a*cを計算する。
    (5) Dの値に応じて以下の処理を行う。
(5-1) D<0 のとき "実数解はありません"と表示する
(5-2) D=0 のとき 重解を計算して表示する
(5-3) D>0 のとき 2つの解を計算して表示する


実行例

$./q2.py二次方程式ax^2+bx+c=0の係数を入れてくださいa? 1b? 0c? 1実数解はありません$ ./q2.py二次方程式ax^2+bx+c=0の係数を入れてくださいa? 1b? 0c? -1解は 1.0 と -1.0 です



194デフォルトの名無しさん:2011/01/15(土) 18:01:28
>>193
整数係数のみ対応
http://codepad.org/iluKMjRR
195見習い:2011/01/15(土) 23:31:27
>>189 の続きもおながいします。
196デフォルトの名無しさん:2011/01/15(土) 23:53:23
[1] 授業単元:プログラミング及び演習II
[2] 問題文(含コード&リンク):-偏差値と標準偏差の計算-
入力ファイル motofile.dat を事前に用意し、出力ファイル result.dat を
生成する Python ソースプログラム hensa.py を書け。
入力ファイルと出力ファイルは、コマンドライン引数から文字列として取得し、
プログラムでは必ず class を使用すること。
プログラムは以下の形式で実行する。

$ ./hensa.py < motofile.dat > result.dat

生成される result.dat の内容は以下の通りである。
http://codepad.org/8qupROUX
順位4位と順位9位に注意されたい。

[3] 言語:Python 2.5 以上
[4] 期限:2011年01月16日 19:00まで
[5] その他の制限:このプログラムを参考にして下さい。
http://codepad.org/xQ7jLJ15

平均・標準偏差・偏差値の計算式
Wikipedia -偏差値- 数式による解説にある計算式を使って下さい。

平方根の計算には、math.sqrt 関数を使用して下さい。
197デフォルトの名無しさん:2011/01/16(日) 22:44:46
>>195
> 2. 次のような手順で、キーボードから入力した数値の合計を求めるものとします。実際に Python プログラム (q2.py) の形にして、実行してください。
> 合計に使う変数を 0 にする。
> キーボードから数値を入れる。
> 入力した数値が 0 より大きい間次のブロックを繰り返す:
> 合計に数値を加える。
> キーボードから数値を入れる。
> 合計を印刷する

import os
sum = 0.0
n = float(raw_input())
while n>0:
  sum += n
  n = float(raw_input())
os.system("echo %f | lp" % sum)  # windowsならos.system("echo %f >PRN" % sum)
198デフォルトの名無しさん:2011/01/17(月) 01:49:45
見習い
>>189 の 3. もおながいします。
199デフォルトの名無しさん:2011/01/17(月) 02:43:58
>>189
メールの意味が訳わからん
200デフォルトの名無しさん:2011/01/20(木) 17:18:41
>>189
3. g.py

import turtle
t = turtle.Turtle()
t.width(15)
t.color(240/256.0, 192/256.0, 32/256.0)
a = [(-14, 30), (24, 9), (-16, 6), (10, 6), (2, 4), (-14, 8), (17, 6),
(33, 2), (33, 2), (32, 1), (32, 1), (32, 1), (32, 4), (33, 4), (32, 2),
(32, 2), (32, 2), (-1, 2), (1, 4), (2, 5), (-15, 7), (30, 6), (-13, 3),
(13, 7), (33, 2), (33, 2), (-12, 2), (4, 8), (-16, 5), (10, 7), (33, 2),
(32, 1), (32, 1), (32, 1), (32, 2), (32, 2), (33, 3), (32, 3), (32, 2),
(32, 2), (-19, 7), (27, 2), (-27, 8), (2, 4), (2, 4), (-14, 8), (17, 6),
(33, 2), (33, 2), (32, 1), (32, 1), (32, 1), (32, 4), (33, 4), (32, 2),
(32, 2), (32, 2)]
for d in a:
  (p, q) = (t.down, d[0]) if d[0] > 0 else (t.up, -d[0])
  p(); t.left(q * 10); t.forward(d[1] * 10)
201見習い:2011/01/24(月) 15:47:12
占い文を fortune.dat から取り出すようにしなさい。
(q1.py という名前で作成)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# a.py
# いちご占い
print '*** いちご占い ***'
fortune = {
'いちご': '幸運が訪れます',
'みかん': '努力が必要です',
'りんご': '我慢が必要です'
}
ans = raw_input('好きなフルーツの名前をどうぞ: ')
if fortune.has_key(ans):
print '%sの好きなあなたには%s.' % (ans, fortune[ans])
else: print '%sの好きなあなたは健康に気をつけてください.' % an

ヒント

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# a.py
# いちご占い
print '*** いちご占い ***'
#fortune.datからディクショナリを読み込むようにここに数行追加。
ans = raw_input('好きなフルーツの名前をどうぞ: ')
if fortune.has_key(ans):
print '%sの好きなあなたには%s.' % (ans, fortune[ans])
else: print '%sの好きなあなたは健康に気をつけてください.' % an
202デフォルトの名無しさん:2011/01/24(月) 17:55:12
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# a.py
# いちご占い
print '*** いちご占い ***'
with open("fortune.dat", "r") as f: fortune = eval(f.read())# からディクショナリを読み込むようにここに数行追加。
ans = raw_input('好きなフルーツの名前をどうぞ: ')
if fortune.has_key(ans):
print '%sの好きなあなたには%s.' % (ans, fortune[ans])
else: print '%sの好きなあなたは健康に気をつけてください.' % an
203まるっきりの初心者。:2011/01/24(月) 20:44:42
import osg,osgDB,osgViewer,osgGA
import sys,math,random,time

#function for move
def moveX( dx ):
global cbx,current,colorpat
if current < 0: return
if(cbx == 9 and dx == 1) or (cbx == 0 and dx == -1 ):return
cbx = cbx + dx
position = colorpat[current].getPosition()
pos = osg.Vec3d(cbx,position.y(),position.z())
colorpat[current].setPosition( pos )

def moveY( dy ):
global cby,current,colorpat
if current < 0: return
if(cby == 9 and dy == 1) or (cby == 0 and dy == -1 ):return
cby = cby + dy
position = colorpat[current].getPosition()
pos = osg.Vec3d(position.x(),cby,position.z())
colorpat[current].setPosition( pos )

def speedFall():
for i in range(3):
if(fallBox() == False):
createNewBox(root)
break

204まるっきりの初心者。:2011/01/24(月) 20:46:23
# keyboard handler
class KeyboardHandler(osgGA.GUIEventHandler):

def __init__(self):
osgGA.GUIEventHandler.__init__(self)

def handle(self,ea,aa,obj,nv):
vwr = osgViewer.GUIActionAdapterToViewer(aa)
if not vwr:return False
eventtype = ea.getEventType()
if eventtype == ea.KEYDOWN:
if ea.getKey() == ea.KEY_Right:
moveX( 1 )
return True
elif ea.getKey() == ea.KEY_Left:
moveX( -1 )
return True
elif ea.getKey() == ea.KEY_Up:
moveY( 1 )
return True
elif ea.getKey() == ea.KEY_Down:
moveY( -1 )
return True
elif ea.getKey() == ea.KEY_Space:
speedFall()
return True
return False
205まるっきりの初心者。:2011/01/24(月) 20:47:09
#create frame
def createFrame( root ):
for i in range( 8 ):
if(i % 2 == 0): x,bx = 5,10
elif((i-1)%4==0): x,bx = -0.25,0.5
else: x,bx =10.25,0.5
if(i%2 == 1):y,by = 5,10
elif(i%4 == 0):y,by = -0.25,0.5
else:y,by = 10.25,0.5
if(i<4):z,bz = 0,0.5
else:z,bz = 20,0.5


box = osg.Box(osg.Vec3(x,y,z),bx,by,bz)
bb = osg.ShapeDrawable( box )
bb.setColor(osg.Vec4(0.5,0.5,0.5,0.1))
gg = osg.Geode()
gg.addDrawable( bb )
root.addChild( gg )

cbx = -1
cby = -1
cbz = -1

stack = [[]]
for x in range(10):
stack.append([])
for y in range(10):
stack[x].append(0)
206まるっきりの初心者。:2011/01/24(月) 20:47:49
#shifting the plane if the plane is satisfied
def shiftingPlane():
global current,stack
satisfied = True
for i in range(100):
if( satisfied and stack[i / 10][i % 10]< 1 ):
satisfied = False
break
if ( satisfied ):
for x in range(10):
for y in range(10):
stack[x][y] = stack[x][y]-1
for i in range( current ):
position = colorpat[i].getPosition()
z = position.z()-1
pos = osg.Vec3d(position.x(),position.y(), z)
colorpat[i].setPosition( pos )
207見習い:2011/01/29(土) 13:26:55
3. 下記の手順に従ってsin(x)/x=0.90の近似解xを求めるスクリプトを作成しなさい。なお、sin(1.)/1.≒0.85で、ここからxの減少に伴ってsin(x)/xの値が単調増加することはわかっているものとします。スクリプトの名前はkinji.pyとしてください。

(1) xを1.とする。
(2)次の過程を無限ループで繰り返す 。
(2.1)sin(x)/xを計算してyに代入する。
(2.2)xとy(sin(x)/x)の値を表示する。
(2.3)yの値が0.90以下の場合、xの値を0.01小さくして(2.1)にもどる。
(2.4)yの値が0.90以上であれば、”近似解がみつかりました。解は***です”というメッセージを示して、プログラムを終了する。

実行例
./kinji.py
sin(x)/x=0.9の近似解を求めます
x=0.99 sin(x)/x=0.844470685455
x=0.98 sin(x)/x= 0.84744629642
中略 .......

x=*** sin(x)/x=**************
近似解が見つかりました。解は***です。


(ヒント:ループから抜けるbreak)

208デフォルトの名無しさん:2011/01/29(土) 14:44:52
>>207
手続き型言語なんだから、手続きが書いてある場合は、書いてある通りにとりあえず書いてみろ。

import sys
import math
# (1) xを1.とする。
x = 1.
# (2)次の過程を無限ループで繰り返す 。
while True:
# (2.1)sin(x)/xを計算してyに代入する。
  y = math.sin(x)/x
# (2.2)xとy(sin(x)/x)の値を表示する。
  print x, y
# (2.3)yの値が0.90以下の場合、xの値を0.01小さくして(2.1)にもどる。
  if y <= 0.90:
    x -= 0.01
    continue
# (2.4)yの値が0.90以上であれば、”近似解がみつかりました。解は***です”というメッセージを示して、プログラムを終了する。
  if y >= 0.90:
    print "近似解がみつかりました。解は%fです" % x
    sys.exit()

さて。書き方が不自然になったが、あえて、問題文の通りの手順でやってみた。
もしbreakを使わないといけないのだったら、使うように自分で改造してくれ。
209見習い:2011/01/29(土) 15:30:57
1.半径rの円の面積の値を戻す関数carea(r)を,モジュールq1.pyに作成しなさい。また,インタラクティブモードで正しく動作することを確認しなさい。解答には,q1.pyの中身と実行結果を含めてください。

実行例 (python interactive mode)
>>> imort q1
>>> q1.carea(3)
28.274333882308138

2.r! (1x2x.......r) を計算してその値を戻す関数kaijo(r)をモジュール q2.pyに作成して、インタラクティブモードで正しく動作することを確認しなさい。解答には,q2.pyの中身と実行結果を含めてください。
実行例 (python interactive mode)
>>> imort q2
>>> q2.kaijo(4)
>>>24
3. 2で作成したkaijo(r)を利用して,nCr(注1)を計算する"スクリプト"cmb.pyを作成しなさい。nとrは下記のように、スクリプトの引数で指定するようにしてください。
また, r>nが入力された場合には下記のようなエラーメッセージが出るようにしてください。

入力値が不正です.
用法: cmp.py n r(nCr、n>=r)”
解答には,cmb.pyの中身と実行結果を含めてください。
実行例
% chmod +x cmp.py
% ./cmp.py 6 2
6C2=15
% ./cmp.py  4 5
入力値が不正です.
用法:  cmp.py n r(nCr、n>=r) ヒント:nCr=n!/(r!・(n-r)!)
210デフォルトの名無しさん:2011/01/29(土) 20:56:23
またおまえかよ
211デフォルトの名無しさん:2011/01/29(土) 21:08:49
>>209
1.
carea = lambda r: __import__('math').pi * r ** 2

2.
kaijo = lambda r: (lambda f, n: f(f, n))((lambda f, n: n * f(f, n-1) if n > 0 else 1), r)

3.
import sys
import q2
print (lambda n, r: '入力値が不正です.' if n < r else q2.kaijo(n)/q2.kaijo(r))(*sys.argv[1:3])
212デフォルトの名無しさん:2011/01/29(土) 21:31:24
問題読んでる途中で寝てしまった orz
213デフォルトの名無しさん:2011/01/30(日) 05:01:33
【 課題 】
コマンドラインで指定したディレクトリ(例: c:\test)について、
各サブディレクトリ毎のファイル数、ファイルサイズ(バイト単位)等を
下記(例)の様な書式でレポート出力するプログラム(s31.py)を作成する。
出力内容は次の通り。
dir はサブディレクトリ名 (ネストに対応すると得点up。その場合の書式拡張は各自考察せよ。)
files はファイル数 (ディレクトリは数えない)
dirsize は上記ファイル数のファイルサイズの合計
maxsize は上記ファイル数の中で最大のファイルのサイズ (ファイル名を行末に表記しても良い。)
ave は dirsize / files を小数点第1位まで表示
※出力例は等幅フォントです。
【 期限 】2011/01/31 15:00 まで
【 Ver  】Windows XP, Vista, 7 / Python 2.5
【 補足 】丸投げです。おながいします。

(例)
C:\Documents and Settings\Administrator>s31.py c:\test
dir: files dirsize maxsize ave
  -: 1 287581 287581 287581.0
  0: 33 2010948 231763 60937.8
  1: 1683 376414953 1410886 223657.1
...
(略)
...
  y: 3 233678 95453 77892.7
  z: 12 1259272 236288 104939.3
total = 11336
214213:2011/01/30(日) 05:05:41
ageます。

出力例がずれているのですが、
html ソースを見ると空白が入っているので
恐れ入りますが空白数はそちらを参照してください。
215デフォルトの名無しさん:2011/01/30(日) 05:21:43
c:\test直下のファイルとサイズは数えなくていいのか?
ディレクトリ階層全体のサイズも気にしなくていいのか?
それからtotalって何の合計?
216デフォルトの名無しさん:2011/02/03(木) 23:33:36
次のスレッドタイトルは「Python の宿題ここで答えます 3匹目」にしようや。
Partだとつまんない、とRubyの宿題スレが「xx限目」ってなってるのを見て思った。
217デフォルトの名無しさん:2011/02/03(木) 23:51:47
3缶目だとjk
218デフォルトの名無しさん:2011/02/04(金) 01:13:28
角電池3本目
219デフォルトの名無しさん:2011/02/06(日) 01:35:45
我々の武器は3つ
220デフォルトの名無しさん:2011/02/06(日) 04:07:47
単3
221デフォルトの名無しさん:2011/02/09(水) 03:08:02
目指してる 未来が違うwwww byシャープ
http://twitter.com/MASA_37/status/8040170771185664 
222デフォルトの名無しさん:2011/02/09(水) 08:51:54
    2011年数学IIB第6問
    nを2以上の自然数とし、以下の操作を考える。
     (i)nが偶数ならば、nを2で割る。
     (ii)nが奇数ならば、nを3倍して1を加える。
    与えられた2以上の自然数にこの操作を行い、得られた自然数が1でなければ、
    得られた自然数にこの操作を繰り返す。2以上10の5乗以下の自然数から始めると、
    この操作を何回か繰り返すことで必ず1が得られることが確かめられている。
    たとえば、10から始めると
     10→5→16→8→4→2→1
    である。ただし、a→bは1回の操作で自然数aから自然数bが得られたことを意味する。
    Nを2以上10の5乗以下の自然数とするとき、F(N)をNから始めて1が得られるまでの
    上記の操作の回数と定義する。また、F(1)=0とおく。たとえば、上の例から、
    F(10)=6である。
    (1)F(6)=「ア」、F(11)=「イウ」である。
    (2)10の5乗以下の自然数Nについて、F(N)を求めるため、次のような「プログラム」を作った。
    ただし、INT(X)はXを超えない最大の整数を表す関数である。
    「プログラム」
    100 INPUT N
    110 LET I=N
    120 LET C=0
    130 IF I=1 THEN GOTO 「エ」
    140 IF INT(I/2)*2=I THEN
    150 「オ」
    160 GOTO 190
    170 END IF
    180 LET I=3*I+1
    190 「カ」
    200 「キ」
    210 PRINT "F(";N;")=";C
    220 END
223デフォルトの名無しさん:2011/02/09(水) 08:52:40
    「エ」に当てはまるものを、次の0〜5のうちから一つ選べ。
    0. 130 1. 140 2. 150 3. 190 4. 200 5. 210
    「オ」、「カ」、「キ」に当てはまるものを、次の0〜8のうちから一つ選べ。
    0. LET C=1 1. GOTO 130 2. GOTO 140
    3. GOTO 210 4. LET C=C+1 5. LET I=I+1
    6. LET I=I/2 7. NEXT N 8. LET I=2*I+1
    「プログラム」を実行して、Nに24を入力すると、180行は「ク」回実行される。
    (3)Mを10の5乗以下の自然数とする。(2)で作成した「プログラム」を変更して、
    M以下の自然数Nのうち、F(N)<=10となるすべてのNについて、F(N)の値を
    出力するプログラムを作成する。そのために、まず、「プログラム」の100行を
    次の二つの行で置き換える。
    100 INPUT M
    101 FOR N=1 TO M
    さらに、210行を次の二つの行で置き換える。
    210 IF 「ケ」 THEN PRINT "F(";N;")=";C
    211 「コ」
    「ケ」に当てはまるものを、次の0〜5のうちから一つ選べ。
    0. INT(I/2)=I 1. C>10 2. M>=C
    3. N=I 4. C<=10 5. I=N
    「コ」に当てはまるものを、次の0〜5のうちから一つ選べ。
    0. LET M=M+1 1. GOTO 120 2. NEXT M
    3. NEXT N 4. LET C=C+1 5. NEXT I
    変更後のプログラムを実行して、Mに10を入力すると、210行のPRINT文は
    「サ」回実行される。

pythonで解いてみてくだされ
224デフォルトの名無しさん:2011/02/10(木) 20:13:39
確認するがプログラムの作成の部分だよな?
225デフォルトの名無しさん:2011/02/10(木) 21:58:26
pythonでプログラムを作成してください
ただしループが何回回るかも知りたいです
226デフォルトの名無しさん:2011/02/13(日) 15:50:27
>>222のプログラムは
n = int(raw_input())
i = n
c = 0
while i != 1:
 c += 1
 i = 3*i+1 if i%2 else i/2
print 'F(', n, ') =', c

>>223のループ追加するとかそういうのは面倒だから自分でやれ
227デフォルトの名無しさん:2011/02/14(月) 05:56:14
ありがとうございました
228デフォルトの名無しさん:2011/02/14(月) 06:46:36
◆QZaw55cn4c
229デフォルトの名無しさん:2011/02/17(木) 02:08:54
project euler problem02
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202

フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。

(´・ω・`)再帰で書いたら深度が深すぎて怒られました。だれか教えてください。
230デフォルトの名無しさん:2011/02/17(木) 02:20:00
>>229
x, y = 1, 2
sum_ = 0
while x < 400 * 1000:
    if x % 2 == 0: sum += x
    x, y = y, x+y
print sum_


def fib(stop):
    x, y = 1, 2
    while x <= stop:
        yield x
        x, y = y, x+y

print sum(x for x in fib(400 * 1000) if x % 2 == 0)

231デフォルトの名無しさん:2011/02/17(木) 03:05:51
>>230
答えは257114ですか?
入力したら間違ってるて言われた・・・
232デフォルトの名無しさん:2011/02/17(木) 03:14:27
>>231
400 * 10000
233デフォルトの名無しさん:2011/02/17(木) 03:17:19
あ、ほんとだ0一個足りないですね。
気付かなかった
234デフォルトの名無しさん:2011/02/18(金) 14:42:07
>>189 の 3.
>>200
エディタを作ったのでどうぞ
ttp://www5.puny.jp/uploader/download/1298007172.zip
235デフォルトの名無しさん:2011/02/18(金) 14:43:53
↑パス書き忘れた orz
turtle
です
236デフォルトの名無しさん:2011/02/19(土) 23:21:19.92
適当なサイトからリンク先へとどんどんクロールしたいんですがurllibとre.compile()でURL見つけて再帰処理って感じで良いでしょうか?
237デフォルトの名無しさん:2011/02/20(日) 07:21:55.93
>>236
真面目に「リンク」を辿りたいならhtmlparserを使うべきだろ。
素のテキストやコメントに書かれたURLを追っかけていっちゃってもいいというやっつけ仕様なら正規表現もアリだが。
238デフォルトの名無しさん:2011/02/20(日) 19:51:45.98
ttp://hogehoge とかにも対応したいんで正規表現で逝きます
239デフォルトの名無しさん:2011/02/21(月) 18:15:28.88
>>237
ありがとうございました。
htmlparser使うようにします。
240デフォルトの名無しさん:2011/02/21(月) 19:08:05.82
壊れたHTML文書に出会いませんように
241デフォルトの名無しさん:2011/02/22(火) 02:13:32.37
>>240
会社にそういったプログラムを仕事で書いてる人がいるけど
真面目に頑張るとかなり苦労するよーw
242デフォルトの名無しさん:2011/02/22(火) 21:29:41.55
>>241
htmlparserってきっちり書かれたHTML以外は容赦なくはねるよね。Webクローラに使うにはちょいと実用性がアレなので、
正規表現を駆使してアバウトなHTMLでも読めるHTMLパーサを書いたことがあったが、実にしんどかった。
243デフォルトの名無しさん:2011/02/22(火) 21:39:40.08
つlxml.html
244デフォルトの名無しさん:2011/02/24(木) 16:49:31.84
Beautiful Soupってどうなの?
245デフォルトの名無しさん:2011/02/26(土) 22:27:24.99
なかなかいいよ
246デフォルトの名無しさん:2011/03/01(火) 01:26:57.10
【 課題 】
以下のページにあるPythonのコードを実行してウインドウを表示させよ。
http://www.not-enough.org/abe/manual/program-aa08/pyopengl1.html

【 Ver  】Python2.7.1 OS・・・windows7-64bit、開発環境Eclipse,PyDev
【 補足 】
↓Eclipse上で実行してみると、以下のようなエラーが出たため

Traceback (most recent call last):
File "C:\Users\username\workspace\PyOpenGL\src\PyOpenGL1.py", line 3, in <module>
from OpenGL.GL import *
ImportError: No module named OpenGL.GL


↓PyOpenGLというのをDLしてみました。
http://pyopengl.sourceforge.net/
モジュール?DLしたからには、Pythonのフォルダ内かどこかに
入れないといけないのでは無いかと思うのですが
モジュールを格納してる場所がどこにあるのか分かりません。
おしえてください><
247デフォルトの名無しさん:2011/03/01(火) 01:40:52.05
【 課題 】
ある 3桁の数とそれぞれの桁を逆に並べた 3桁の数を足し合わせ
それが回文数になるまで同じ操作を繰り返したとき
最も回文数になりにくい 3桁の数を見つけてください

【 Ver  】Python2.x

【 補足 】

回文数とは 44 や 363 のように逆に並べると元の数と同じ数になるものです
なお 2桁の場合は 89, 98 が最大で 24回だそうです
248デフォルトの名無しさん:2011/03/01(火) 17:39:09.29
>>247
しょーがねぇ、俺がとっておきを披露してやろう。
#! /usr/bin/python
open("hello.c", "w").write('''
#include <stdio.h>
int main(void)
{
printf("hello, world.\n");
return 0;
}
''')
os.system('gcc -o hello hello.c')
os.system('./hello')
raise SystemExit
249デフォルトの名無しさん:2011/03/01(火) 23:39:48.44
ひどすぎる
250デフォルトの名無しさん:2011/03/02(水) 00:30:45.95
>>247
def reversed_num(n):
    x = 0
    while n > 0:
        n, m = divmod(n, 10)
        x = x * 10 + m
    return x

def solve(n):
    i = 0
    nn = n
    rn = reversed_num(nn)
    while True:
        if nn == rn: break
        i += 1
        nn  = nn + rn
        rn = reversed_num(nn)
    print n, i, nn

for n in range(100, 1000):
    solve(n)

馬鹿正直なコードを書いてみたけど、下から試すと196、上から試すと986で
かなり時間がかかって、ちょっと待っても戻ってこない
もっと賢いことをやらないと駄目そう
251デフォルトの名無しさん:2011/03/02(水) 01:13:16.28
>>250
def reversed_num(n):
    return int(str(n)[::-1])
にしたら少しは速くなるかもしれないけど、もっと根本的な枝刈りが必要だね。
252デフォルトの名無しさん:2011/03/02(水) 02:04:24.48
初心者なのですが勉強で>>247をやってみようと思って、
以下のコードを書いたのですが、タプルを返してるつもりが、
19をはじめ、ところどころNoneで返ってきてしまいます。
returnするまではtupleなのですが、returnするとNoneになるようです。
すみませんが、なぜか教えていただけますでしょうか。

def f(x, count):
    y = int(str(x)[::-1])
    z = x + y
    if z == int(str(z)[::-1]) :
        return (z, count)
    else :
        f(z, count + 1)

if __name__ == '__main__' :
    
    for i in range(10, 99) :
        print type(f(i, 1))
253デフォルトの名無しさん:2011/03/02(水) 02:08:52.72
>>252
else: の後をよく見てみよう。
254デフォルトの名無しさん:2011/03/02(水) 02:12:23.22
return がなかったです…。ありがとうございます。これで寝られます。
255デフォルトの名無しさん:2011/03/04(金) 18:30:06.95
ベストアンサーまだですか?
256デフォルトの名無しさん:2011/03/05(土) 21:50:19.02
回文数を先に抜き出して、そこから足し合わせじゃなく引き合わせにすれば速くなるか…な
257デフォルトの名無しさん:2011/03/06(日) 18:48:07.22
>>247
「1の位が0」「1と10の位が0」の数についてはどう扱うべきなのかな?
たとえば100をひっくり返すと001だけど。
258デフォルトの名無しさん:2011/03/06(日) 19:04:24.47
>>257
001は3桁の数ではなく1桁の数とする。
が普通だろう。
259デフォルトの名無しさん:2011/03/06(日) 20:04:42.97
>>258
であれば、ひっくり返した数が100未満ならその時点で除外できなくね?
260デフォルトの名無しさん:2011/03/06(日) 20:38:31.99
>>259
そう思う。
261デフォルトの名無しさん:2011/03/07(月) 08:19:40.19
262デフォルトの名無しさん:2011/03/07(月) 08:22:53.77
>>259
101〜999までの間に
ひっくり返したら
3桁じゃなくなる数って
そんなに多くないぞ
263デフォルトの名無しさん:2011/03/07(月) 14:06:29.17
196
295
394
493
592
689
691
788
790
879
887
978
986

さぁどれだ
264デフォルトの名無しさん:2011/03/07(月) 16:12:10.53
ちょっと何言いいたいのか分からないっすね
265デフォルトの名無しさん:2011/03/08(火) 02:39:40.59
ある程度長いのが絞られてきたみたいですね
266デフォルトの名無しさん:2011/03/08(火) 03:04:11.21
ある3桁の数(単数か複数かは不明)が回文数にならないことを証明することは出来ていないんだろうか?
267デフォルトの名無しさん:2011/03/08(火) 09:16:55.89
回文数にならないものってどうやって見つけんのよ
268デフォルトの名無しさん:2011/04/25(月) 20:07:16.29
1000回まで計算した。計算しきれなかったのは>>263と同じ。
それらがすべて、永遠に回文数にならないので解ではないなら、
23回 187 286 385 583 682 781 880
が解。特徴的。この数字はどれも、1回の操作で968になる。

>>263を、この特徴に合わせて分けると
a) 196 295 394 493 592 691 790
b) 689 788 887 986
c) 879 978
このうち、少なくともbは解じゃない。aを1回操作すると788になるから、aの方がbより1回多い。

……ここまでしか分からんかった。
269268:2011/04/25(月) 20:08:36.16
誤 aを1回操作すると788になるから
正 aを1回操作すると887になるから
270デフォルトの名無しさん:2011/04/26(火) 01:30:26.68
http://en.wikipedia.org/wiki/Lychrel_number
でぐぐったら、結構出てくるなぁ。
271デフォルトの名無しさん:2011/04/27(水) 17:55:15.88
>>267
少なくとも判定は出来ると思う
3桁の数なら
「回文数になる」
「回文数になる前に(おおざっぱに)1000個の数字がすべて出てくる」
「1000個出てこなくてもどこかで同じ数字が出てきて循環する」
のどれかになるんじゃないかな
272デフォルトの名無しさん:2011/04/27(水) 19:16:53.31
>>271
余りをとったり、しないんだよね。
そしたら、足すたびに数字は増えるので循環とか数字全部出るとかはありえないよ。
273デフォルトの名無しさん:2011/04/27(水) 20:12:16.88
>>372
うは
ごめん
素で勘違いしてたわ
274デフォルトの名無しさん:2011/04/28(木) 01:13:33.28
ロングパス入りました。
275デフォルトの名無しさん:2011/04/28(木) 01:21:22.71
>>372
世の中には、勘違いしてても気づかない奴もいるって事よ。
276デフォルトの名無しさん:2011/04/29(金) 20:53:12.21
ゴールドバッハの予想
与えられた値を2つの素数の和で現してください
verは出来れば2.6で
エラトステネスのふるいを用いた素数リストを使って値を出すようにしてください
お願いします
277デフォルトの名無しさん:2011/04/30(土) 00:48:17.11
>>276
n = int(raw_input())
def get_primes(n):
  ary = [0 for i in range(n+1)]
  primes = []
  i = 2
  while i <= n:
    if not ary[i]:
      primes.append(i)
      j = i
      while j <= n:
        ary[j] = 1
        j += i
    i += 1
  return primes
primes = get_primes(n)
for p in primes:
  if n - p in primes:
    print p, n - p
278デフォルトの名無しさん:2011/04/30(土) 06:55:17.50
>>277
ありがとうございます
279デフォルトの名無しさん:2011/06/02(木) 06:22:08.84
日本の大学とかでPythonの宿題がでる(Python使って教えている)ところって多いの?
280デフォルトの名無しさん:2011/06/02(木) 17:55:17.03
The university of second channel
281デフォルトの名無しさん:2011/06/14(火) 19:57:57.72
カーニハンの『プログラミング作法』の3章に出てくる、マルコフ連鎖の
Perl版の奴をPythonに移植したいんのですが、データ構造をどう実装すれば
いいのかよくわかりません。

英文を読み込んで、単語1、単語2という組み合わせを読み込み、その後に
付く単語をsuffixとして記憶する(複数の場合にはチェインする)というもの
です。
読み込み部分のソースはこんな感じです。

>$NONWORD = "\n";
>$w1 = $w2 = $NONWORD; #initial state
>while (<>) { # read each line of input
> foreach (split) {
> push(@{$statetab{$w1}{$w2}}, $_);
> ($w1, $w2) = ($w2, $_); #multiple assignment
> }
>}
push(@{$statetab{$w1}{$w2}}, $NONWORD); # add tail

たとえばRubyに移植するとこんな感じになると思います。
>statetab = Hash.new{|h,k| h[k] = Hash.new{|h2,k2| h2[k2]= []}}
中略
> statetab[w1][w2].push(word)
Pythonでもこういうハッシュ+リストみたいなのを実現するにはどうやれば
いいでしょうか?
282デフォルトの名無しさん:2011/06/14(火) 20:37:04.18
>>281
In [1]: from collections import defaultdict
In [2]: d = defaultdict(lambda: defaultdict(list))
In [3]: d['w']['x'].append('z')
In [4]: d
Out[4]: defaultdict(<function <lambda> at 0x12c7488>, {'w': defaultdict(<type 'list'>, {'x': ['z']})})

statetab[(w1, w2)] みたいに、1階層で単語のタプルをキーにすることもできるね。
283デフォルトの名無しさん:2011/06/14(火) 21:16:40.59
>>282
サンクス。
そっかタプルってキーにできるんですね。それがわかり易そうだなあ。
lambdaはよくわからないので・・・。
284デフォルトの名無しさん:2011/08/01(月) 21:52:27.42
テキストファイル、複数キー、ソートで検索したところ、下記のソースを見つけました。
しかし、lines.sort(cmp=lambda 〜 の 行の意味が解かりません。
lambda式がcmpに代入されている意味。
後半に出てくるcmpと先頭のcmpは、同じcmp関数?
コラム指定された部分がx,yに代入されて比較されている、と思うのですが、
これをsortに渡すとファイル全体がソートされる動作が想像できません。
解説をお願いいたします。

# filesort.py
# coding:shift_jis
# ファイルのSORT
import string
import time
from datetime import datetime
startTime = time.clock()
print datetime.today().strftime("%Y年%m月%d日 %H時%M時%S秒 処理開始")
fr = open("C:/in.txt", "r") # 入力ファイル
fw = open("C:/out.txt", "w") # 出力ファイル
lines = fr.readlines()
cnt = len(lines)
# SORT ソート位置を変更するときは下記行を修正。
# ソートキーは複数指定していて、11カラムから5桁と1カラムから9桁です。
lines.sort(cmp=lambda x,y: cmp(str(x)[10:15]+str(x)[0:9], str(y)[10:15]+str(y)[0:9]))
fw.writelines(lines)
fr.close()
fw.close()
# 終了メッセージ
print datetime.today().strftime("%Y年%m月%d日 %H時%M時%S秒 処理終了")
print cnt, '件を', time.clock() - startTime, '秒で処理しました。'
print '何かキーを押せば終了します。'
raw_input()
285デフォルトの名無しさん:2011/08/01(月) 22:01:30.90
>しかし、lines.sort(cmp=lambda 〜 の 行の意味が解かりません。

名前付き引数
286デフォルトの名無しさん:2011/08/03(水) 18:11:59.06
285です。
先のcmpはsort()の名前付き引数、後のcmpはcmp関数、という事は解かりました。
ですが、やはり、ファイル全体がソートされる動作が想像できません。
287デフォルトの名無しさん:2011/08/03(水) 18:13:27.10
286 です。 >285です。 は、284の間違いでした。
288デフォルトの名無しさん:2011/08/03(水) 19:31:32.77
了解
289デフォルトの名無しさん:2011/08/03(水) 21:03:18.52
>>286
sort()の中でリストの要素同士の大小比較をするときに、cmp引数で指定された比較関数を呼び出して
比較しているから、cmp引数でソートの挙動をカスタマイズできるんだよ。
文字列全体じゃなくて一部分だけを比較のキーにする、みたいに。
ちなみにcmp引数に何も指定しないと、要素そのものをキーとして組み込み関数のcmp関数を呼ぶ。
290289:2011/08/03(水) 21:07:06.99
補足しておくと、昔はともかく今のPythonでこんなげろんちょな比較関数を書く必要は無い。
sort()にkey引数ってのが導入されて、リストの要素からソートキーを得る関数を指定できる。
もちろん、指摘しなければリストの要素がそのままソートキーになるんだけど。

つまり>>286と全く同じことを
lines.sort(key = lambda x: x[10:15] + x[0:9])
と書ける。
291286:2011/08/04(木) 17:36:23.52
>>289
>>290
ありがとうございます。
>lines.sort(key = lambda x: x[10:15] + x[0:9])
こちらはソートのキー指定をしている事が、直感的に納得できました。こちらを使います。
292デフォルトの名無しさん:2011/10/04(火) 08:58:36.28
 ̄( ̄( ̄(A ∩ B) ∩ A) ∩  ̄( ̄(A ∩ B) ∩ B))
293デフォルトの名無しさん:2011/11/03(木) 17:32:29.90
宿題誰か作って下さい><お願いします!

C:\Users\workspace\pythonというディレクトリの中に
下の画像のように、pythonファイルとテキストファイルが存在するとします。
@http://up3.viploader.net/ippan/src/vlippan243126.jpg(Python実行前)
【それぞれのテキストファイルの中には、変数にpathを代入するような記述が書いてあります
必ずしも、1行目と2行目にpath1,path2の変数があるとは限りません。】
Ahttp://viploader.net/ippan/src/vlippan243130.jpg(Python実行後)
pythonファイルを実行すると、
pythonがあるディレクトリと同ディレクトリの全てのテキスト形式ファイル(test1.test2,test3,test4)内にある
path1、path2に格納されている文字列を画像Aのように置き換えたいです。
294デフォルトの名無しさん:2011/11/03(木) 19:13:43.01
for i in range(1, 5):
    with open('test{}.txt'.format(i), 'r+') as fp:
        d = fp.read().replace(r'C:\aaa\aaa\aaa\aaa', r'C:\Users\workspace\python').replace(r'C:\iii\iii\iii\iii', r'C:\Users\workspace')
        fp.seek(0, 0)
        fp.truncate()
        fp.write(d)
295デフォルトの名無しさん:2011/11/04(金) 10:29:57.94
↑汎用性のないしょぼいプログラム書いてんじゃねえよ死ね!
296デフォルトの名無しさん:2011/11/04(金) 10:58:40.79
宿題の題意には特記事項としての汎用性は求められていませんでしたが
297デフォルトの名無しさん:2011/11/04(金) 12:17:32.01
汎用性のあるコードを>>295が書けば解決
298デフォルトの名無しさん:2011/11/04(金) 12:48:15.42
情報が足りな過ぎる
何がしたいのか判らん
299デフォルトの名無しさん:2011/11/17(木) 23:36:18.41
1から10までの整数の順列をすべて表示するプログラムをお願いします。
300299:2011/11/17(木) 23:40:57.76
299です。[1,2,3,4,5..,10]みたいな感じのリストになるようにお願いします。
301デフォルトの名無しさん:2011/11/17(木) 23:44:37.82
print [1,2,3,4,5,6,7,8,9,10]
302デフォルトの名無しさん:2011/11/17(木) 23:59:11.85
何も考えずにlist(itertools.permutations(range(1, 11)))とかしたら危うく
303デフォルトの名無しさん:2011/11/18(金) 00:09:05.17
10!
304299:2011/11/18(金) 00:14:14.86
a = [[0]]
r = 1
while r < 11:
cl = []
for x in range(len(a)):
for y in range(len(a[0])):
a[x][y] = a[x][y] + 1

for x in range(len(a)):
for y in range(len(a[0])+1):
cl.append(a[x][0:y] + [0] + a[x][y:len(a)])

初めて書いたコードが動いただけで満足してたんですが2行で済んでしまうとは驚きです。また勉強します。ありがとうございます
305デフォルトの名無しさん:2011/11/18(金) 06:42:14.78
馬鹿には無理
306デフォルトの名無しさん:2011/11/18(金) 23:51:58.32
馬鹿には向いてないぞ
307デフォルトの名無しさん:2011/11/19(土) 10:46:00.70
http://scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?
・1から2000までの数字が昇順に格納された
要素2000個の配列を用意
・乱数にて1から2000までのキー値を生成し、
上記配列を二分探索で探索してキー値を見つけるまでの
探索回数を記録
・以上を1000回繰り返し、平均探索回数を算出
・上記の平均探索回数を、理論値log2・2000と比較して示せ

という宿題を出されたのですが、まるでわかりません。
よろしくお願いします。
二分探索なんかしなくても
すぐ見つかるんじゃね?
>>308
サクっと書けるから回答はすぐもらえるだろうけど、
Python関係なく用語自体わかってないなら
学校はじまる前に調べるなり・聞いたりしないとヤバイよ。
311308:2012/04/08(日) 01:03:06.69
自力で(というか、入門書とWEBを漁りまくって)
12時間かけて何とかできました。疲れた…
要素数と試行回数を指定できるように作ったので
よければ遊んでみてください。

http://codepad.org/RaKvygkr
312営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 11:12:00.89
いやです
313デフォルトの名無しさん:2012/04/15(日) 23:15:02.68
>>311
The resource could not be found.
314308:2012/04/16(月) 00:23:02.09
あやー
見てくれる人いたんですか。
あれからちょこちょこいじっているので
URL変わっちゃってます。

http://codepad.org/oX8W6350

しかし、こうして探索している様子がわかると面白いですね。
こんな半分ずつ探索範囲を狭めていくやり方で
漏れなく見つかるんだって感動する。
315デフォルトの名無しさん:2012/05/22(火) 17:40:11.37
import sys
import random
import string
import ctypes

if __name__ == '__main__':
  class CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure):
    _fields_ = [
      ('w', ctypes.c_short), ('h', ctypes.c_short),
      ('x', ctypes.c_short), ('y', ctypes.c_short),
      ('a', ctypes.c_int),
      ('l', ctypes.c_short), ('t', ctypes.c_short),
      ('r', ctypes.c_short), ('b', ctypes.c_short),
      ('maxw', ctypes.c_short), ('maxh', ctypes.c_short)]
  h = ctypes.windll.kernel32.GetStdHandle(-11)
  b = CONSOLE_SCREEN_BUFFER_INFO()
  ctypes.windll.kernel32.GetConsoleScreenBufferInfo(h, ctypes.byref(b))
  ctypes.windll.kernel32.SetConsoleTextAttribute(h, 10)
  chrs = string.ascii_letters + string.digits + string.punctuation
  chrs += ' ' * len(chrs)
  sz = len(chrs)
  try:
    while True: sys.stdout.write(chrs[random.randint(0, sz - 1)])
  finally:
    ctypes.windll.kernel32.SetConsoleTextAttribute(h, b.a)
316デフォルトの名無しさん:2012/05/22(火) 22:56:27.95
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
317デフォルトの名無しさん:2012/05/22(火) 23:07:06.98
if __name__いらねえだろ
318uy:2012/05/23(水) 12:04:58.26
range(1, 5)

これがPythonはダメだよな
319デフォルトの名無しさん:2012/05/23(水) 14:05:49.87
xrangeの話?区間の話?
320デフォルトの名無しさん:2012/05/25(金) 03:15:13.85
>>317
学校で先生が付けろって言ってたので
321デフォルトの名無しさん:2012/05/25(金) 13:10:11.20
if __main__ にロジックを大量に書くとデバッグしにくくなるからやめなさい。
代わりに何か適当な関数を作って、ロジックはその中に置く。
if __main__ にはその関数への呼び出しを書いておけばいい。
http://www.artima.com/weblogs/viewpost.jsp?thread=4829
322デフォルトの名無しさん:2012/05/25(金) 13:21:42.92
import sys
import random
import string
import ctypes

class CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure):
  _fields_ = [
    ('w', ctypes.c_short), ('h', ctypes.c_short),
    ('x', ctypes.c_short), ('y', ctypes.c_short),
    ('a', ctypes.c_int),
    ('l', ctypes.c_short), ('t', ctypes.c_short),
    ('r', ctypes.c_short), ('b', ctypes.c_short),
    ('maxw', ctypes.c_short), ('maxh', ctypes.c_short)]

def main():
  h = ctypes.windll.kernel32.GetStdHandle(-11)
  b = CONSOLE_SCREEN_BUFFER_INFO()
  ctypes.windll.kernel32.GetConsoleScreenBufferInfo(h, ctypes.byref(b))
  ctypes.windll.kernel32.SetConsoleTextAttribute(h, 10)
  chrs = string.ascii_letters + string.digits + string.punctuation
  chrs += ' ' * len(chrs)
  sz = len(chrs)
  try:
    while True: sys.stdout.write(chrs[random.randint(0, sz - 1)])
  finally:
    ctypes.windll.kernel32.SetConsoleTextAttribute(h, b.a)

if __name__ == '__main__':
  main()
323デフォルトの名無しさん:2012/05/25(金) 16:07:49.09
324デフォルトの名無しさん:2012/07/07(土) 00:34:01.11
[1] 授業単元:QRコード変換
[2] 問題文:
打ち込んだテキストデータをQRコードの画像に変換するプログラムを作成せよ.
(QRコードの規格は公開されているので,それを組み合わせて作ればよい.
エラー訂正レベルを下げ,文字数を固定するなどして簡単なものから順に実装していけば良い.)

[3] 環境
[3.1] OS: Windows 7
[3.2] 言語とバージョン: Python 2.5 以上
[4] 期限: 7/7
宜しくお願いします。
325デフォルトの名無しさん:2012/07/07(土) 05:03:57.89
326デフォルトの名無しさん:2012/07/07(土) 05:39:08.99
できました。
ありがとうございました。
327デフォルトの名無しさん:2012/09/17(月) 23:35:22.14
perlでの
use strict;
機能をpythonでも実装せよ

どうやるの?
328デフォルトの名無しさん:2012/09/18(火) 00:12:51.82
329デフォルトの名無しさん:2012/09/18(火) 00:16:02.53
330デフォルトの名無しさん:2012/09/18(火) 00:51:59.75
自分の経験では

color = green
if status != good:
    colour = red
display(status, color)

みたいなのを書いて、えらい目にあったことがある。
動的すぎるのも考えものだわ。

strict とブロックスコープ、あと無名関数は Perl のほうがいいね。
331デフォルトの名無しさん:2012/09/18(火) 06:18:48.45
ダックタイピングが良いんじゃん
332デフォルトの名無しさん:2012/10/02(火) 14:11:25.19
以下の宿題が出ました。
いわゆる石取りゲームhttp://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A0
と同じ種類の問題だということはわかるのですが、このゲームの法則と
それをPythonで表現する方法がまるでわかりません。
どなたか、ご回答をいただければありがたいです。

[1] 授業単元:プログラミング入門
[2] 問題文:
2人のプレイヤーが以下のルールでゲームをする。
このゲームは、二人零和有限確定完全情報ゲームである。
任意の数字Nに対し、先手と後手のどちらが勝つかを判定するプログラムを
再帰を使用して作成せよ。

1 初期値Xが与えられる。
2 先手と後手は、交互にAかBのどちらかの方法を選び、Xを減少させていく。
 A.Xから1を引く
 B.Xを2で割る
3 自分のターンで自分が減少させた結果、Xnが1を下回ってしまったプレイヤーがゲームに負ける。
[3] 環境
 [3.1] バージョン: Python3
 [3.2] 言語: Python
[4] 期限:10月3日AM6:00
[5] その他の制限:特になし
333デフォルトの名無しさん:2012/10/02(火) 14:39:49.45
>>332
山の個数が分かった時点で必勝か、必敗かがわかる?
と考えていいのかな。
334デフォルトの名無しさん:2012/10/02(火) 14:59:24.96
Xが奇数のときBは禁止?
335332:2012/10/02(火) 15:07:27.09
>>333
山(N)が与えられた時点で、先手が勝ちか後手が勝ちかは決まるとのことです。

>>334
すみません。条件を書き忘れました。
この問題は数の範囲に小数点以下も含んでおります。

336デフォルトの名無しさん:2012/10/02(火) 15:16:38.32
>任意の数字Nに対し

任意の数字Xに対し

の間違いじゃない?
337332:2012/10/02(火) 15:23:36.20
補足をさせてください。

例えば、N=5のとき、ありうる選択肢として以下の5パターンがありますが、
先手は<>の選択をすると負けてしまいますので、必ずイかウの勝利のパターンとなるように行動します。
したがって、N=5のときは先手が勝ちが決まっているということになります。

ア 先手Aで4、後手Aで3、先手<Aで2>、後手AでもBでも1、先手AでもBでも0.5<1 先手の負け
イ 先手Aで4、後手Aで3、先手Bで1.5、後手AでもBでも(0.5,0.75)<1 後手の負け
ウ 先手Aで4、後手Bで2、先手AでもBでも1、後手AでもBでも0.5<1 後手の負け
エ 先手<Bで2.5>、後手Aで1.5、先手はAでもBでも(0.5,0.75)<1 先手の負け
オ 先手<Bで2.5>、後手Bで1.25、先手はAでもBでも(0.25,0.6125)<1 先手の負け

>>336
Xの間違いです。すみません。。
338デフォルトの名無しさん:2012/10/02(火) 15:34:22.19
Xの間違いと言いつつN=5とか
ふざけてんの?
339332:2012/10/02(火) 15:56:04.78
>>338
X=5でした。
テンパっておりまして…すみません。
340デフォルトの名無しさん:2012/10/05(金) 02:03:33.61
332の問題、期限切れみたいだけど添削お願いしたい

http://ideone.com/sWfE6

(1) 値を減少させる関数と勝敗判定の関数を書き出した
(2) >>337 のパターン ア-オを assert 文で列挙
(3) 判定関数を再帰で実装

341デフォルトの名無しさん:2012/10/16(火) 16:42:28.21
pass
342デフォルトの名無しさん:2012/11/15(木) 08:40:52.12
【 課題 】
再帰分割法を利用した迷路作成のプログラムを作ってください。
【 用語 】
再帰分割法
http://en.wikipedia.org/wiki/Maze_generation_algorithm#Recursive_division_method
【 期限 】
2012/11/16まで
【 Ver  】
OS:Windows8
Python2.x
【 補足 】
壁を#、道をスペースで表示してください。

よろしくお願いします。
343デフォルトの名無しさん:2012/11/15(木) 12:35:31.30
Win 8 じゃないと駄目?
344デフォルトの名無しさん:2012/11/15(木) 23:48:12.06
そもそも「再帰分割法を利用した迷路作成」は
解く側から見て
「最初に経路の目星を付け易い」
という欠点があるよ
345デフォルトの名無しさん:2013/02/19(火) 13:07:06.40
test
346デフォルトの名無しさん:2013/02/21(木) 12:56:28.81
py.test
347デフォルトの名無しさん:2013/02/24(日) 13:22:23.83
整数(1〜10程度でよい)を入力させ、魔方陣(縦横斜め全方向の和が等しい)の数列を表示せよ。
例にあるハイフンは調整のためであり、表示は無用とする。

入力例 1:
1
出力例 1:
---5---7---3
---1---6---8
---9---2---4

入力例 2:
2
出力例 2:
--13--20--22---4---6
---7--14--16--23---5
---1---8--15--17--24
--25---2---9--11--18
--19--21---3--10--12

よろしくお願いします。
348デフォルトの名無しさん:2013/02/24(日) 14:42:04.44
>347
入力が1のときには出力は3x3で
2のときには5x5だとすると
入力がnのときには出力は(2n+1)x(2n+1)でいいのかい?
349デフォルトの名無しさん:2013/02/24(日) 14:49:52.49
出力例の1が変
350デフォルトの名無しさん:2013/02/24(日) 14:51:19.70
>>347
結果が複数ある場合は全部表示するの?
それとも適当に見つかったものだけ表示すればいい?
351デフォルトの名無しさん:2013/02/24(日) 14:55:30.77
>>347
「斜め」は対角線だけを意味するの?
352デフォルトの名無しさん:2013/02/24(日) 16:19:09.96
>>348
それで良いです。
余力があれば偶数のもおながいします。

>>349
すみません。間違いです。
でも答えが判ってると面白く無いので。

>>350
出来れば全部でおながいします。

>>351
とりあえずそれで良いです。
余力があれば対角線以外の斜め合計?も一致するパターンのもおながいします。
353デフォルトの名無しさん:2013/02/24(日) 16:27:23.83
仕様が変更・追加されている…
354デフォルトの名無しさん:2013/02/24(日) 21:40:08.92
Python2でもPython3でも書いてあげたよ
ttp://ideone.com/1waFEP
ttp://ideone.com/VKfYb8
355デフォルトの名無しさん:2013/03/09(土) 00:03:45.54
宿題スレは終了

終了終了終了終了終了終了終了終了終了終了終了終了
終了終了終了終了終了終了終了終了終了終了終了終了
終了終了終了終了終了終了終了終了終了終了終了終了
終了終了終了終了終了終了終了終了終了終了終了終了
356デフォルトの名無しさん:2013/03/09(土) 00:18:14.38
1 宿題の丸投げという行為はカンニングと同等。学則による処分の対象
2 丸投げした質問者もそれを知って回答した回答者も大学の単位認定業務の
 妨害、すなわち偽計業務妨害
3 宿題の問題は著作物であり、それをアップローダやスレに投稿する事は
 公衆送信権の侵害。うpを唆しているテンプレは著作権侵害の教唆

違法行為が前提で成り立つスレなので、次スレは立てずにこのスレで終了
357デフォルトの名無しさん:2013/03/09(土) 04:41:27.43
チッウッセーナ反省してまーす
358デフォルトの名無しさん:2013/03/09(土) 06:43:42.42
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
359デフォルトの名無しさん:2013/03/10(日) 09:50:00.63
360デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
任天堂のサイトの問題ですが
http://cp1.nintendo.co.jp/2012

$ python SimpleBarsTest.py
test_loop (__main__.testSimpleBars) ... ok
test_simple_rule (__main__.testSimpleBars) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

テストコードまでOKなんですが、
answerを出したのですが違っているようなんです。
この問題を解いた方がいましたら少し教えてもらえませんでしょうか。
361デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
>>360ですが
解決しました。
362デフォルトの名無しさん:2013/08/13(火) NY:AN:NY.AN
今までC言語しかやったことなくて、Pythonは初めてです。よろしくお願いします。

【 課題 】
g(x_1,x_2,...,x_n)=f_a(X_a)f_b(X_b)...f_k(X_k)
と書けるとする.ただし,X={x_1,x_2,...,x_n},X_aやX_bはXの部分集合である.

確率伝播法(Sum-Product Algorithm)によって,周辺化関数の計算量が減少していることを示すプログラムをかけ.
ただし,計算量は(足し算を行う回数)と(掛け算を行う回数)の和とする.
また,関数g,f_a,f_b,...,f_kはプログラムの中で定義すること.
例:g=x(y+z),f_a=x,f_b=y+z などとプログラムに書き,その時の周辺化関数の計算量について調べる

ヒント:このプログラムにおいて,
入力:関数gやf_a
出力:確率伝播法を使う前の計算量&使ったあとの計算量
だが、計算量をはかる代わりに、確率伝播法を使ったあとの方が
「計算にかかった時間」が短ければそれで計算量が減少したことを示せる.

【 用語 】
簡単な定義と例はこちらで.簡単に作成しました.
https://docs.google.com/file/d/0BwsJZI6jzfNzMnV3dUVvazBGODA/

【 期限 】期限:8/18
【 Ver  】Python2.3 か Python3.3 OS:Windows7
【 補足 】初心者なんでお願いします.Pyscripterというのを使っています.
363デフォルトの名無しさん:2013/08/13(火) NY:AN:NY.AN
>362
専門的なのでよく分からない。
Cで書いてくれたらPythonに焼き直すことができるかもしれない。
364デフォルトの名無しさん:2013/08/15(木) NY:AN:NY.AN
>>362
ここが参考になるかも?
http://zavieru.blog77.fc2.com/blog-entry-299.html
365デフォルトの名無しさん:2013/08/27(火) NY:AN:NY.AN
ちょっとどうすればいいかわからない課題出た助けて
【 課題 】
n個の変数列[x_1,x_2,...,x_n]を考える.
x_1が取り得る値を適当に決める.x_1からx_nまですべての変数について行う.
この時,iを与えた時の次のIの値を求めなさい:
I=這這...杷(x_1,x_2,...x_n),ただし狽フ数はn-1個.x_iについてのみ和を
取らない.

例:
f(x_1,x_2,x_3)=x_1 + x_2 ^ 2 + x_3 ^3
x_1 = [ 0,1,2 ]
x_2 = [ 3,8 ]
x_3 = [-5,10]
i = 1 を与えたとき,
I=(x_2)について(x_3)について f(x_1,x_2,x_3)
= f(x_1,3,-5)+f(x_1,3,10)+f(x_1,8,-5)+f(x_1,8,10)
= x_1 + 3^2 + (-5)^3
+x_1 + 3^2 + (10)^3
+x_1 + 8^2 + (-5)^3
+x_1 + 8^2 + (10)^3
=x_1 + 9 - 125 + x_1 + 9 + 1000 + x_1 + 64 - 125 + x_1 + 64 + 1000
= 3* x_1 + 1896
よって、 I = 3* x_1 + 1896 を出力させるようなプログラムを作って欲しい.

【 期限 】提出期限:9/1 00:00
【 Ver  】Python:2.7 OS:Windows 7
【 補足 】よろしくお願いします
366デフォルトの名無しさん:2013/08/28(水) NY:AN:NY.AN
すまん>>365だが,
I=4*x_1 +1896だったわ
367デフォルトの名無しさん:2013/10/16(水) 13:10:13.21
【 課題 】 高さh、質量m、初速度vを入力して、物体の軌跡を計算し、グラフを描画(SVGファイルを出力)する。
例:
高さ30mの位置から質量1.0kgの球を鉛直下向きに4.9m/sで投げ上げた。

高さ=30
質量=1000
初速度=-4.9
グラフをSVGファイルに出力

【 Ver  】 Python:2 / ReportLab
【 期限 】 10月21日まで
【 補足 】 誰かお願いします。
368デフォルトの名無しさん:2013/10/16(水) 13:12:26.60
鉛直下向きに投げ上げた
鉛直下向きに投げ上げた
鉛直下向きに投げ上げた
鉛直下向きに投げ上げた
鉛直下向きに投げ上げた
369デフォルトの名無しさん:2013/10/16(水) 13:52:23.37
投げ上げたw

これ質量って関係ないよね?
370デフォルトの名無しさん:2013/10/16(水) 15:42:25.58
放物線にすらならんな

縦に一本線引けば正解じゃね?
371デフォルトの名無しさん:2013/10/16(水) 16:37:35.19
いーからはよ答えろやカス共
372デフォルトの名無しさん:2013/10/16(水) 17:16:35.02
やってみた

from reportlab.graphics import renderSVG
from reportlab.graphics.shapes import Drawing, Polygon
from reportlab.lib import colors

drawing = Drawing(640, 480)
drawing.add(Polygon((320, 240, 320, 480), strokeColor=colors.red))
renderSVG.drawToFile(drawing, 'out.svg')
373デフォルトの名無しさん:2014/03/24(月) 19:03:44.52 ID:7DgDM3gu
Cでモジュール造るやり方教えて?
374デフォルトの名無しさん:2014/11/06(木) 21:17:28.74 ID:iaZsweTc
パイソンの宿題なんて出ないだろ
375デフォルトの名無しさん:2014/11/06(木) 21:29:40.06 ID:miTuc3N+
コードが汚い言語だなあ。

ruby以上かも
376デフォルトの名無しさん:2014/11/10(月) 23:46:46.08 ID:fV9V9ggj
>>375
同じコードをrubyで書いたら比べ物にならない醜さなのでは?
377デフォルトの名無しさん:2014/11/13(木) 15:48:06.31 ID:7ew1nEoT
そりゃ書き手が悪いんだ
378デフォルトの名無しさん
python初めて数日だけど、チョット気に入った。
perlみたいに取って付けたオブジェクト指向じゃなて、初めからしっかりサポートしてる感じでいいね。
idleもいいよ、タブでメソッドがずらーーってでるからね。VBライクだね。