トップページ⇒tech
1001コメント340KB

Pythonについて0から教えてください

■ このスレッドは過去ログ倉庫に格納されています
0001fool2005/09/07(水) 15:19:16
Pythonの入手方法からPythonでのプログラミングの仕方
について0から教えてください
お願いします
0002デフォルトの名無しさん2005/09/07(水) 15:33:00
apt-get install python
0003デフォルトの名無しさん2005/09/07(水) 15:34:54
自己解決しました。
0004デフォルトの名無しさん2005/09/07(水) 15:50:29
もうあきらめたか。
まあ、あきらめが肝心だな。
0005fool2005/09/07(水) 16:05:16
あ、いや、まだ・・・・
0006デフォルトの名無しさん2005/09/07(水) 16:32:27
テメーが適当な書き方でスレ立てるから適当なレスしか帰ってこないんだよ
入手方法から知りたいなら環境くらい書いただろうだ
0007fool2005/09/07(水) 16:43:34
>>6
あなたには聞いていませんよ。とても迷惑だから消えてください。
0008fool2005/09/07(水) 16:46:52
>>7はにせものです
0009fool2005/09/07(水) 16:49:36
>>6
OSはWindowsです
0010デフォルトの名無しさん2005/09/07(水) 17:10:40
Python vs Ruby vs PHP vs Perl
http://pc8.2ch.net/test/read.cgi/php/1124710112/
Pythonのお勉強 Part7
http://pc8.2ch.net/test/read.cgi/tech/1125159015/
★Pythonって死滅しちゃうの?Part8★
http://pc8.2ch.net/test/read.cgi/tech/1113431728/
Python厨とRuby厨が仲直りするスレッド
http://pc8.2ch.net/test/read.cgi/tech/1099804004/
MacでPython Part 1
http://pc7.2ch.net/test/read.cgi/mac/1105894574/
Python
http://pc8.2ch.net/test/read.cgi/linux/1078144088/
Pythonお勉強スレッド(臨時用)
http://pc7.2ch.net/test/read.cgi/pc2nanmin/1080466416/
0011デフォルトの名無しさん2005/09/07(水) 17:29:49
日本語化されたPythonってないですか?
0012fool2005/09/07(水) 17:30:42
>>10
ありがとうございます
0013デフォルトの名無しさん2005/09/07(水) 17:39:26
インストールしたけどどれ実行したらいいかわかんねー

IDLE(Python GUI)
Module Docs
Python(command line)
Python Manuals
Uninstall Python
0014デフォルトの名無しさん2005/09/07(水) 17:41:46
文字列リテラルを挟むのに""と''がありますがどんな差がありますか?
もし同じ物ならどちらが一般的に使われていますか
0015デフォルトの名無しさん2005/09/07(水) 17:43:07
>>9
http://www.python.jp/Zope/download/pythonjpdist
とりあえずここからバイナリ落として来い
0016デフォルトの名無しさん2005/09/07(水) 18:26:28
>>14
違いは、""は中に"が書けない、''は中に'が書けない。
0017デフォルトの名無しさん2005/09/07(水) 18:35:14
ここらへんを読むよろし
http://www.python.jp/Zope/intro/instant_hacking_jp
http://www.python.jp/Zope/intro/instant_python_jp
http://www.python.jp/doc/release/tut/
http://www.amazon.co.jp/exec/obidos/ASIN/4873112109/qid=1126085481/sr=1-1/ref=sr_1_10_1/249-0816997-5615561
0018デフォルトの名無しさん2005/09/07(水) 18:57:05
>>16
ありがとうございます
よくわかりました
0019fool2005/09/07(水) 20:03:36
Pythonはやっぱ面倒になってきたので
PHPに変えます。
0020デフォルトの名無しさん2005/09/07(水) 20:11:04
それじゃあ削除依頼してきてくださいね^^
0021デフォルトの名無しさん2005/09/07(水) 22:52:30
次スレは
PHPについて0から教えてください
だな
0022デフォルトの名無しさん2005/09/07(水) 22:54:39
>>21
phpについて教えてください!
http://pc8.2ch.net/test/read.cgi/tech/1125139051/
もう既にある。あきらめるしかないな。
0023デフォルトの名無しさん2005/09/07(水) 23:10:40
文字列の変更ができないのはナゼですか?
できたほうが便利じゃないの?
0024デフォルトの名無しさん2005/09/07(水) 23:47:16
>>22
0からじゃないじゃん
0025デフォルトの名無しさん2005/09/08(木) 01:16:12
多分マイナスから教わってもいいように配慮してるんだと思う。
0026デフォルトの名無しさん2005/09/08(木) 03:40:13
日本語ファイル名だとうまく動かない
0027デフォルトの名無しさん2005/09/08(木) 03:45:48
ユークリッドの互除法できた
たった2行で書けるなんてすげー

