Pythonのお勉強 Part2 ..
[2ch|▼Menu]
849:デフォルトの名無しさん
08/01/13 21:27:29

$KCODE = 'SJIS'
dat = ['Alpha', 'ひらがな', '漢字', 'カタカナ', '0123', 'ねこ大好き']

dat.each{ |str|
p str
case str
when /^[A-z]+$/s
p 'アルファベットのみ'
when /^[0-9]+$/s
p '数字のみ'
when /^[あ-ん]+$/s
p 'ひらがなのみ'
when /^[ア-ン]+$/s
p 'カタカナのみ'
when /^[亜-煕]+$/s
p '漢字のみ'
else
p '混合か全角英数字か記号'
end
}

850:デフォルトの名無しさん
08/01/13 21:33:46
先生、ここはPythonスレです・・・

851:デフォルトの名無しさん
08/01/13 21:41:43
UNICODEにしたときも
^[亜-煕]+$
って保証されるんかいな?

852:デフォルトの名無しさん
08/01/13 22:22:29
「半角のみ」禁止なら割と簡単だけど・・・

853:デフォルトの名無しさん
08/01/13 22:23:01
unicodedataつかいなよ

854:デフォルトの名無しさん
08/01/13 22:50:41
>>851
UNICODEなら、漢字全部って意味でそれ書いちゃ間違い

855:デフォルトの名無しさん
08/01/13 22:56:46
UNICODE(UCS-2)の文字コード順で書かないとな

漢字(統合漢字とExt.Aだけ)はこうか
r'^[\u4E00-\u9FBB\u3400-\u4DB5]+$'

856:デフォルトの名無しさん
08/01/13 23:32:08
>>> unicodedata.east_asian_width(u'A') # 全角のA
'F'
>>> unicodedata.east_asian_width(u'ア') # 半角のア
'H'
>>> unicodedata.east_asian_width(u'あ')
'W'
>>> unicodedata.east_asian_width(u'A') # ASCII のA
'Na'
>>> unicodedata.east_asian_width(u'W')
'A'
>>> unicodedata.east_asian_width(u'\u0E20') # タイ語の文字
'N'
URLリンク(0xcc.net)


857:デフォルトの名無しさん
08/01/13 23:48:22
……「半角が混じってたらNG」
というロジックにしちゃえというのは禁句だろうか

858:デフォルトの名無しさん
08/01/14 00:03:10
2バイト半角もあるからな

859:デフォルトの名無しさん
08/01/14 04:39:57
もう全部UTF-32でいいよもう

860:デフォルトの名無しさん
08/01/14 09:28:22
禁止にするとかじゃなくて
内部でお好みの全角のみか何かに正規化するのが定石じゃん?

全角のみでおねがいします、の入力フォームを見るたびに
殴りたくなるぜ

861:デフォルトの名無しさん
08/01/14 10:53:30
俺も正規化すればいいと思う。

862:デフォルトの名無しさん
08/01/14 12:55:16
>>846
一旦EUC-JPかShift_JISにしてASCIIの範囲の文字とそれ以外に分ければいいと思う。

863:862
08/01/14 13:42:18
# -*- coding: utf-8 -*-

def is_zenkaku(s):
    assert isinstance(s, unicode)
    try:
        s = s.encode("euc-jp")
    except UnicodeError:
        return False
    i = 0
    while i < len(s):
        if s[i] < '\x80': # ASCII
            return False
        elif s[i] == '\x8e': # JIS X 0201 Katakana
            return False
        elif s[i] == '\x8f': # JIS X 0212 Supplementary Kanji
            i = i + 3
        else: # JIS X 0208
            i = i + 2
    return True

864:863の続き
08/01/14 13:43:21
if __name__ == "__main__":
    assert is_zenkaku(u"日本語") == True
    assert is_zenkaku(u"Kanji") == False
    assert is_zenkaku(u"Kanji") == True
    assert is_zenkaku(u"12345") == False
    assert is_zenkaku(u"12345") == True
    assert is_zenkaku(u"パイソン") == False
    assert is_zenkaku(u"パイソン") == True
    assert is_zenkaku(u"森\u9dd7外") == True
    assert is_zenkaku(u"Espa\u00f1ol") == False
    assert is_zenkaku(u"Россия") == True
    assert is_zenkaku(u"Αθηνα") == True
    assert is_zenkaku(u"(・∀・)イイ!") == True
    assert is_zenkaku(u"(・A・)イクナイ!") == False

865:デフォルトの名無しさん
08/01/14 18:26:52
>>849
rubyってそんな面倒なことしないと分けれないのかよwww

>>863
そんな面倒なことせずに
east_asian_width使えばいいだろ

866:デフォルトの名無しさん
08/01/14 19:08:51
>>865
ソースに問題点あるみたいなのでそっちの方が面倒そう<east_asian_width
URLリンク(d.hatena.ne.jp)

