【 課題 】100マス計算をするプログラムを書いてください。 【 用語 】下記 【 期限 】1/7くらいまで 【 Ver 】2.5以上(3でも可) 【 補足 】 プログラムがランダムに出題し、人間が100個の マスに回答を入力し、確認ボタンを押すと 全問正解なら回答にかかった時間を表示して終了。 間違った場合は間違った場所にカーソルが止まり、 別の値が入力されるまで待ちます。 横10個、縦10個の数字は各々11〜99までの乱数、 演算は +,-,x のみでよいです。 よろしくおねがいします。
713 :
デフォルトの名無しさん :2009/01/04(日) 22:56:08
age
# -*- coding: utf-8 -*- import tkinter as Tk from tkinter.simpledialog import SimpleDialog import random class Application: FONT = ("MSゴシック", 20) OPS = [("+", lambda x, y: x + y), ("−", lambda x, y: x - y), ("×", lambda x, y: x * y)] def __init__(self): self.root = Tk.Tk() self.root.title("100マス計算") self.root.option_add("*font", self.FONT) frame = Tk.Frame(self.root) frame.pack(side=Tk.TOP) self.op_button = Tk.Button(frame, command=self.change_op) self.op_button.grid(row=0, column=0) self.entries = {} self.tate_labels = [] self.yoko_labels = [] for i in range(10): label = Tk.Label(frame, text="0") label.grid(row=i+1, column=0) self.tate_labels.append(label) label = Tk.Label(frame, text="0") label.grid(row=0, column=i+1) self.yoko_labels.append(label)
for j in range(10): entry = Tk.Entry(frame, width=4) entry.grid(row=i+1, column=j+1) self.entries[(i, j)] = entry button = Tk.Button(self.root, text="出題", command=self.new) button.pack(side=Tk.LEFT) button = Tk.Button(self.root, text="終了", command=self.root.quit) button.pack(side=Tk.RIGHT) button = Tk.Button(self.root, text="確認", command=self.check) button.pack(side=Tk.BOTTOM) self.easy = True self.debug = False self.op = 0 self.new() self.root.mainloop() def change_op(self): self.op = (self.op + 1) % 3 self.new() def new(self): label, func = self.OPS[self.op] self.op_button.config(text=label) if self.easy: self.tate = list(range(1, 11)); random.shuffle(self.tate) self.yoko = list(range(1, 11)); random.shuffle(self.yoko) else: self.tate = [random.randint(11, 99) for i in range(10)] self.yoko = [random.randint(11, 99) for i in range(10)] for i, num in enumerate(self.tate): self.tate_labels[i].config(text=str(num)) for i, num in enumerate(self.yoko): self.yoko_labels[i].config(text=str(num))
for i in range(10): for j in range(10): entry = self.entries[(i, j)] entry.config(bg="white") entry.delete(0, Tk.END) if self.debug: for i in range(10): for j in range(10): answer = func(self.tate[i], self.yoko[j]) entry = self.entries[(i, j)] entry.insert(0, str(answer)) def check(self): label, func = self.OPS[self.op] count = 0 for i in range(10): for j in range(10): entry = self.entries[(i, j)] if entry.get() == str(func(self.tate[i], self.yoko[j])): entry.config(bg="white") else: entry.config(bg="red") count += 1 if count == 0: msg = "全問正解\(^o^)/\nよくできました" else: msg = "赤色の{0}マスが間違っています".format(count) d = SimpleDialog(self.root, text=msg, buttons=["OK"]) d.go() Application()
禿げしくありがとうございます!!
Python 3.0 で書いてみたお。2.x とほとんど変わらない希ガス。 self.easy を偽にすると11〜99の数字で出題されるようになるお。 self.debug を真にすると自動的に正答が記入されるお。 Windows 以外の環境では FONT の値を適当にいじる必要があると思われ。 回答時はタブキーを利用して次のマスに移動すると良さげ。 足し算をすこしやってみたけどイライラして神経衰弱になりそうだったお orz
2桁の掛け算はつらいですね
死ぬな これ・・・
こんなのの動作確認したくない
学校の宿題で必須なんです、お願いしますm(_ _)m
もれ2桁の掛け算の仕方忘れてるw
Rubyスレからきますた。即レスで回答してて吹いたww これは負けられんwww
煽らなくていいから
はあ?wwwみなぎってきたwww
KO , OK、○十く,
728 :
デフォルトの名無しさん :2009/01/07(水) 21:51:12
足し算をすこしやってみたけどイライラして神経衰弱になりそうだったお orz
だおだおうっせーお
彼氏が3.0なのにprint "hoge"してた。 別れたい。
童貞でネカマって死んだ方がいいよな。
いいや、 殺伐とした世の中で 「ときめき」みたいなものを感じてくれるから 生きていて欲しい。
天国のお花畑で生きてくれ。
おい、上の方にあるプログラミング自慢みたいなコードは みんなのpythonに大体載っていますか?
あれを読んだだけでTkが使えるようにはならないから安心しやがれ
必要になったら書けばいいか 別にWEBアプリとかいらないし
お花畑からご苦労様です。
みんなのpythonは入門書だろ
732も童貞ネカマの仲間だな 一緒にいってこいや(w
努力が必要
そこでIronPythonですよ
恥ぱい3は新刊なのにこんなに売れなくて大丈夫なのか? 作者首くくるようだな。
ランキング何位とかどうやって調べてんだ?
ランキングだけを見ると、みんPyはクソ本ということでFA ?
749 :
デフォルトの名無しさん :2009/01/26(月) 19:20:32
7749
>>748 みんPy以外がクソに見える。
恥ぱい3とかJythonとか売れてなさ過ぎ。
質問させてください。 Linux上で(pythonのバージョンは2.3) mkdir()の引数を変数でパスを指定した正常にディレクトリが 作られるんですが、 windows上で(バージョンは2.6) 同じようにすると、パス中の\が\\に変換されてしまってるようで うまくいきません。 ちなみにprintで変数を出力するとちゃんとそのままのパスが出てきます。 windows上ではどうすればいいんですか?
日本語で桶
r"dirname\filename" "dirname\\filename" "dirname/filename"
756 :
753 :2009/01/27(火) 20:52:48
ごめんなさい。わかりにくくて。
import sys
import os
f = open(sys.argv[1],"r")
for li in f.readlines():
li.rstrip("\n")
abc=os.path.dirname(sys.argv[1])
os.mkdir(os.path.join(abc,li))
txtファイルに作りたいフォルダ名がいくつかかかれていて、
それを同じフォルダ内に作りたいんです。
>>755 そのパス自体をsys.argvから受け取ってる場合はrはどう付ければいいんですか?
757 :
756 :2009/01/27(火) 21:33:26
os.mkdir(r""+os.path.join(abc,li)) としてみました。が変わりませんでした…。
758 :
756 :2009/01/27(火) 21:44:13
ごめんなさい。自己解決しました。\nの処理が不完全だったのが原因でした。 エラー表示を見たら\が\\となってたのでてっきりそれが原因かと…。 お騒がせしました。
never mind
760 :
デフォルトの名無しさん :2009/01/28(水) 02:23:52
def Okeru(Baseban,i): Ura=[ [(1,2,3,4,5),(6,12,18,24,30),(7,14,21,28,35)],[(2,3,4,5),(7,13,19,25,31),(8,15,22,29)], [(3,4,5,),(1,0),(8,14,20,26,32),(9,16,23),(7,12)],[(4,5),(2,1,0),(8,14,20,26,32),(7,12),(9,16,23)], [(3,2,1,0),(10,16,22,28,34),(9,14,19,24)],[(4,3,2,1,0),(11,17,23,29,35),(10,15,20,25,30)], [(7,8,9,10,11),(12,18,24,30),(13,20,29,34)],[(8,9,10,11),(13,19,25,31),(14,21,28,35)], [(9,10,11),(7,6),(14,20,26,32),(13,18),(15,22,29)],[(10,11),(8,7,6),(15,21,29,35),(14,19,24),(16,23)], [(9,8,7,6),(16,22,28,34),(15,20,25,30)],[(10,9,8,7,6),(17,23,29,35),(16,21,26,31)], [(13,14,15,16,17),(6,0),(18,24,30),(7,2),(19,26,33)],[(14,15,16,17),(7,1),(19,25,31),(8,3),(20,29,34),()],[],[], [(15,14,13,12),(10,4),(16,22,28,34),(9,2),(21,26,31)],[(16,15,14,13,12),(11,5),(23,29,35),(10,3),(22,27,32)], [(19,20,21,22,23),(12,6,0),(18,24,30),(13,8,3),(25,32)],[(20,21,22,23),(13,7,1),(25,31),(14,9,4),(26,33)],[],[], [(21,20,19,18),(16,10,4),(28,34),(15,8,1),(27,31)],[(22,21,20,19,18),(17,11,5),(29,35),(16,9,2),(28,33)], [(25,26,27,28,29),(19,13,7,1),(18,12,6,0)],[(26,27,28,29),(19,13,7,1),(20,15,10,5)], [(27,28,29),(25,24),(20,14,8,2),(19,12),(21,16,11)],[(26,25,24),(28,29),(21,15,9,3),(20,13,6),(22,17)], [(27,26,25,24),(22,16,10,4),(21,14,7,0)],[(28,27,26,25,24),(23,17,11,5),(22,15,8,1)], [(31,32,33,34,35),(24,18,12,6,0),(25,20,15,10,5)],[(32,33,34,35),(25,19,13,7,1),(26,21,16,11)], [(31,30),(33,34,35),(26,20,14,8,2),(25,18),(27,22,17)],[(32,31,30),(34,35),(27,21,15,9,3),(28,23),(26,19,12)], [(33,32,31,30),(28,22,16,10,4),(27,20,13,7,0)],[(34,33,32,31,30),(29,23,17,11,5),(28,21,14,7,0)]]
761 :
デフォルトの名無しさん :2009/01/28(水) 02:25:10
Banlist=[] for cnt in range(36): if Baseban[cnt]==0: matome=[] for zyun in Ura[cnt]: itizi=[] for x in zyun: if Baseban[x]==0: break elif Baseban[x]==i: matome+=itizi break else: itizi+=[x] if matome!=[]: Copyban=Baseban[:] for x in matome: Copyban[x]=i Copyban[cnt]=i Banlist+=[Copyban] return Banlist def Ura(ban): copyban=[] for cnt in ban: copyban+=[-cnt] return copyban
すみません張るの失敗しました。
763 :
デフォルトの名無しさん :2009/01/28(水) 02:32:59
事故解決しました お騒がせしました
自己解決してませんが。 お願いします。答えをください。
自己解決禁止
自己解決しても張ったほうがいいですか? とても見栄えのいいものじゃないんで恥ずかしいんですが・・・
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | | ,,ノ(、_, )ヽ、,, | | ,;‐=‐ヽ .:::::| \ `ニニ´ .:::/ /`ー‐--‐‐―´´\ .n:n nn nf||| | | |^!n f|.| | ∩ ∩|..| |.| |: :: ! } {! ::: :| ヽ ,イ ヽ :イ
自己解決厨はまだ粘着してたのか。
>>763 ちらっと走らせてみたけど、幅優先でやってるんじゃ?
10手目(?)ですら264994個も状態がある。
天文学的な容量のHDDでも持ってるんなら別だけど、
pickleとかじゃ解決しないような気がする。
773 :
デフォルトの名無しさん :2009/01/30(金) 12:34:40
>書籍のページにランキングがあるんだよ そのランキングを(Amazonの中のひとが)どうやって出してるかって話では?
注文履歴見りゃ判るだろうに
わろす
>>745 どの部門に入っているかで順位入れ替わる可能性あるのか
部門新設するようなネタなら1位狙える訳だ
778 :
デフォルトの名無しさん :2009/01/30(金) 14:07:52
総合ランキングで比べないと意味がないよね。
>>773 ではぶっちぎり再会の
>
http://www.amazon.co.jp/dp/4777513688/ 恥ぱいネットワーク
>400,898位
が
>>745 では比較的検討しているように見える
これはネットワーク系書籍が少ないことに由来するためであろうか
同部門の他の書籍(というか部門のかたまりのようなもの)が総合ランクで
どの辺の位置にいるのかも考慮する必要があるね
あるいは同部門の他の書籍との格差?(もしそれが定義出来るなら)も必要
A部門の5位はB部門の10位より下とかね
同じ条件で比較しないと意味無いだろ。 当たり前のことほざくな。
恥ぱい3は3万に下がっているのに、みんぱいは4千のままだ。 どうなってるの? 売れるとランキングが上がって、売れないと下がる仕組みなのかな?
>>773 サンクス。書籍のページにあるのか。
スクレイピングして言語別のama書籍ランキングとか作れそうだね。面白そうだ
誰かやランかな
なるほど ありがとうございました
[1] 授業単元:Python [2] 問題文(含コード&リンク): 1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる 並べ方が全部で何通りあるかとその並びをすべて列挙する [3] 環境:特になし [4] 期限: 明日まで [5] その他の制限: 例 534681297 685293714 948367125 153472869 426538971 261759483 817945632 379126548 792814356
[1] 授業単元:Python [2] 問題文(含コード&リンク): 下の例参照 与えられた数字のみからなる文字列から各桁の数字に分割し、 隣り合う数字の合計の下一桁の値を並べたものを次の文字列とし、 結果が一桁になるまで繰り返しそれぞれの過程の文字列を出力する。 [3] 環境:特になし [4] 期限: 明日まで [5] その他の制限: 例 525123214112431 77635535523674 4398088075931 727886872424 99564459666 8410894522 251873974 76950261 3545287 899705 78675 5432 95 4
[1] 授業単元:Python
[2] 問題文(含コード&リンク): 課題2
>>789 の出力において(上から1段目だけは入力なので)
上から2段目から最後の段までに現れる0から9数字の
総出現数と各数字毎の出現比率を出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
129個
0: 10回 3%
1: 43回 20%
2: 8回 2%
...
9: 18回 6%
のように出力してください。
おながいします
[1] 授業単元:Python
[2] 問題文(含コード&リンク): 課題3
>>790 のスクリプト名を p2.py とする
その入出力について入力はスクリプトへの標準入力として例えば
echo 525123214112431 | p2.py
という形で受け取れるようにし、
10, 0.03, 43, 0.20, 8, 0.02, ... 18, 0.06, 129
の様に0から9までの出現数、出現比率(末尾に総数)をカンマ区切りで
出力するように変更し、
さらに新たなスクリプト p3.py から別プロセスとして p2.py を起動し、
標準出力を介して 111111111 から 999999999 までの連続する数字を与え、
それぞれの結果を出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
[1] 授業単元:Python
[2] 問題文(含コード&リンク): 課題4
>>791 の出力について
111111111 から 999999999 までの連続する数字を与える代わりに
N 桁の全ての数字を与え、N を 2 〜 9 まで変化させたときに
各 N における全ての出現数、出現比率を0から9までの数字毎に合計し、出力する。
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
N = 2 のとき 10 〜 99 について
10 -> 1 が 1回
11 -> 2 が 1回
12 -> 3 が 1回
...
99 -> 18, 9 -> 1 が 1回, 8 が 1回, 9 が 1回
の回数の合計として
0から9までの出現数、出現比率(末尾に総数)をカンマ区切りで出力する。
よろしくおねがいします。
またそういうことを
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点 (x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。 ・公式:底辺x高さ÷2を使って計算してください。 お願いします!!
マルチ乙
頂点を自由に決められるようにするのは何気に難しいような・・・。 ヘロンの公式を使うか、y2 == y3 のような制約があれば簡単なんだけど。 初歩的なことを見落として面倒なことをしている希ガス。ツッコミ歓迎。 # -*- coding: utf-8 -*- import math x1, y1 = 2.0, 4.0 x2, y2 = 4.0, 0.0 x3, y3 = 0.0, 2.0 # P1 (x1, y1) と P2 (x2, y2) を通る直線 y = ax + b の係数 a, b を求める a = (y2 - y1) / (x2 - x1) b = y1 - a * x1 # 直線 y = y3 と直線 y = ax + b の交点 P4 (x, y3) を求める x = (y3 - b) / a # P3 (x3, y3) と P4 (x, y3) が成す線分の長さを求める bottom = math.fabs(x - x3) # P1, P3, P4 が成す三角形の面積を求める height1 = math.fabs(y1 - y3) area1 = bottom * height1 / 2.0 # P2, P3, P4 が成す三角形の面積を求める height2 = math.fabs(y2 - y3) area2 = bottom * height2 / 2.0 # 二つの三角形の面積を加減して P1, P2, P3 が成す三角形の面積を求める if y1 < y3 < y2 or y1 > y3 > y2: print(area1 + area2) else: print(math.fabs(area1 - area2))
>>797 点(x0,y0)と直線(ax+by+c=0)との距離dは
d=abs(a*x0+b*y0+c)/sqrt(a**2+b**2)
>>798-799 ありがとう。
# -*- coding: utf-8 -*-
import math
x1, y1 = 2.0, 4.0
x2, y2 = 4.0, 0.0
x3, y3 = 0.0, 2.0
# P1 (x1, y1) と P2 (x2, y2) の距離を求める
bottom = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
# P1 と P2 を通る直線 ax + by + c = 0 の係数 a, b, c を求める
a = y1 - y2
b = x2 - x1
c = x1 * y2 - x2 * y1
# P3 (x3, y3) から直線 ax + by + c = 0 に下ろした垂線の長さを求める
height = math.fabs(a * x3 + b * y3 + c) / math.sqrt(a ** 2 + b ** 2)
# P1, P2, P3 の成す三角形の面積を求める
print(bottom * height / 2.0)
これって
bottom = math.sqrt(a ** 2 + b ** 2)
height = math.fabs(a * x3 + b * y3 + c) / bottom
だから
print(math.fabs(a * x3 + b * y3 + c) / 2.0)
となって結局
# -*- coding: utf-8 -*-
import math
x1, y1 = 2.0, 4.0
x2, y2 = 4.0, 0.0
x3, y3 = 0.0, 2.0
# P1 (x1, y1), P2 (x2, y2), P3 (x3, y3) の成す三角形の面積を求める
print(math.fabs((y1 - y2) * x3 + (x2 - x1) * y3 + (x1 * y2 - x2 * y1)) / 2.0)
と単純化できるのかな。うーん、
>>797 とは比較にならないシンプルさ。
ヘロンよりもシンプルかもね
つ外積 ((x2-x1)(y3-y1)-(x3-x1)(y2-y1))/2
すげーなおまいら
ちょw
スレ違い
807 :
デフォルトの名無しさん :2009/04/26(日) 10:44:07
最近 何かの本で見た問題なんだけど、 1辺の長さが1の正三角形の各頂点から有理数の距離にある三角形内部の点を少なくとも3つ求めよ。 おまいら わかりますか?
ええと。 1/3回転の点対称で、不動点(中央)ではないことは明らかだから、 1つ見つければあと2つは自動的に見つかる。 で、その問題の一つは...3平方の定理を連立させて平方根が消える解を求めるのかな?
プログラムのスレ的回答は、 点をランダムに選んで距離をチェック のループでなんとかなるだろう。
810 :
デフォルトの名無しさん :2009/04/27(月) 01:21:56
>>808 平面座標は(x,y)で表すから2点からの距離を有理数とする2つの方程式で求まるはず。
3点からの距離を有理数とするためには、2元連立方程式の中から条件に合うのを
探す必要があるんとちゃうかな?
>>809 距離を有理数にするには座標は無理数になる・・・・かもな。
そうするとランダムに座標を決めて条件に合うのを探すのはむりちゃうかな?
プログラム的にピタゴラスで距離計算して (√hoge)の結果が有理数か無理数か区別付くのか?
点の座標にルート3とか入ってると難しいな。 まず、 「座標がすべて整数となる正三角形の頂点を求めよ(大きさは問わない)」 って方が取り組みやすいのかな。
この問題って辺の上だけじゃなく内側にも点が見つかるはずなんですかね? 力技で解いてみたけど辺の上にある点しか見つからない。 A=3/8, B=5/8, C=7/8 A=5/21, B=16/21, C=19/21 A=7/15, B=8/15, C=13/15 A=7/40, B=33/40, C=37/40 A=11/35, B=24/35, C=31/35 A=13/48, B=35/48, C=43/48 :
814 :
813 :2009/04/27(月) 19:23:17
import math def gcd(a, b): if a < 0: a = -a if b < 0: b = -b while b > 0: a, b = b, a % b return a class Rational: def __init__(self, numerator, denominator): self.n = numerator; self.d = denominator def __repr__(self): return "{0}({1}, {2})".format(self.__class__.__name__, self.n, self.d) def add(self, r): n = self.n * r.d + r.n * self.d; d = self.d * r.d; x = gcd(n, d) return Rational(n // x, d // x) def sub(self, r): n = self.n * r.d - r.n * self.d; d = self.d * r.d; x = gcd(n, d) return Rational(n // x, d // x) def mul(self, r): n = self.n * r.n; d = self.d * r.d; x = gcd(n, d) return Rational(n // x, d // x) def div(self, r): n = self.n * r.d; d = self.d * r.n; x = gcd(n, d) return Rational(n // x, d // x) def equal(self, r): return self.n == r.n and self.d == r.d def real(self): return float(self.n) / float(self.d)
815 :
813 :2009/04/27(月) 19:30:38
def rational_range(N): for d in range(2, N): yield Rational(1, d) for n in range(2, N): for d in range(n+1, N): if gcd(n, d) == 1: yield Rational(n, d) def main(): ONE = Rational(1, 1); TWO = Rational(2, 1) cos_30 = math.cos(math.pi * 30 / 180) n = 50 for A in rational_range(n): for B in rational_range(n): if A.real() > B.real() or A.add(B).real() < 1.0: continue D = ONE.add(A.mul(A)).sub(B.mul(B)).div(TWO) # D=(1+A^2-B^2)/2 if D.real() < cos_30 * A.real(): continue
816 :
813 :2009/04/27(月) 19:32:38
X = A.mul(A).sub(D.mul(D)) # X=A^2-D^2 if X.real() == 0.0: T = D.sub(Rational(1, 2)) Y = T.mul(T).add(Rational(3, 4)) # Y=(D-1/2)^2+3/4 for C in rational_range(n): if C.mul(C).equal(Y): print(A, B, C) else: T = D.sub(Rational(1, 2)) Y = T.mul(T).add(Rational(3, 4)).add(X) # Y=(D-1/2)^2+3/4+X for C in rational_range(n): T = C.mul(C).sub(Y) if T.mul(T).div(X).equal(Rational(3, 1)):#(C-Y)^2/X==3 print(A, B, C) main()
817 :
813 :2009/04/27(月) 20:30:04
説明図
http://www1.axfc.net/uploader/He/so/221324.png 1. 有理数 A, B を生成 (A < 1, A + B < 1)
2. D = |A^2 - B^2 + 1| / 2 を計算 (D < A cos(30))
3. X = A^2 - D^2 を計算
4. 有理数 C を生成。
5. C == sqrt((D-1/2)^2+3/4) (X == 0 のとき) または
C == sqrt((D-1/2)^2+(sqrt(3/4)-X)^2) (それ以外) ならば
A, B, C を解として出力。
rational_range() で有限の有理数の集合を作って、
1. と 4. でループを回して A, B, C の組み合わせを作っています。
有理数がからむ計算はすべて有理数のまま計算しています
(5. の条件式は平方根が要らない形に直して計算)。
また初歩的なことを見落としている希ガス。ツッコミ歓迎。
あ、2. の不等号が逆でした。連投スマソ
820 :
デフォルトの名無しさん :2009/04/27(月) 21:25:53
A(0,0) B(1,0) C(1/2,sqrt(3)/2) を正三角形の頂点,各頂点への距離をa,b,cとすると P1(997/2709,sqrt(3)*64/903) a:1051/2709 b:1744/2709 c:2045/2709 P2(457/1029,sqrt(3)*44/343) a:73/147 b:88/147 c:95/147 P3(723/1568,sqrt(3)*195/1568) a:57/112 b:65/112 c:73/112 のとりあえず3点が求まりました。
821 :
デフォルトの名無しさん :2009/04/28(火) 08:09:11
各距離を a = j/m b = k/m c = l/m Pの座標を(x,y)を x = q/m y = sqrt(3)*r/m とするとj,k,l,m,q,rをすべて自然数とすることができました。 後はルートの中が平方数となるようなm,q,rの組を探すだけ 対称な点を省くためと探索範囲を狭くするために x > 0 y > 0 x < 1/2 y < x/sqrt(3) の範囲を探しました。 mを10から3000まで1づつ増やしてq,rを探したけど結構時間がかかります。
822 :
デフォルトの名無しさん :2009/04/28(火) 21:38:39
とりあえずlispのプログラムを晒します。 pythonは文法を覚えてる最中でまだプログラムは無理 誰かpythonへ変換してもらえるとありがたいです。
823 :
デフォルトの名無しさん :2009/04/28(火) 21:39:40
;triangle (labels ((dv (x y) (/ (round (sqrt x)) y)) (sqrtest (x) (let ((a (round (sqrt x)))) (equal x (* a a)))) (lt (x y) (< (car x) (car y))) (fsj (q r) (+ (* q q) (* 3 r r))) (fsk (q r m) (+ (* q q) (* 3 r r) (* -2 m q) (* m m))) (fsl (q r m) (+ (* q q) (* 3 r r) (* -1 m q) (* -3 m r) (* m m)))) (defun solv3 (start end) (let ((j 0) (k 0) (l 0) (ans nil) (point nil)) (do ((m start (1+ m))) ((> m end) (sort ans #'lt)) (do ((q 1 (1+ q)) (limq (/ m 2))) ((>= q limq)) (do ((r 1 (1+ r)) (limr (/ q 3))) ((>= r limr)) (if (and (sqrtest (setf j (fsj q r))) (sqrtest (setf k (fsk q r m))) (sqrtest (setf l (fsl q r m)))) (progn (setf point (list (/ q m) (/ r m) (dv j m) (dv k m) (dv l m))) (if (not (member point ans :test #'equal)) (progn (push point ans) (apply #'format t "P(~A,~A*sqrt(3)) a:~10A b:~10A c:~10A~%" point)))))))))))
824 :
デフォルトの名無しさん :2009/04/28(火) 21:46:24
(time (solv3 5000 15000))
;
;
>>823 ,
>>824 がlispのプログラムです。
ちんこ
826 :
デフォルトの名無しさん :2009/04/29(水) 05:23:34
パイソンむずかしす
827 :
デフォルトの名無しさん :2009/05/06(水) 00:29:51
&heart;
f
829 :
デフォルトの名無しさん :2009/05/10(日) 14:11:37
830 :
デフォルトの名無しさん :2009/05/11(月) 12:00:01
831 :
デフォルトの名無しさん :2009/05/12(火) 23:02:25
『3』でおkです。 くだらん問題出すな ボケ!
832 :
デフォルトの名無しさん :2009/05/20(水) 23:11:17
ちんこ
833 :
デフォルトの名無しさん :2009/05/28(木) 19:14:46
【 課題 】引数として英数字からなる文字列を1つ与えて呼び出すと,その全体,最後の1文字を削ったもの,最後の2文字を削ったもの,…と1文字になるまで表示する関数を定義せよ.値を返す必要はない. 次に,キーボードから文字列を読み込み,読み込んだ文字列を引数として定義した関数を呼び出すようにせよ。 【 用語 】 【 期限 】5月29 【 Ver 】なし 【 補足 】だれかお願いします。
834 :
デフォルトの名無しさん :2009/05/28(木) 19:18:36
【 課題 】2つの引数xとyを取り,x2+y2の値を計算して返す関数func1を定義せよ.いくつかの引数で呼び出して結果を確認すること. 【 期限 】5月29 連続ですみません。だれかよろしくおねがいします。
>>833 # Python 3.0.1
def foo(s):
for i in range(len(s), 0, -1):
print(s[:i])
s = input("# ")
foo(s)
>>834 # Python 3.0.1
import random
func1 = lambda x, y: (2 * x) + (2 * y)
for i in range(10):
x = random.randint(0, 100)
y = random.randint(0, 100)
s = "{0}*2+{1}*2={2}".format(x, y, func1(x, y))
print(s)
>>833 def hoge(s):
l = len(s)
while(s[:l]):
print s[:l]
l -= 1
hoge(raw_input())
(↑python3.xならhoge(input()) )
>>834 x2, y2ってそれぞれxの2乗, yの2乗という解釈でいいのかなこれ
def func1(x, y):
return x**2 + y**2
838 :
デフォルトの名無しさん :2009/05/28(木) 21:08:40
>835-837 ありがとうございます。明日確認して報告いたします。
授業でPython3使うところは少ない気がするんだが、大丈夫かいな
【 Ver 】なし
>>833 def foo(s):
while(s):
print s
s=s[:-1]
s = input("# ")
foo(s)
842 :
デフォルトの名無しさん :2009/05/30(土) 17:45:18
833 834 です。833はうまくいきましたが834はなんかできませんでした。 [課題1]1から20までのすべての整数で割り切れる最小の数を求めるプログラムを書け. [課題2]キーボードから自然数を入力すると,その約数をすべて表示するプログラムを書け. これもよろしくおねがいします。.
課題1 課題2 答えは一応出ますが入力が大きい時の効率化を考えてません target = input() for i in xrange(1, target+1): if target % i == 0: print i,
課題1書く前に送ってしまった。 def gcd(a, b): while(b): a, b = b, a%b return a result = 1 for i in xrange(2, 21): result = (result * i) / gcd(result, i) print result
>>843 少なくとも割ってあまり0なら商の方も約数だし
確認は √target まででいいはずだし
>>845 指摘ありがとうございます。修正しました
import math
target = input()
result = []
for i in xrange(1, int(math.sqrt(target))+1):
if target % i == 0:
result.extend([i, target/i])
print ', '.join(str(x) for x in sorted(result))
すいません、さらに修正 - result.extend([i, target/i]) + result.append(i) + if target/i != i: + result.append(target/i)
848 :
デフォルトの名無しさん :2009/05/31(日) 03:51:09
結局 if target/i != i: をやることになるなら ループは for i in xrange(1, target+1): でよくて if target/i < i: を終了条件にして中断すれば良いと思う
すげーなおまいら
次の指数関数のテイラー展開を用いて自然対数の底 e を計算せよ。 e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... = 2.7182818284...
import math s = 0.0 for i in xrange(20): s += 1.0 / math.factorial(i) print s
動かないなと思ったらmath.factorialは2.6から追加されたのか
出題者的には階乗もコーディングしてほしいだろうね、きっと。
出題者的には浮動小数点数じゃなくて多倍長演算で有効桁xxx桁まで求めてほしいだろうね、きっと。 問題には書かれてないけど。
そこまでエスパーするの無理><
えー だって float 精度で充分なら math.e に敵うものはないよ
ここはdecimalを使ってですね
fractionsも捨てがたい
862 :
デフォルトの名無しさん :2009/06/08(月) 23:47:00
4. 正三角形と正四角形 Polygonをスーパークラスとして,正三角形(Triangle),正四角形(Square)を表現するクラスをそれぞれ定義せよ. 辺の長さのみを引数に与えてインスタンスを生成する 自身の面積を計算して結果を返すメソッドarea()を持つ √3 = 1.73 としてよい メインルーチンでは,実際にインスタンスを生成し,各インスタンスについて,インスタンス自身,周囲の長さ,面積の3項目を表示するようにせよ お願いします!
class Polygon(object): def __init__(self, size): self.size = size def area(self): raise NotImplementedError("%s.area() is not implemented yet." % self.__class__.__name__) class Triangle(Polygon): def area(self): n = self.size return 1.73 * n * n / 4 class Square(Polygon): def area(self): n = self.size return n * n あとはまかせた
import math class Polygon(object): def __init__(self, angles, length): self.angles = angles self.length = length def area(self): t = 2.0 * math.pi / self.angles return (self.angles * self.length * self.length * math.sin(t)) / (4.0 * (1.0 - cos(t))) class Triangle(Polygon): def __init__(self, length): super(Triangle, self).__init__(3, length) class Square(Polygon): def __init__(self, length): super(Square, self).__init__(4, length) あとはまかせた
まちがえた orz cos(t) を math.cos(t) にしてください
>>862-864 Polygonの引数が辺の長さのみとなると
正多角形とする暗黙の了解でもあるのかな
(Squareは正方形でいいけど
Triangleは正三角形とは限らないのでは)
そうでなければ任意の多角形を考慮するべきで
Polygonの引数は辺の長さのリストの方が望ましい
867 :
デフォルトの名無しさん :2009/06/09(火) 04:54:00
問題 最小の内角が120度の多角形がある。 それに続く内角がその前の角より5度ずつ大きい多角形を作るとき、 その図形は何角形になるか? (答えは2つあります。) お願いします!
スレ違い?
スレ違い
どうせ2つ目は凹型多角形なんだろ
n角形の内角の和は 180(n-2) 初項 120 公差 5 の等差数列の和は a(1) から a(n) まで (120+120+5(n-1))n/2 従って (120+120+5(n-1))n/2 = 180(n-2) を解くと n = 9, n = 16 9角形(凸型) 16角形(凹型)
>>864 (self.angles * self.length * self.length * math.sin(t)) / (4.0 * (1.0 - math.cos(t)))
この式どこから出てきたん?
873 :
デフォルトの名無しさん :2009/06/10(水) 09:53:14
すげーなおまいら
874 :
デフォルトの名無しさん :2009/06/10(水) 21:55:15
>863-864 そのあとが気になる
875 :
デフォルトの名無しさん :2009/06/11(木) 08:47:05
周の長さはnaだからな 簡単すぎてやるきがおきない
>>874 if __name__ == __main__:
print("Triangle %d %d", 3, Triangle(1).area())
print("Square %d %d", 4, Square(1).area())
2つの自然数の最大公約数を求める(ユークリッドの互除法) a,b = input(), input() #再帰関数 def gcd(a, b): if b == 0: return a else: gcd(b, a%b) print d(a,b) 2つの自然数の最小公倍数を求める。 #上のgcdを用いて print a*b/gcd(a,b)
#エラトステネスの篩 #(コードは煩雑そうに見えるが、速度が圧倒的に速い。 # 大きな数までの素数表が必要な場合に必要な方法。) a = range(10000) a[1] = 0 # 1 は素数ではない for p in a: if not p: continue elif p > 100: # 100 = sqrt(10000) break else: for multi in xrange(p+p, 10000, p): a[multi] = 0 # この時点で、aは、素数p番目にはpが、それ以外には0が入ったリストになっている。 a = [x for x in a if x] for x in a: print x
a = [x for x in a if x] これってもっと簡単に書けない?
for x in a: if x: print x あるいは print '\n'.join(str(x) for x in a if x)
ju
a = filter(None, a)
a = filter(bool, a) でもいいか。
>>853 def fact(n):
if n<=1: return 1
else: return n*fact(n-1)
e=0.0
for n in xrange(100):
e+=1.0/fact(n)
e
2.7182818284590455
math.exp(1)
2.7182818284590451
floatの精度(machine epsilon)を確認する (1)yに1を入れ (2)yを2で割って (3)yを表示 (4)1+yを1と比較し (5)区別出来るときは(2)に戻る (6)区別出来なくなったら終了
y=1.0 while(True): y/=2.0 print y if 1.0+y-1.0==0.0: break 結果が違うんですけどなぜでしょうか? y=1.0 while(True): y/=2.0 print y if y==0.0: break
ありがとん
たとえば 3481 という数字(4桁/0含む)が与えられたとき 0 = 3 + 4 - 8 + 1 1 = 3 + 4 - 8 * -1 2 = -(3 + 4 - 8 - 1) 3 = 3 * 4 - 8 - 1 4 = (3 / (4 + 8))^-1 ... のように加減乗除のみで整数を順に造っていってください
4 = 3 * 4 - 8 * 1 でいいじゃない。 ^-1って加減乗除なの?
- ( ) も反則のような稀瓦斯
0 : ((3) + ((4) - ((8) - (1)))) 1 : (((3) + (4)) / ((8) - (1))) 2 : (-(3) - ((4) - ((8) + (1)))) 3 : (((3) * (4)) - ((8) + (1))) 4 : (((3) * (4)) - ((8) * (1))) 5 : (((3) * (4)) - ((8) - (1))) 6 : ((3) - ((4) - ((8) - (1)))) 7 : ((3) - ((4) - ((8) * (1)))) 8 : ((3) - ((4) - ((8) + (1)))) 9 : ((3) * (-(4) + ((8) - (1)))) 10 : (-(3) + ((4) + ((8) + (1)))) 11 : (((3) * (-(4) + (8))) - (1)) 12 : ((3) * (-(4) + ((8) * (1)))) 13 : (((3) * (-(4) + (8))) + (1)) 14 : ((3) + ((4) + ((8) - (1)))) 15 : ((3) + ((4) + ((8) * (1)))) 16 : ((3) + ((4) + ((8) + (1)))) 19 : (((3) * (4)) + ((8) - (1))) 20 : (((3) * (4)) + ((8) * (1))) 21 : (((3) * (4)) + ((8) + (1))) 25 : (-(3) + ((4) * ((8) - (1)))) 28 : (-(3) + (((4) * (8)) - (1))) 29 : (-(3) + ((4) * ((8) * (1)))) 30 : (-(3) + (((4) * (8)) + (1)))
どこがpythonなんだ?
聞くべきなのは個別の答えじゃなくアルゴリズムだろjk
まあ総当たりになる気がするが
ありがとうございました
900 :
デフォルトの名無しさん :2009/07/17(金) 13:34:07
3つの自然数の合計が10になるような組み合わせをすべて列挙するプログラムを書け 1+1+8と1+8+1のように並び順が異なるだけのものは同一と考え、重複して出力しないようにすることが望ましい
>>> print [(x, y, z) for x in range(1, 10) for y in range(x, 10) for z in range(y, 10) if x + y + z == 10] [(1, 1, 8), (1, 2, 7), (1, 3, 6), (1, 4, 5), (2, 2, 6), (2, 3, 5), (2, 4, 4), (3, 3, 4)]
個数Nが与えられたとき N個の自然数の合計が10になるような組み合わせをすべて列挙するプログラムを書け
>>> def f(n, sum=10, i=1): ... if n == 1: ... if i <= sum: return [(sum,)] ... else: return [] ... else: ... return [(x,) + rest for x in range(i, sum) for rest in f(n-1, sum-x, x)] ... >>> f(1) [(10,)] >>> f(2) [(1, 9), (2, 8), (3, 7), (4, 6), (5, 5)] >>> f(3) [(1, 1, 8), (1, 2, 7), (1, 3, 6), (1, 4, 5), (2, 2, 6), (2, 3, 5), (2, 4, 4), (3, 3, 4)] >>> f(4) [(1, 1, 1, 7), (1, 1, 2, 6), (1, 1, 3, 5), (1, 1, 4, 4), (1, 2, 2, 5), (1, 2, 3, 4), (1, 3, 3, 3), (2, 2, 2, 4), (2, 2, 3, 3)]
904 :
デフォルトの名無しさん :2009/07/17(金) 20:57:53
[課題] ・23本のマッチ棒からなる山があり,2人のプレーヤが山から交互にマッチ棒を取り除く ・一度に取ることのできるマッチ棒は1から3本 ・山を空にしたプレーヤが勝ち 人間2人でこのゲームを行なうプログラムを作成せよ. プログラムでは各プレーヤの手がルールに反していないかどうかのチェックと,勝負がついたかどうかのチェックを行なうこと。 また,最初に山にある本数と,各回に取ることができる最大の本数をプログラムの最初に変数にセットしておき,そこを変えるだけで本数の変化に対応できるようなプログラムにすること。 [期限]7月23 [var]わかりません…
906 :
デフォルトの名無しさん :2009/07/20(月) 00:42:33
課題1 成績処理 ファイル data1.txt の中に,次の形式でデータが格納されている. 田中,88 佐藤,65 このとき,ファイルの内容を読み出して,次の2つの処理を行なうプログラムを作成せよ. * 平均点を計算し,表示する * 最高得点と最低得点を得点者の名前とともに表示する ただし,最高得点及び最低得点はそれぞれ1人ずつ(同点はない)と考えて良いものとする. 課題2. ヒストグラム ファイル data2.txt には,1行に1つずつ点数データが書かれている.このファイルから点数データを読み出し,次のようなヒストグラムを出力するプログラムを書け.ただし,点数データは0以上100以下の整数とする. * ヒストグラムは10点未満,10点〜19点,20点〜29点,...,80点〜89点,90点〜100点の10区間に分ける * 人数の数だけ "*" を並べる 課題3 曜日計算 1999年1月1日は金曜日である.この日から2008年12月31日までの10年間に,1日が日曜日になった月が何回あったかを計算するプログラムを作成せよ.
>>906 課題1 成績処理
from __future__ import division
data = [i.rstrip().split(',', 1) for i in open('date1.txt')]
f = lambda x: int(x[1])
s = sum(map(f, data))
print 'average:', s / len(data)
print 'max:', max(data, key=f)
print 'min:', min(data, key=f)
>>906 課題2. ヒストグラム
t = [0] * 11
for i in open('date2.txt'):
t[int(i.rstrip('\n')) / 10] += 1
t[9] += t[10]
del t[10]
for n, i in enumerate(t):
print "%2d: %s" % (n * 10, '*' * i)
>>906 課題3 曜日計算
from datetime import date
print len(list((year, month, 1) for year in range(1999, 2009) for month in range(1, 13) if date(year, month, 1).weekday() == 6))
910 :
デフォルトの名無しさん :2009/07/22(水) 16:45:52
コンピュータと人間か対戦する形で実行する3目並べのプログラムを作成せよ *先攻、後攻はゲーム毎に乱数で決定する *人間が手を打った場合、コマを置ける場所かどうかのチェックを行うこと *勝ち負けの判定を行うこと *コンピュータ側の手はランダムでも良いが、可能な範囲で工夫してみよ
911 :
デフォルトの名無しさん :2009/07/24(金) 06:21:42
整数nについて,各桁の数の階乗の和S(n)を考える.たとえば,n = 145 とすると, S(145) = 1! + 4! + 5! = 1 + 24 + 120 = 145 となる.このように,S(n) = n となるn(n≧10)をすべて求めよ.
無限にある訳じゃないのか
913 :
デフォルトの名無しさん :2009/07/24(金) 09:45:22
nが9999999以上だと n > S(n)となるので有限個ってことになるだろね。
914 :
デフォルトの名無しさん :2009/07/24(金) 10:11:48
やってみたけど145以外は40585しかなかったよ
s(0)=1 s(1)=1 s(2)=2
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
918 :
デフォルトの名無しさん :2009/08/02(日) 16:02:44
所謂覆面算で 英字一文字が一桁の数字(0-9)で表されるとき one + nine + twenty + fifty = eighty となる組み合わせを検索してください 各行の先頭の文字は0以外です
#!/usr/bin/python import itertools for o,n,e,i,t,w,y,f,g,h in itertools.permutations(range(10)): if 0 in (o,n,t,f,e): continue if (100*o + 10*n + e) + (1000*n + 100*i + 10*n + e) + \ (100000*t + 10000*w + 1000*e + 100*n + 10*t + y) + \ (10000*f + 1000*i + 100*f + 10*t + y) == \ (100000*e + 10000*i + 1000*g + 100*h + 10*t + y): print (o,n,e,i,t,w,y,f,g,h)
920 :
デフォルトの名無しさん :2009/08/02(日) 19:32:52
ありがとうございました
def perm(n, m): if m<1: yield() else: for r in perm(n, m-1): for x in xrange(n): if x not in r: yield r + (x,) def num(b, h, p): return reduce(lambda x, y: x * 10 + p[h[y]], b, 0) def check(a, s): c = 0 h = {} for w in a + [s]: if w[0] not in h: h[w[0]] = c c += 1 d = c for w in a + [s]: for b in w[1:]: if b not in h: h[b] = c c += 1 for p in perm(10, c): if 0 in p[:d]: continue if sum([num(w, h, p) for w in a]) == num(s, h, p): print '%s=%d' % ('+'.join(str(num(w, h, p)) for w in a), num(s, h, p)) if __name__ == '__main__': a, s = raw_input('> ').replace(' ', '').split('=') a = a.split('+') check(a, s)
> send + more = money 9567+1085=10652 > one + nine + twenty + fifty = eighty 984+8584+364832+75732=450132
923 :
デフォルトの名無しさん :2009/09/20(日) 01:30:40
.
文字コードがらみのトラブルがいやならpython3かね。 だいぶましになってる。完璧じゃないけど。
いや、3の方が文字コードがらみのトラブル多いでしょ。 ライブラリがUTF-8以外に対応してないなんてザラにある。
それは3だからじゃねーだろ
それも2だからじゃねーだろ
2.4以下は糞
1.5のクソさに比べたら2.xや3.xはヘブン。
今思えばそうだけど、1.5時代はそれはそれで快適に使ってたもんよ(文字コード周りは除く)。
>>707 どうみてもゴスリングだろと思ったらそうだった
932 :
デフォルトの名無しさん :2009/11/07(土) 15:36:23
負でない整数nの階乗(n!)は,次のように定義される. n! = 1 × 2 × 3 × ... × n (n ≧ 1) 0! = 1 引数nを与えるとn!を計算して返す関数fact(n)を定義し,それを用いて0!〜10!を計算して表示するプログラムを作成せよ.
>>> def fact(n): ... return n * fact(n-1) if n else 1 ... >>> [fact(x) for x in range(11)] [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
fact = lambda n: n * fact(n - 1) if n else 1 for i in range(11): print "%d! = %d" % (i, fact(i))
935 :
デフォルトの名無しさん :2009/11/07(土) 15:54:28
引数として英数字からなる文字列を1つ与えて呼び出すと,その全体,最後の1文字を削ったもの,最後の2文字を削ったもの,…と1文字になるまで表示する関数を定義せよ.値を返す必要はない. 次に,キーボードから文字列を読み込み,読み込んだ文字列を引数として定義した関数を呼び出すようにせよ.
def foo(s): if s: print s foo(s[:-1]) foo(raw_input())
B列に1万近くの数値があり、そこから特定の範囲(例えば100〜101など)に適した数値を 指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、 どのようにしたらよいでしょうか? Excel2003です
??
マルチだよそれ
ネットワーク接続でHTTP_CONNECTIONをkeep-aliveしたい urllib2.AbstractHTTPHandler.do_openにある headers["Connection"] = "close" を headers["Connection"] = "keep-alive" にすればできそうなのですが # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. と注意書きがあります。これを無視すると重大な問題が起きるのでしょうか?
941 :
デフォルトの名無しさん :2009/11/12(木) 22:10:04
"/etc/termcap"というファイルを読み込み,#で始まる行の数を数えて行数を表示するプログラムを書け.ファイルの内容を表示する必要はない.
942 :
デフォルトの名無しさん :2009/11/12(木) 22:26:53
2つの引数xとyを取り,x2+y2の値を計算して返す関数func1を定義せよ. いくつかの引数で呼び出して結果を確認すること.
943 :
デフォルトの名無しさん :2009/11/12(木) 22:27:50
1. まず,いろいろな数値(整数)を1行に1つずつ10個(10行)程度並べたファイル(名前をdata-0501.txtとする)を作成せよ. 2. 次に,data-0501.txtを読み込み,読み込んだ内容を表示しながら合計を計算して表示するプログラムを作成せよ.
>>941 import re
print len(re.findall(r'(^#)', open('/etc/termcap').read(), re.M))
>>943 python -c 'for x in range(10): print x' | python -c 'import sys; print reduce(lambda a,b: a+int(b.replace("\n","")), sys.stdin.readlines(), 0)'
replace いらなかったのと 内容表示しながらということだったので修正 python -c 'for x in range(10): print x' | python -c 'import sys; s=[]; print [s.append(n) or (n, sum(s)) for n in map(int, sys.stdin.readlines())]'
>>946-947 ファイルを作成せよって書いてあるのに
パイプで受け渡ししたら題意満たして無いじゃん
python -c 'for x in range(10): print x' > data-0501.txt python -c 'import sys; s=[]; print [s.append(n) or (n, sum(s)) for n in map(int, sys.stdin.readlines())]' < data-0501.txt
>>941 grep -c "^#" /etc/termcap
>>952 それを popen2.popen3() または subprocess で書いたら許してやってもいい
954 :
デフォルトの名無しさん :2009/11/14(土) 14:49:50
1000よりも小さいすべての「3または5の倍数」の合計を計算し,結果を表示するプログラムを作成せよ.
>>> sum(e for e in range(1000) if e % 3 == 0 or e % 5 == 0) 233168 ほんとかしら
956 :
デフォルトの名無しさん :2009/11/14(土) 16:28:36
次の手順に従って,入力された値の最大値を求めるプログラムを作成せよ. 1. 空のリストを変数intlistにセットする. 2. キーボードから整数を1つ読み込み, * 整数が負の値だったら,読み込みは終了して3.へ進む. * それ以外だったら,intlistの最後にその数を追加して2.を繰り返す. 3. 最大値を覚える変数maxnumを用意し,初期値として適切な値(各自で考えること)を代入する. 4. リストに入っている整数を順に変数iに代入しながら,リストの値がなくなるまで次の操作を繰り返す. * maxnumとiの値を比較し,iの方が大きければ,maxnumの値をiで置き換える. 5. 最後にmaxnumに入っている値が最大値なので,それを表示する.
957
>>956 #coding: UTF-8
intlist = []
while 0 == 0:
i = raw_input(u"整数を入力してください\n".encode("cp932"))
if not i.isdigit() and (not i[1::].isdigit() or i[0] != "-"):
print u"\n数値ではありませんでした".encode("cp932")
continue
i = int(i)
if i < 0:
if len(intlist) == 0:
continue
break
intlist.extend([i])
maxnum = -1
for i in intlist:
if i > maxnum: maxnum = i
print maxnum
いかにも素人が書いたみたいな雰囲気で完璧だ
"100".isdigit() とか初めて知った try: n = int(raw_input()); except ... とかやるよりいいね
負数が入力できない
962 :
961 :2009/11/14(土) 19:13:46
>isdigit( ) > >文字列中に数字しかない場合には真を返し、その他の場合は偽を返します。 (*´・ω・)
964 :
デフォルトの名無しさん :2009/11/15(日) 11:07:38
1. キーボードから氏名と電話番号を読み込み,氏名をキー,電話番号を値としてディクショナリに格納する. 2. 氏名として"END"が入力されるまで1.を繰り返す. 3. "END"が入力されたら,ディクショナリの内容を "氏名\t電話番号\n" の形式でファイルに書き出す.
とりあえず脳内でほぼ完成した
>>964 #!/usr/bin/python
# -*- coding: utf-8 -*-
import os.path, sys
OUTPUT_FILE_PATH = os.path.expanduser("~/address_book.txt")
address_book = {}
while True:
name = raw_input(u"氏名: ".encode(sys.stdout.encoding)).decode(sys.stdout.encoding)
pnum = raw_input(u"電話番号 :".encode(sys.stdout.encoding)).decode(sys.stdout.encoding)
if name == u"END": break
address_book[name] = pnum
fp = file(OUTPUT_FILE_PATH, "w+")
for name in address_book:
text = u"%s\t%s\n" % (name, address_book[name])
fp.write(text)
fp.close()
>text = u"%s\t%s\n" % (name, address_book[name]) text = "%s\t%s\n" % (name.encode("utf-8"), address_book[name].encode("utf-8"))
968 :
デフォルトの名無しさん :2009/11/15(日) 11:50:39
>>986 name = raw_input(u"氏名: ".encode(sys.stdout.encoding)).decode(sys.stdout.encoding)
pnum = raw_input(u"電話番号 :".encode(sys.stdout.encoding)).decode(sys.stdout.encoding)
こんな面倒なことしないとだめなん?
>>968 あんまり環境(OS)に依存しないようにしてみた。
Windows持ってないからテストできないんだけどちゃんと動いた?
970 :
デフォルトの名無しさん :2009/11/15(日) 12:15:04
ファイル出力の円コーディングは指定されていないようですが この場合はどうなるんでしょうか?
971 :
デフォルトの名無しさん :2009/11/15(日) 12:16:07
972 :
デフォルトの名無しさん :2009/11/15(日) 13:33:28
1. コンピュータは乱数を用いて正解となる値を生成する.値は1以上100以下の整数とする. 2. 人間はその数を推測し,キーボードから入力する. 3. 入力された値が正解であれば,「正解です」というメッセージと何回目の入力で正解したかを表示して終了する. 4. 入力された数が正解より大きければ,「大きすぎます」と表示して2.へ戻る 5. 入力された数が正解より小さければ,「小さすぎます」と表示して2.へ戻る
>>972 #coding=utf-8
import random
A=random.randint(1,100)
i=0
while True:
i+=1
a=int(raw_input("数字を入力してください"))
if a==A:
print "%d回目で正解です"%i
break
elif a>A:print "大きすぎます"
else:print "小さすぎます"
import random import itertools ans = random.randint(1, 100) for i in itertools.count(1): try: n = int(raw_input("# ")) except ValueError: print "数字を入力してください" continue if n == ans: print "正解です" print i, "回目" break elif n < ans: print "小さすぎます" else: print "大きすぎます"
975
976
978
979 :
デフォルトの名無しさん :2009/11/16(月) 07:32:34
979
980 :
デフォルトの名無しさん :2009/11/16(月) 09:02:53
980
ゼータ関数をgeneratorで出力するプログラムを書いてください
982 :
デフォルトの名無しさん :2009/11/16(月) 09:10:26
982
983 :
デフォルトの名無しさん :2009/11/16(月) 09:35:18
983
984 :
デフォルトの名無しさん :2009/11/16(月) 09:36:21
984
985 :
デフォルトの名無しさん :2009/11/16(月) 09:37:05
985
986 :
デフォルトの名無しさん :2009/11/16(月) 10:34:44
986
987 :
デフォルトの名無しさん :2009/11/16(月) 10:37:30
987
988 :
デフォルトの名無しさん :2009/11/16(月) 10:57:24
988
989 :
デフォルトの名無しさん :2009/11/16(月) 11:06:08
989
990
992
991
990
998
999
996
997
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。