a=input("a=")
b=input("b=")

if b>a:
    a,b=b,a
    
while b>0:
    a,b=b,a%b

print a
0028デフォルトの名無しさん2005/09/08(木) 06:19:31
classメソッドの第一仮引数になぜselfが必要なの?
実際には引数としてselfにあたるものは必要ないようですが……
0029デフォルトの名無しさん2005/09/08(木) 06:23:11
おっと、クラスメソッドでは意図した意味にならないようだ
ただ単にメソッド、もしくはメンバ関数と言い換えたい

サンクス
0030デフォルトの名無しさん2005/09/08(木) 19:02:58
>>1
まずPCには一切触れず
机とPC本体への雑巾がけから始めろ
全てはそこから始まる
0031デフォルトの名無しさん2005/09/08(木) 19:15:09
パイ損なんて
勝手にインデントすると起こられるし
fじゃこし
0032名無しさん@そうだ選挙に行こう2005/09/11(日) 09:00:38
Tkinterってなんて発音するの?
0033名無しさん@そうだ選挙に行こう2005/09/11(日) 10:58:01
てぃーけーいんたー
じゃね?
0034名無しさん@そうだ選挙に行こう2005/09/11(日) 17:10:28
エディタのOption -> Code Context って何?
上部に灰色のエリアが現れるんだけど
0035デフォルトの名無しさん2005/09/14(水) 16:32:03
>>34
何のエディタ?
0036デフォルトの名無しさん2005/09/14(水) 23:43:10
Idleだと思われます。

そのエリアは、自分の作業している階層のヒントが表示されるものです。
長いコードを書けば分かる。
たとえば、次のようなコードをいれて改行しまくると分かりますよ。

def foo():
  for i in range(10):
    print i
0037デフォルトの名無しさん2005/09/16(金) 03:30:22
>>36
レスありがとうございます
色々試してみたんですがやっぱり変化ないです
うーん、なんでだろう……
そのコードの後に改行を入れたらいいんですよね
0038デフォルトの名無しさん2005/09/16(金) 21:29:44
みなさん!協力を、お願いします
0039デフォルトの名無しさん2005/09/16(金) 21:34:48
隠れないと出てこないな、もっと縦長なソースを書いてみそ。
0040デフォルトの名無しさん2005/09/16(金) 23:44:21
ここの文章でちょっと疑問があるんだけど
http://www.unixuser.org/~euske/doc/pygame/newbieguide-j.html

rect = pygame.Rect(10, 20, 30, 30)
rect = pygame.Rect((10, 20, 30, 30))
rect = pygame.Rect((10, 20), (30, 30))
rect = (10, 20, 30, 30)
rect = ((10, 20, 30, 30))

この4番目と5番目ってどう違うの?
5番目は((10, 20)(30, 30))の間違いかなぁとおもって聞いてみた
漏れの勘違いで、本当は何か違いがあるなら教えてくれ
0041デフォルトの名無しさん2005/09/17(土) 01:40:28
>>36-37
そのソースコードだと print i の後に37個改行入れて初めて分かる
0042デフォルトの名無しさん2005/09/17(土) 10:52:27
>>40
4番目のrectの中身はリスト、
5番目のrectの中身はリストのリスト
0043422005/09/17(土) 10:54:39
ごめ、リストじゃなくてタプルだった。
0044デフォルトの名無しさん2005/09/18(日) 00:22:46
5 番目の外側の括弧は冗長なものだから
4 番目と 5 番目は等しいよ (両方とも 1 次元のタプル)
著者がどういう意図なのかはわからないけど
0045デフォルトの名無しさん2005/09/18(日) 00:44:33
やっぱタプルのタプルと勘違いしてるのでは