867:methane
08/01/14 19:27:05
>>866
それはdocutilsの中でeast_asian_width()の結果をどう扱ってるかって話。
日本限定で使う分にはこんな感じで良いと思う。
def char_width(s):
  if type(s) == 'str': s = unicode(s)
  return 2 if east_asian_width(s) in 'WFA' else 1

868:デフォルトの名無しさん
08/01/14 19:41:43
なるほど・・

869:デフォルトの名無しさん
08/01/14 19:51:10
>>866
それは、現在の実装がblogの人の想定と違ってるってだけでそ。
そこにある修正したら、\u00A1(INVERTED EXCLAMATION MARK)とかもWide&Full-widthと同じ扱いされてまうやん。


870:methane
08/01/14 20:53:09
スマン、east_asian_width() == 'A' の文字ってCJK圏では全部Wide文字扱いかと思ってた。
>>867 のも、'A'を入れるか入れないかは微妙なんだな。

871:デフォルトの名無しさん
08/01/14 21:12:40
A - East Asian Ambiguous
Ambiguous : あいまい(な)
なわけで。
URLリンク(www.unicode.org)


872:methane
08/01/14 21:18:31
いや、A=Ambigious=「あいまい」は知ってたけど、
CJK圏ではWide、それ以外ではNarrow、という意味で「あいまい」だと思ってた。
Unicodeメンドイな。

873:862
08/01/14 21:21:25
>>865
へー、unicodedata.east_asian_width() なんてあるんだ。知らんかった。Thanx

874:デフォルトの名無しさん
08/01/14 22:03:15
Rubyのgets.to_iにあたる、数値入力を取得する命令ってどう書いたらいいんでしょうか?

875:デフォルトの名無しさん
08/01/14 22:37:06
数値計算libでnumarray numpyとか似たようなのが複数あるけど
どれが一番いいの?


876:デフォルトの名無しさん
08/01/15 00:02:47
>>874
try:
  a = input()
except NameError:
  a = 0

877:デフォルトの名無しさん
08/01/15 00:09:30
>>876
その発想は無かった。

878:デフォルトの名無しさん
08/01/15 00:16:05
>>874
import sys
x = int(sys.stdin.readline())

impoすらメンドいならint(raw_input())

879:デフォルトの名無しさん
08/01/15 00:26:31
>>876
>>878
ありがとうございました。

880:デフォルトの名無しさん
08/01/15 13:37:12
自鯖でpythonを動かし、rssなんかを取得したいのですが、
cgiからurllibでgetするとソケットエラーになります。
pythonを起動してやれば、普通に取得できます。
分かる方いたらお願いします。

OS : CentOS release 5 (Final)
Server : Apache/2.2.3
python : 2.4.3

881:デフォルトの名無しさん
08/01/15 15:26:14
>>880
> urllibでgetするとソケットエラーになります。
「ソケットエラー」なんてエラー出力にはならないと思うし
勝手な省略したらわかるものもわからなくなるよ?

その環境にはないけどオチとしてはSELinuxが働いている、かな。

882:デフォルトの名無しさん
08/01/15 16:11:03
>>881
動きました。ありがとうございます。
エラー文見て、適当に略してしまいました、すいません。
IOError: [Errno socket error] (-3, 'Temporary failure in name resolution')

883:デフォルトの名無しさん
08/01/15 16:34:40
frobnicate - Google 検索
URLリンク(www.google.co.jp)

質問
frobnicateってどういう意味ですか?

884:デフォルトの名無しさん
08/01/15 16:50:24
>>883
その検索結果のROT13の頁を見よ

885:デフォルトの名無しさん
08/01/15 19:01:23
>>884
ROT13 - Wikipedia
Wikipedia項目リンク
>このルーチンはROT13と同じ目的で用いられるが、任意の二進データに利用可能である
>(ユーモアをこめて、「意味不明化」(en:frobnicate)関数と呼ばれる)。このルーチンではデータの
>各8-bitバイトをとり、二進数の00101010(十進表記では42。人生、宇宙、すべての答え参照)と
>の間のビット毎の排他的論理和 (XOR) を計算する

ですね

Re: [Python-Dev] Replacement for print in Python 3.0 :: ASPN Mail Archive :: python-dev
URLリンク(aspn.activestate.com)
>printf('$1 forgot to frobnicate the $2!\n', username, file.name,
>    to=sys.stderr)

>While that's a little less self-descriptive for a translator to deal
>with (who would only see the string, not the call site), it certainly
>looks nicer for a non-i18n application, and could certainly work for an
>i18n app too. It's a neat idea worth exploring.

意味不明化する、いう使い方をするみたいですね
dくす

