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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2009/11/14(土) 12:04:10
>>941
grep -c "^#" /etc/termcap
953デフォルトの名無しさん:2009/11/14(土) 12:11:24
>>952
それを popen2.popen3() または subprocess で書いたら許してやってもいい
954デフォルトの名無しさん:2009/11/14(土) 14:49:50
1000よりも小さいすべての「3または5の倍数」の合計を計算し,結果を表示するプログラムを作成せよ.
955デフォルトの名無しさん:2009/11/14(土) 14:55:21
>>> 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デフォルトの名無しさん:2009/11/14(土) 16:42:53
957
958デフォルトの名無しさん:2009/11/14(土) 18:27:17
>>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
959デフォルトの名無しさん:2009/11/14(土) 18:32:46
いかにも素人が書いたみたいな雰囲気で完璧だ
960デフォルトの名無しさん:2009/11/14(土) 18:37:21
"100".isdigit() とか初めて知った
try: n = int(raw_input()); except ... とかやるよりいいね
961デフォルトの名無しさん:2009/11/14(土) 19:04:15
負数が入力できない
962961:2009/11/14(土) 19:13:46
>isdigit( )
>
>文字列中に数字しかない場合には真を返し、その他の場合は偽を返します。

(*´・ω・)
963デフォルトの名無しさん:2009/11/14(土) 19:14:31
しまったw
>>962を書いたのは>>960です
964デフォルトの名無しさん:2009/11/15(日) 11:07:38
1. キーボードから氏名と電話番号を読み込み,氏名をキー,電話番号を値としてディクショナリに格納する.
2. 氏名として"END"が入力されるまで1.を繰り返す.
3. "END"が入力されたら,ディクショナリの内容を "氏名\t電話番号\n" の形式でファイルに書き出す.
965デフォルトの名無しさん:2009/11/15(日) 11:33:26
とりあえず脳内でほぼ完成した
966デフォルトの名無しさん:2009/11/15(日) 11:38:54
>>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()
967デフォルトの名無しさん:2009/11/15(日) 11:45:05
>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)

こんな面倒なことしないとだめなん?
969デフォルトの名無しさん:2009/11/15(日) 12:00:07
>>968
あんまり環境(OS)に依存しないようにしてみた。
Windows持ってないからテストできないんだけどちゃんと動いた?
970デフォルトの名無しさん:2009/11/15(日) 12:15:04
ファイル出力の円コーディングは指定されていないようですが
この場合はどうなるんでしょうか?
971デフォルトの名無しさん:2009/11/15(日) 12:16:07
ああ >>967 で訂正されてますね
失礼
972デフォルトの名無しさん:2009/11/15(日) 13:33:28
1. コンピュータは乱数を用いて正解となる値を生成する.値は1以上100以下の整数とする.
2. 人間はその数を推測し,キーボードから入力する.
3. 入力された値が正解であれば,「正解です」というメッセージと何回目の入力で正解したかを表示して終了する.
4. 入力された数が正解より大きければ,「大きすぎます」と表示して2.へ戻る
5. 入力された数が正解より小さければ,「小さすぎます」と表示して2.へ戻る
973デフォルトの名無しさん:2009/11/15(日) 13:52:35
>>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 "小さすぎます"
974デフォルトの名無しさん:2009/11/15(日) 14:01:56
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デフォルトの名無しさん:2009/11/15(日) 22:49:37
975
976デフォルトの名無しさん:2009/11/15(日) 23:27:45
976
977デフォルトの名無しさん:2009/11/16(月) 06:32:29
978デフォルトの名無しさん:2009/11/16(月) 07:31:36
978
979デフォルトの名無しさん:2009/11/16(月) 07:32:34
979
980デフォルトの名無しさん:2009/11/16(月) 09:02:53
980
981デフォルトの名無しさん:2009/11/16(月) 09:05:42
ゼータ関数を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デフォルトの名無しさん:2009/11/16(月) 11:08:27
990
991デフォルトの名無しさん:2009/11/16(月) 11:13:07
992デフォルトの名無しさん:2009/11/16(月) 11:20:57
992
993デフォルトの名無しさん:2009/11/16(月) 13:01:04
991
994デフォルトの名無しさん:2009/11/16(月) 13:01:37
990
995デフォルトの名無しさん:2009/11/16(月) 13:02:03
998
996デフォルトの名無しさん:2009/11/16(月) 13:02:23
999
997デフォルトの名無しさん:2009/11/16(月) 13:02:46
996
998デフォルトの名無しさん:2009/11/16(月) 13:03:07
997
999デフォルトの名無しさん:2009/11/16(月) 13:03:29
1000
1000デフォルトの名無しさん:2009/11/16(月) 13:04:40
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。