ところで、いい加減あっちに合流してここは下に落としたい。
ただでさえ過疎ってるんだから。

Pythonのお勉強 Part7
http://pc8.2ch.net/test/read.cgi/tech/1125159015/
0046デフォルトの名無しさん2005/09/18(日) 23:53:15
You is-a fool man, hahaha.
0047422005/09/19(月) 23:06:27
しまった。。
>>40さんの指摘通りですた。
要素が1つのタプルは tuple = (x, ) としないと作れないから、
>>40のは4番目と5番目、等しいんだorz
0048デフォルトの名無しさん2005/09/19(月) 23:13:24
何にせよ、そのサイトの著者の意図がわからないよね
0049デフォルトの名無しさん2005/09/21(水) 15:40:34
4番目は1番目、5番目は2番目、しかし3番目をタプルで渡すことは出来ません。
ということでは。
0050デフォルトの名無しさん2005/09/21(水) 18:25:47
> from pygame.locals import *
> r = Rect(0,0,10,10)
> tr = (5,5,10,10)
> r.colliderect(tr)
1
> tr = ((5,5),(10,10))
> r.colliderect(tr)
1
> tr = ((5,5,10,10),)
> r.colliderect(tr)
1
> tr = (((5,5,10,10),),)
> r.colliderect(tr)
1
> tr = ((5,5,10),10)
> r.colliderect(tr)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: Argument must be rect style object


((5,5),(10,10))も
((5,5,10,10),)も
(((5,5,10,10),),)でも問題なし
0051デフォルトの名無しさん2005/09/22(木) 01:42:11
>>50
おほ、それは失礼しました。
0052デフォルトの名無しさん2005/09/22(木) 11:29:29
質問です。