886:デフォルトの名無しさん
08/01/15 19:39:21
>> I request the addition of prod():
>>  
>> def prod(seq):
>>      s = 1
>>      for x in seq:
>>          s *= x
>>  
>> prod is always as useful as sum()

>It would have to be called product(), and I believe it has been proposed
>multiple times and been rejected under the "not every 3-line function
>has to be builtin" rule.

そんなルール在ったんだw

887:デフォルトの名無しさん
08/01/16 00:46:04
set に含まれる要素うち、2つを取り出して比較ってのを全組み合わせについて
やりたいんだけど、効率よく処理するにはどうすればいいだろう。
最初に思いたのは s = set([.........]) として
seq = tuple(s)
for i in range(len(seq)-1):
 for j in range(1, len(seq)):
  my_cmp(seq[i], seq[j])
なんだけど、すごい遠回りして処理してる気がする。
意外とベタに
[my_cmp(i, j) for i in seq: for j in seq]
ってインラインぽくやった方が早いのかな。ちなみに
my_cmp での比較順番は関係なし。(交換法則が成り立つ)

これを C で実装できればなおいいんだけど
C-APIには集合オブジェクトの処理がないんだよね。。。


888:デフォルトの名無しさん
08/01/16 01:08:04
for x in list(s):
    s.remove(x)
    for y in s:
        my_cmp(x, y)

889:デフォルトの名無しさん
08/01/16 12:27:57
効率よく、という趣旨からは外れるかもしれないけど、
URLリンク(aspn.activestate.com)
の下の方のやつを使えば、

for p in comb(list(s), 2):
 my_cmp(*p)
とすっきり書ける。

890:デフォルトの名無しさん
08/01/16 23:41:58
ls = list(s)
for i in ls[:-2]:
 for j in ls[1:]:
  my_cmp(i, j)

891:デフォルトの名無しさん
08/01/17 17:57:12
総当たりになってないw

892:デフォルトの名無しさん
08/01/18 03:10:51
URLリンク(www.python.org)
面倒臭そうだ

893:デフォルトの名無しさん
08/01/18 12:05:26
${HOME}/bin
${HOME}/lib/python2.5
${HOME}/share
俺は↑みたいにやってパスを通している。
/usr/local = ${HOME} の位置づけ

${HOME}/.local/lib/python2.6
わざわざ隠さなくてもいいよ。
存在を忘れそうだ。
タイプも面倒くさいし。

894:デフォルトの名無しさん
08/01/18 21:21:23
半角と全角が混じった文字列を途中から改行するには
どうすればいいですか?

895:デフォルトの名無しさん
08/01/18 22:45:40
unicode に変換したら

896:デフォルトの名無しさん
08/01/18 23:15:20
禁則処理のことを云って居るのか?

897:デフォルトの名無しさん
08/01/18 23:34:09
この質問にちゃんと答えられたら
その人はPGじゃなくてエスパーだろ。

898:デフォルトの名無しさん
08/01/18 23:57:27
マルチバイト文字が入ってる文字列に改行を挿入したら泣き別れが
起きてしまうんですがどうしたらいいですか、なのかなぁ

899:デフォルトの名無しさん
08/01/19 01:38:32
半角と全角とか言ってるからそこらへんかも

つ Unicode 文字列

900:デフォルトの名無しさん
08/01/19 06:26:07
lxmlの最新バージョンのwindows用インストーラーがないんだけど

901:デフォルトの名無しさん
08/01/19 11:00:18
あんたRubyにいいたいことがあるんじゃないんですか? とくにPythonと比べてみて。
URLリンク(pub.cozmixng.org)



902:デフォルトの名無しさん
08/01/19 13:40:00
他の言語なんて放っておけ

903:デフォルトの名無しさん
08/01/19 16:00:57
Pythonの勉強をしにきました!

904:デフォルトの名無しさん
08/01/19 16:02:35
やっぱやめた!

905:デフォルトの名無しさん
08/01/19 16:17:47
>903
あきらめ早すぎ。

906:デフォルトの名無しさん
08/01/19 19:30:12
Pythonチュートリアル重要だねえ

print時の文字フォーマットは辞書を使って
>>>fuga = {'hoge':'doutei'}
>>>print("%(hoge)s" % fuga)
>>>doutei
ができることを知ったよ。恥ずかしいのですべて読み切る。

907:デフォルトの名無しさん
08/01/19 19:31:03
なんでprintに()つけるん?

908:デフォルトの名無しさん
08/01/19 19:31:51
>>907
Python3000から付けるようになるとのことで、
今のうちから括弧付ける癖付けてる

909:デフォルトの名無しさん
08/01/19 19:40:02
print("%(hoge)s" % (fuga,))
が正しい

910:デフォルトの名無しさん
08/01/19 19:55:33
>>907
かっこつかないだろ



後悔はしていない

