X



Python の宿題ここで答えます Part 2
0001デフォルトの名無しさん2009/11/16(月) 06:27:36
【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/
0262デフォルトの名無しさん2011/03/07(月) 08:22:53.77
>>259
101〜999までの間に
ひっくり返したら
3桁じゃなくなる数って
そんなに多くないぞ
0266デフォルトの名無しさん2011/03/08(火) 03:04:11.21
ある3桁の数(単数か複数かは不明)が回文数にならないことを証明することは出来ていないんだろうか?
0268デフォルトの名無しさん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回多い。

……ここまでしか分からんかった。
02692682011/04/25(月) 20:08:36.16
誤 aを1回操作すると788になるから
正 aを1回操作すると887になるから
0271デフォルトの名無しさん2011/04/27(水) 17:55:15.88
>>267
少なくとも判定は出来ると思う
3桁の数なら
「回文数になる」
「回文数になる前に(おおざっぱに)1000個の数字がすべて出てくる」
「1000個出てこなくてもどこかで同じ数字が出てきて循環する」
のどれかになるんじゃないかな
0272デフォルトの名無しさん2011/04/27(水) 19:16:53.31
>>271
余りをとったり、しないんだよね。
そしたら、足すたびに数字は増えるので循環とか数字全部出るとかはありえないよ。
0276デフォルトの名無しさん2011/04/29(金) 20:53:12.21
ゴールドバッハの予想
与えられた値を2つの素数の和で現してください
verは出来れば2.6で
エラトステネスのふるいを用いた素数リストを使って値を出すようにしてください
お願いします
0277デフォルトの名無しさん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
0279デフォルトの名無しさん2011/06/02(木) 06:22:08.84
日本の大学とかでPythonの宿題がでる(Python使って教えている)ところって多いの?
0281デフォルトの名無しさん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でもこういうハッシュ+リストみたいなのを実現するにはどうやれば
いいでしょうか?
0282デフォルトの名無しさん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階層で単語のタプルをキーにすることもできるね。
0283デフォルトの名無しさん2011/06/14(火) 21:16:40.59
>>282
サンクス。
そっかタプルってキーにできるんですね。それがわかり易そうだなあ。
lambdaはよくわからないので・・・。
0284デフォルトの名無しさん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()
0285デフォルトの名無しさん2011/08/01(月) 22:01:30.90
>しかし、lines.sort(cmp=lambda 〜 の 行の意味が解かりません。

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

つまり>>286と全く同じことを
lines.sort(key = lambda x: x[10:15] + x[0:9])
と書ける。
02912862011/08/04(木) 17:36:23.52
>>289
>>290
ありがとうございます。
>lines.sort(key = lambda x: x[10:15] + x[0:9])
こちらはソートのキー指定をしている事が、直感的に納得できました。こちらを使います。
0292デフォルトの名無しさん2011/10/04(火) 08:58:36.28
 ̄( ̄( ̄(A ∩ B) ∩ A) ∩  ̄( ̄(A ∩ B) ∩ B))
0293デフォルトの名無しさん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のように置き換えたいです。
0294デフォルトの名無しさん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)
03002992011/11/17(木) 23:40:57.76
299です。[1,2,3,4,5..,10]みたいな感じのリストになるようにお願いします。
03042992011/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行で済んでしまうとは驚きです。また勉強します。ありがとうございます
0308営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 10:43:20.79
・1から2000までの数字が昇順に格納された
要素2000個の配列を用意
・乱数にて1から2000までのキー値を生成し、
上記配列を二分探索で探索してキー値を見つけるまでの
探索回数を記録
・以上を1000回繰り返し、平均探索回数を算出
・上記の平均探索回数を、理論値log2・2000と比較して示せ

という宿題を出されたのですが、まるでわかりません。
よろしくお願いします。
03113082012/04/08(日) 01:03:06.69
自力で(というか、入門書とWEBを漁りまくって)
12時間かけて何とかできました。疲れた…
要素数と試行回数を指定できるように作ったので
よければ遊んでみてください。

http://codepad.org/RaKvygkr
0312営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 11:12:00.89
いやです
03143082012/04/16(月) 00:23:02.09
あやー
見てくれる人いたんですか。
あれからちょこちょこいじっているので
URL変わっちゃってます。

http://codepad.org/oX8W6350

しかし、こうして探索している様子がわかると面白いですね。
こんな半分ずつ探索範囲を狭めていくやり方で
漏れなく見つかるんだって感動する。
0315デフォルトの名無しさん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)
0316デフォルトの名無しさん2012/05/22(火) 22:56:27.95
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
0318uy2012/05/23(水) 12:04:58.26
range(1, 5)

これがPythonはダメだよな
0322デフォルトの名無しさん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()
0324デフォルトの名無しさん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
宜しくお願いします。
0330デフォルトの名無しさん2012/09/18(火) 00:51:59.75
自分の経験では

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

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

strict とブロックスコープ、あと無名関数は Perl のほうがいいね。
0332デフォルトの名無しさん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] その他の制限:特になし
03353322012/10/02(火) 15:07:27.09
>>333
山(N)が与えられた時点で、先手が勝ちか後手が勝ちかは決まるとのことです。

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

03373322012/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の間違いです。すみません。。
03393322012/10/02(火) 15:56:04.78
>>338
X=5でした。
テンパっておりまして…すみません。
0340デフォルトの名無しさん2012/10/05(金) 02:03:33.61
332の問題、期限切れみたいだけど添削お願いしたい

http://ideone.com/sWfE6

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

0342デフォルトの名無しさん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
【 補足 】
壁を#、道をスペースで表示してください。

よろしくお願いします。
0344デフォルトの名無しさん2012/11/15(木) 23:48:12.06
そもそも「再帰分割法を利用した迷路作成」は
解く側から見て
「最初に経路の目星を付け易い」
という欠点があるよ
0345デフォルトの名無しさん2013/02/19(火) 13:07:06.40
test
0347デフォルトの名無しさん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

よろしくお願いします。
0348デフォルトの名無しさん2013/02/24(日) 14:42:04.44
>347
入力が1のときには出力は3x3で
2のときには5x5だとすると
入力がnのときには出力は(2n+1)x(2n+1)でいいのかい?
0350デフォルトの名無しさん2013/02/24(日) 14:51:19.70
>>347
結果が複数ある場合は全部表示するの?
それとも適当に見つかったものだけ表示すればいい?
0352デフォルトの名無しさん2013/02/24(日) 16:19:09.96
>>348
それで良いです。
余力があれば偶数のもおながいします。

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

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

>>351
とりあえずそれで良いです。
余力があれば対角線以外の斜め合計?も一致するパターンのもおながいします。
0355デフォルトの名無しさん2013/03/09(土) 00:03:45.54
宿題スレは終了

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

違法行為が前提で成り立つスレなので、次スレは立てずにこのスレで終了
0358デフォルトの名無しさん2013/03/09(土) 06:43:42.42
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
レスを投稿する


ニューススポーツなんでも実況