Python信者はどうしてLispを目の敵にするんですか?
正直かなりキモい言動で、Pythonの普及に水を差していると思うのですが。
Python信者はRuby信者がPerlに対してそうであるように、
Lispに激しいコンプレックスを感じているヒステリックな集団なのですか?
0053デフォルトの名無しさん2005/09/22(木) 11:36:34
   〃∩ ∧_∧
   ⊂⌒(  ・ω・)  はいはいわろすわろす
     `ヽ_っ⌒/⌒c
        ⌒ ⌒
0054デフォルトの名無しさん2005/10/12(水) 08:18:55
LispってEmacs以外なんか使えるの?
0055デフォルトの名無しさん2005/10/12(水) 11:32:01
はいはいわろすわろす
0056デフォルトの名無しさん2005/11/01(火) 16:31:21
このスレを再利用させていただきます
名無しさん同士で問題を出して解きあう下記のスレからの移動です
こちらではPythonをメインに多言語で解きあいたいと思っています(Ruby含む)
知識拡充が主目的ですのでトリッキーな方法や言語ごとのマナーなど
多彩な情報を交換できればと思っています

大まかなスレの流れ
誰かが問題を出す
→答えを考えて書き込む
→それぞれ思い思いの視点で採点する(または便乗質問する)
→話題が収束する頃に次の問題を出す

現在は問題のストックがないのでC言語用に出題された問題(下記のwikiにまとめてあります)を
解いていきます。みなさんもやってみてください
他の人が解いていても、色々なやり方を見るのは勉強になるので是非書き込んでください
また、Wiki以外でも良い問題集があれば教えてください(パイソンチャレンジは素晴らしい!)
そして気軽に問題を出したり回答にコメントをつけてください

それではPythonユーザーの方もそれ以外の方もみなさんよろしくお願いしますm(_ _)m

関連スレ
おまいら!今日からC言語を学んでいくぞー!パート2
http://pc8.2ch.net/test/read.cgi/tech/1128637438/

まとめwiki(C言語用)
http://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%A5%D1%A1%BC%A5%C82%5D%5D
0057前スレから転載2005/11/01(火) 16:35:37
【問題】
わかったから初心者どもはまず”HelloWorld!”を画面に出すプログラムを作りやがれ

【言語】
python

【回答】
print '”HelloWorld!”'
0058前スレから転載2005/11/01(火) 16:36:15
【問題】
1から50までの和を計算して表示

【言語】
python

【回答】
sum=0
for i in range(51):
    sum+=i
print sum
0059前スレから転載2005/11/01(火) 16:36:56
【問題】
ファイルから数字を読み込み大きい数から順に並べて画面に表示するプログラムを書け
http://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%5D%5D#content_1_18

【言語】
python

【回答】
filename='numbers.txt'
num=[]
fp=open(filename)
for line in fp:
    num.append(int(line))
fp.close

#print sorted(num)

for i in range(len(num)):
    for j in range(i):
        if num[i]<num[j]:
            tmp=num[i]
            num[i]=num[j]
            num[j]=tmp
print num
0060デフォルトの名無しさん2005/11/01(火) 16:55:43
>>58
print sum(range(51))
0061デフォルトの名無しさん2005/11/01(火) 16:59:32
>>59
print list(reversed(sorted((int(n.strip()) for n in file('numbers.txt').readlines() if n.strip()))))
0062デフォルトの名無しさん2005/11/01(火) 17:08:55
>>58
print 51*50/2.0
0063デフォルトの名無しさん2005/11/01(火) 18:31:10
>>61 すげえ・・・
0064デフォルトの名無しさん2005/11/01(火) 18:42:22
>fp.close
これだとcloseされないんじゃない?
0065デフォルトの名無しさん2005/11/01(火) 18:54:09
# 物体が通る軌跡を求めろ
from math import *
from Tkinter import *
def traj_generator(segments, ix, iy, iu, iv):
  x, y, u, v = (ix, iy, iu, iv)
  while 1:
    minm, mink, s, t, p, q = 1.0, 2**31, 0, 0, 0, 0
    for ss, tt, pp, qq in segments:
      if not pp*(y-tt)==qq*(x-ss):
        m = (u*tt-v*ss+v*x-u*y)/(v*pp-u*qq)
        k = v and (tt+m*qq-y)/v or (ss+m*pp-x)/u
        if 0<m<=1 and 0<k<=mink:
          minm, mink, s, t, p, q = m, k, ss, tt, pp, qq
    VS, SS = u*p+v*q, p*p+q*q
    nx, ny, nu, nv = s+minm*p, t+minm*q, 2*(VS/SS)*p-u, 2*(VS/SS)*q-v
    x, y, u, v = nx, ny, nu, nv
    yield nx, ny, nu, nv
translate = lambda x, y, u, v: (25+x, 125-y, u, 0-v)
box_seg = [ (0, 0, 100, 0), (100, 0, 0, 100), (100, 100, -100, 0), (0, 100, 0, -100), (50, 0, 0, 50)]
initial = (0, 0, 0.31, 1)
traj = traj_generator(box_seg, *initial)
cur = translate(*initial)
root = Tk()
canvas = Canvas(root, width=150, height=150); canvas.pack()
canvas.create_rectangle(25, 25, 125, 125)
canvas.create_line(75, 75, 75, 125)
for i in range(10):
  px, py, pu, pv = cur
  nx, ny, nu, nv = translate(*traj.next())
  canvas.create_line(px, py, nx, ny)
  cur = nx, ny, nu, nv
root.mainloop()
0066デフォルトの名無しさん2005/11/01(火) 21:48:01
#まずは字句解析と行こうか
import re
ptn_list = [(re.compile(p), t) for (p, t) in
      ((r'(if|else|while|const|var|procedure)(?!¥w)', 'keyword'),
      (r'[a-zA-Z]¥w*', 'name'), (r'¥d+(¥.¥d*)?', 'number'),
      (r'[=+¥-*/]{1,2}', 'operator'), (r'[{}();]', 'delimiter'),
      (r'[¥s]+', 'punctuation'))] 
def token_generator(s):
  cursor=0
  while cursor<len(s):
    found=None
    for ptn, typ in ptn_list:
      found = ptn.match(s, cursor)
      if found: break
    if not found: raise ValueError, "Lexical Error at %d." %(cursor)
    token = s[found.start():found.end()]
    cursor = found.end()
    yield typ, token

code = """
const repeat=2**10;
var yousayso;
procedure isayso {
 while (yousayso==1){
  if repeat-- {
   repeat /= 7 + 1;
 }
}
"""
tg = token_generator(code)
for ttype, value in tg:
  print "token: %s, value: %s" %(ttype, [value])
0067デフォルトの名無しさん2005/11/01(火) 22:08:26
# ジャンケンゲーム
from random import seed, choice
def hand_generator():
hands=list('@V%') # rock, scissors, paper respectively
seed()
while 1: yield choice(hands)
msgdict = {0:'you win!', 1:'you lose...', 2:"that's even!"}
ratings = {'@': 'V%@', 'V': '%@V', '%': '@V%'}
for hand in hand_generator():
r = raw_input('enter your hand (@: rock, V: scissors, %:paper)').strip()
print "My hand is %s," %(hand),
if r and r in '@V%':
print msgdict[ratings[r].index(hand)]
else:
print "Eh?"
0068デフォルトの名無しさん2005/11/01(火) 22:20:26
# じゃぁ、1+3-5+7-9+11-13+・・・を50回
print 1+sum((0-(2*n+1)*((-1)**n) for n in range(1, 50)))
0069デフォルトの名無しさん2005/11/01(火) 22:33:02
import sys
for line in sys.stdin:
    line = line.replace("&", "&amp;")
    line = line.replace("<", "&lt;")
    line = line.replace(">", "&gt;")
    print line.replace(" ", "&nbsp;").strip()
0070デフォルトの名無しさん2005/11/01(火) 22:37:23
# ソートするプログラム
import itertools, re
print sorted([list(v) for (k, v) in itertools.groupby(sorted(int(s) for s in re.findall('¥d+', raw_input("Enter several numbers: "))))], cmp=lambda x, y: cmp(len(x),len(y)), reverse=True)

# または
print sorted(int(s) for s in re.findall('¥d+', raw_input("Enter several numbers: ")))
0071デフォルトの名無しさん2005/11/02(水) 14:38:42
このスレすげー!もっときぼん!!
0072デフォルトの名無しさん2005/11/02(水) 14:45:19
# 三角形の判定
import re, sys

def trigon_type(values):
  if (values[0]+values[1])<values[2]: # trigonometric inequality
    return -1
  else:
    return len(set(values))

if __name__=="__main__":
  while 1:
    msg = "Provide five... no! Three numbers."
    vals = sorted([int(i)
            for i in re.findall('¥d+', raw_input(msg))
            if i>0][:3])
    if not len(vals)==3:
      print >>sys.stderr, "Provide (more than) five... no! Three items."
    else:
      print trigon_type(vals)
0073デフォルトの名無しさん2005/11/02(水) 16:18:28
# 三目並べ
import re, random
newflags = lambda :[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
bingos = [[(i, j) for i in [0, 1, 2]] for j in [0, 1, 2]] + [[(j, i) for i in [0, 1, 2]] for j in [0, 1, 2]] + [[(0, 0), (1, 1), (2, 2)], [(2, 0), (1, 1), (0, 2)]]
judge = lambda f: len([f[p][q]*f[r][s]*f[t][u] for ((p, q), (r, s), (t, u)) in bingos if f[p][q]*f[r][s]*f[t][u] in (1, 8)])
def think(flg, turn):
  if not flg[1][1]: return (1,1) # as theory
  hands = [(i, j) for i in range(3) for j in range(3) if flg[i][j]==0]
  if hands: return random.choice(hands)
  return (-1, -1) # no hands left
def stage(flg):
  print '¥n'.join([''.join([{0:'-',1:'o',2:'x'}[flg[i][j]] for j in range(3)]) for i in range(3)])

if __name__=="__main__":
  print "Shall we play a game?"
  flags = newflags()
  winner = 0
  while winner==0:
    stage(flags)
    pos = [int(i) for i in re.findall('[012]', raw_input("Your hand (ex. 1-2 for [1,2])"))[:2]]
    if len(pos)<2 or flags[pos[1]][pos[0]]>0: print "eh?"; continue
    flags[pos[1]][pos[0]] = 1
    if judge(flags): winner=1; break # player win
    i, j = think(flags, 2)
    if (i, j)==(-1, -1): break # draw
    flags[i][j] = 2
    if judge(flags): winner=2; break # computer win
  stage(flags)
  print ("That's draw. How about chess?", "You win!", "I win!")[winner]
0074デフォルトの名無しさん2005/11/02(水) 16:50:07
# コードブレーカー
import re, random

def judge(c, a):
return (len([True for i in range(3) if c[i]==a[i]]),
len([True for d in list(c) if d in ''.join(set(list(a)))]))
code = ''.join(str(random.choice(range(9))) for i in range(3))
while 1:
ins = re.findall('¥d{3}', raw_input("enter code?: "))[:1]
if not ins:
print "eh?"
continue
hits, blows = judge(code, ins[0])
if hits==3:
print "That's it!"
break
print "%d hits, %d blows." %(hits, blows)
0075デフォルトの名無しさん2005/11/02(水) 17:01:02
まちがえた.
import re, random

def judge(c, a):
  return (len([True for i in range(3) if c[i]==a[i]]),
      len([True for d in list(c) if d in ''.join(set(list(a)))]))
code = ''.join(str(random.choice(range(9))) for i in range(3))
while 1:
  ins = re.findall('¥d{3}', raw_input("enter code?: "))[:1]
  if not ins:
    print "eh?"
    continue
  hits, blows = judge(code, ins[0])
  if hits==3:
    print "That's it!"
    break
  print "%d hits, %d blows." %(hits, blows)
0076デフォルトの名無しさん2005/11/02(水) 17:04:19
# 回文判定
judge = lambda s, enc: unicode(s, enc)==''.join(reversed(list(unicode(s, enc))))
0077デフォルトの名無しさん2005/11/02(水) 19:27:38
お前ら>>56に書いてあるルール読んだか?
>大まかなスレの流れ
>誰かが問題を出す
>→答えを考えて書き込む
>→それぞれ思い思いの視点で採点する(または便乗質問する)
>→話題が収束する頃に次の問題を出す

出題されても無いのに答えるな。出題されないなら自分で出題しろ

仕切り直して超簡単な問題行くぞ
【問題】
標準ライブラリを使ってsin 60°を求めろ
0078デフォルトの名無しさん2005/11/02(水) 19:35:58
標準ライブラリって、import math でもいいのか?
0079デフォルトの名無しさん2005/11/02(水) 19:51:38
使っていいなら
import math
math.sin(math.radians(60))
もしくはmath.sin(math.pi/3)
008065-68,70,72-762005/11/02(水) 19:54:21
>>77 が偉そうなんでやる気なくした.
0081デフォルトの名無しさん2005/11/02(水) 20:38:12
sum((-1)**(n-1)*(6.28*60/360.0)**(2*n-1)/reduce(int.__mul__, range(1, 2*n)) for n in range(1, 8))
0082デフォルトの名無しさん2005/11/02(水) 20:46:13
π=3.14だと結構違うもんだな。
0083デフォルトの名無しさん2005/11/02(水) 20:47:22
いや、nがたった8までってところで誤差が大杉。
0084デフォルトの名無しさん2005/11/02(水) 20:57:08
適当なこと言うな。nは8でもべき展開の次数は倍の16。 3.14の代わりにmath.piを使えばsin(pi/3.0)との誤差は10^-12だ。
0085デフォルトの名無しさん2005/11/02(水) 21:05:41
>>84
熱いな。
0086デフォルトの名無しさん2005/11/02(水) 21:12:52
熱いということで、次は華氏と摂氏の温度変換なんてどうだ?
0087デフォルトの名無しさん2005/11/02(水) 22:27:06
>>86 簡単そうなので勝手に難しくしてみる。
[お題]
摂氏を入力すると、華氏で出力。華氏を入力すると、摂氏で出力。
動作例: "41F"を入力すると"5C"、"5C"を入力すると"41F"と表示する。
※ちなみに、C:摂氏, F:華氏, F=9/5*C+32, C=5/9*(F-32) だってさ。

というコードを1行で。セミコロン使用禁止、import行は行数に含まない
0088デフォルトの名無しさん2005/11/02(水) 23:26:08
>>> print [{'F': "%dC" %((int(deg)-32)*5/9.0), 'C': "%dF" %(9*int(deg)/5.0+32)}[unit] for deg, unit in __import__('re').findall(r'(¥d+)([FC])', raw_input("enter temparature:" ))][0]
enter temparature:37C
98F
0089デフォルトの名無しさん2005/11/02(水) 23:36:11
Rubyで書くとどうなるのかな?
0090872005/11/02(水) 23:44:41
>>88 ナイス
出題者はこんなの考えてました。
print [lambda s:{"F":lambda f:str(5.0/9.0*(f-32.0))+"C",\
 "C":lambda c:str(9.0/5.0*c+32.0)+"F"}[s[-1]](float(s[:-1]))]\
 [0](raw_input(">"))
0091デフォルトの名無しさん2005/11/03(木) 06:16:45
正直,ワンライナーはあまり初心者向けの勉強にならないしキモイ
と,自分で書いてて思った
0092デフォルトの名無しさん2005/11/03(木) 09:04:08
「普通に書けたら次はワンライナーでやってみよう」
ぐらいのゆるい気分で次行ってみよう。
0093デフォルトの名無しさん2005/11/03(木) 09:14:53
>>91
ワンライナーと同価の「読めばそのまま解説になる」コードも一緒に書いてくれるといいな

と初心者は思った
0094デフォルトの名無しさん2005/11/03(木) 10:35:18
Lisp, Ruby, Perl的コードはPython的には(・A・)イクナイと思うのは漏れだけですか?
0095デフォルトの名無しさん2005/11/03(木) 13:24:51
普通にPythonicに書けばええやん
0096デフォルトの名無しさん2005/11/03(木) 13:48:52
初心者の勉強になりそうな問題を投下

【問題】
テキストファイル”text.txt"の中にPythonと言う文字がいくつ含まれるか調べるプログラムを作って欲しいお
0097デフォルトの名無しさん2005/11/03(木) 14:21:27
print str.count(file("test.txt").read(), "Python")
0098デフォルトの名無しさん2005/11/03(木) 16:12:48
# 素直に書いてみた.
"""sin(60) をべき級数で求める
"""

pi = 3.1415926535897931

def factorial(k):
  """k の階乗を再帰で求め,float で返す.
  """
  if k>0: # 再帰
    return k*factorial(k-1)
  else:  # 0! := 1
    return 1.0
(つづく)
0099デフォルトの名無しさん2005/11/03(木) 16:13:24
(つづき)
def naive_sin(x, order=15):
  """べき級数和による正弦の計算

  sin(x) のべき級数展開,sinx = x-(x^3/3!)+(x^5/5!)...(-1)^(n-1)(x^(2n-1)/(2n-1)!)+..
  によって n=order までの近似を求める.ここで x はラジアンである.

  """
  partial_sum = 0
  for n in xrange(1, order+1):
    fn = factorial(2*n-1)
    partial_sum += (-1)**(n-1)*(x**(2*n-1)/(fn))
  return partial_sum

if __name__=="__main__":
  deg = 60.0
  rad = 2*pi*deg/360.0
  print naive_sin(rad)
  from math import sin # compare with math.sin()
  print sin(rad)
0100デフォルトの名無しさん2005/11/03(木) 16:30:10
>>88 の書き下し
# 入力
instring = raw_input("enter temparature")
import re
# (数字), (F または C) からなるグループを instring から探し,
# [('92', 'F'), ('33', 'C'), ...] のようなリストを返す.
groups = re.findall(r'(¥d+)([FC])', instring)
# 上のリストの最初の要素 (実際には一要素しかない) を取り出し,
# 数字部分と単位部分に分ける
deg, unit = groups[0]
# deg が摂氏の場合の計算式
f2c_result = "%dC" % (int(deg)-32)*5/9.0
# deg が華氏の場合の計算式
c2f_result = "%dF" % (9*int(deg)/5.0)+32
# unit が 'F' なら華氏→摂氏, 'C' なら摂氏→華氏
result_dict = {'F': f2c_result, 'C': c2f_result}
result = result_dict[unit]
# 出力
print result
0101デフォルトの名無しさん2005/11/03(木) 17:04:24
>>100
おおっ、ありがとうございます
初心者なので>>86,87 を縛りなしで書いてみて>>88,90 をなんとなく理解しました
ちなみに自分のはこんなのになりました
正規表現オブジェクトの使い方がいまいち判ってないです

import re
tempre = raw_input("Tempreture? >")
match = re.match(r"^(\d+)(f|c)", tempre, re.I)
if match:
  answer = (match.group(2).upper() == "C") and \
    "%.2fF" % (9*float(match.group(1))/5+32) or \
    "%.2fC" % (5*(float(match.group(1))-32)/9)
else:
  answer = "invalid input"
print answer
■ このスレッドは過去ログ倉庫に格納されています