911:デフォルトの名無しさん
08/01/19 19:56:37
>>909
Traceback (most recent call last):
File "<pyshell#909>", line 1, in <module>
print("%(hoge)s" % (fuga,))
TypeError: format requires a mapping

適当なことを言うのはやめるんだ

912:デフォルトの名無しさん
08/01/19 20:20:07
( "ヮ")

913:デフォルトの名無しさん
08/01/19 20:37:41
import string
print string.Template('$hoge').substitute(fuga)

というのも一応ある

914:デフォルトの名無しさん
08/01/19 22:57:31
URLリンク(slashdot.jp)

915:デフォルトの名無しさん
08/01/20 02:24:27
ただいまメンテナンス中です

Slashdot Japan は現在メンテナンスを行っております。
ご迷惑をおかけして、誠に申し訳ございません。
しばらく後にもう一度アクセス頂けますよう、お願い申し上げます。


916:デフォルトの名無しさん
08/01/20 03:01:44
メンテ終わったよ

917:デフォルトの名無しさん
08/01/20 03:02:55
>>906

>>> hoge = 'doutei'
>>> print '%(hoge)s' % locals()
doutei

こんな技もあるから覚えておくといいよチェリーボーイ

918:デフォルトの名無しさん
08/01/20 14:50:00
>>916
39

919:デフォルトの名無しさん
08/01/20 16:12:47
もう伸びないってさ

920:デフォルトの名無しさん
08/01/20 20:10:47
>>917
どもども

921:デフォルトの名無しさん
08/01/20 22:08:28
今日からPython始めようと思うのだけれど
まずはチュートリアルを読めばいいのかな?

922:デフォルトの名無しさん
08/01/20 22:25:12
多言語を知っているのなら
でもそんな人はそんな質問しないだろうな

923:デフォルトの名無しさん
08/01/21 00:10:31
>>919
そうそう。Pythonはもう伸びない。
だからこんなに便利なプログラミング言語を使わなくていいよ。
今すぐ別の言語に移ってくれていいよ。

924:デフォルトの名無しさん
08/01/21 00:14:57
>>923
今の所、今年のキモレスNo1

925:デフォルトの名無しさん
08/01/21 00:16:44
>>924
もうPythonから離れていいよ。
100000万キロくらい離れていいよ。
むしろ二度と近寄らなくていいから。

926:デフォルトの名無しさん
08/01/21 00:18:29
>>925
子供はプログラミングじゃなくてお勉強してろ

927:デフォルトの名無しさん
08/01/21 00:31:54
暗いと不平を言うよりも、すすんであかりをつけましょう

928:デフォルトの名無しさん
08/01/21 00:41:06
>>926
日本語も満足にできない低脳はPythonを使わない方がいいよ。

929:デフォルトの名無しさん
08/01/21 00:46:07
100000万キロなんて今時小学生でも使わないだろ・・・

930:デフォルトの名無しさん
08/01/21 00:55:53
>921
チュートリアルよりお気楽 Python プログラミング入門ってのがいいと思うんだ

931:デフォルトの名無しさん
08/01/21 00:57:34
ガリレイの相対性原理も、アインシュタインの相対性理論も
破棄されました。!

21世紀の科学、物理学は支配の法則が支配する!!!!!

URLリンク(home9.highway.ne.jp)

932:デフォルトの名無しさん
08/01/21 04:32:37
初心者講座作れ!

933:デフォルトの名無しさん
08/01/21 06:32:20
すいません。質問させてください。
Pythonの拡張とかフレームワークみたいなのを使わないで、
jspやerbみたいにhtmlにコードを埋め込むことはできますか?
テーブル作るときにレコードを一行ずつprintするのが嫌で、
配列をhtmlに渡して、レコードの数だけ埋め込んだコードでループさせたいと考えています。
まだ勉強し始めたばかりで、パイソン流の方法がわからず苦労しています。
よろしくお願いします。

934:デフォルトの名無しさん
08/01/21 08:25:44
テンプレート

935:デフォルトの名無しさん
08/01/21 09:35:44
>>933
テンプレートエンジンをつかいましょう。
Rubyと違って、PythonにはERBみたいなのは付属しないので、自分でインストールする必要があります。
ERBみたいなのでよければ、MakoやTenjinあたりが高速です。
URLリンク(www.kuwata-lab.com)
に各種テンプレートエンジンへのリンクとベンチマークがあります。

936:デフォルトの名無しさん
08/01/21 20:27:54
>>935
やっぱり何かをインストールしないとできないのですね。
紹介していただいたTenjinを使ってみました。
欲しかった使い勝手は、まさにコレでした。
使うときもtenjin.pyだけあれば管理者でサーバーにインストールする必要もないですし、
Tenjinを使っていこうと思います。
良いアドバイスをいただき、ありがとうございました。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5394日前に更新/217 KB
担当:undef