PythonとRubyの比較


PythonRuby
NULL
None
nil
加算
1+2
1+2
減算
1-2
1-2
乗算
1*2
1*2
累乗
2**3
2**3
除算
3/1
3/1.to_f
切り捨て除算
3//2
3/2
剰余演算
3%2
3%2
コメント
#foo baz
#foo baz
Boolean
True,False
true,false
小なり, 大なり
<, >
<, >
または, かつ
|,or #または
&,and  #かつ
|,||,or #または
&,&&,and  #かつ
同値
3==4,3 is 4
3==4,3===4
同値ではない
3!=4,3 is not 4
3!=4
否定
not
!,not
ある範囲内に存在するか
1 in range(5)
(0...5)===1
#一見中置演算子に見え,交換法則が成り立ちそうであるが
#実はメソッドであるため,交換法則は成り立たない
型の判定
isinstance(1,int)
Integer===1
変数宣言
i=1
i=1
定数宣言
ない
FOO=1
#英字大文字で始まれば定数
Hello,World
print("Hello,World")
#かっこはなくてはならない
print("Hello,World\n")
#かっこはなくてもよい
#puts("Hello,World")やprintf("Hello,World\n")でも可
構文の中身の判断
インデントで判断
endで判断
関数宣言
def foo():
    pass

def foo()
end
再帰関数
def foo():
    foo()

def foo()
    foo()
end
if
if i==0:pass
elif i==1:pass
else:pass
#戻り値はなし
if i==0 then 
elsif i==1 then
else
end
#戻り値は最後に評価した式の値 or nil
whileで5回ループ
i=0
while i<5:
    i++
#戻り値はなし
i=0
while i<5 do #doはなくてもよい
    i++
end
#戻り値はnil
forで5回ループ
for i in range(5):
    pass
#戻り値はなし
for i in 0...5 do #doはなくてもよい
end
#戻り値は0...5
無限ループ
while True:
    pass

loop do
end
ループ中にbreakしたら実行されないHello,Worldの記述
for i in range(5)
    pass
else
    print("Hello,World")
if( for i in 0...5
end != nil) then
    print("Hello,World\n")
end
switch
if n==1:
    pass
elif n in range(2,5):
    pass
else: #defaultに相当
    pass
case n
when 1 then
when 2...5 then
else #defaultに相当
end
#case式の条件評価は===演算子で行っている
#戻り値は戻り値は最後に評価した式の値
整数を保存するデータ型
int型のみ,データ長制限はメモリサイズ
Integer型のみ,データ長制限はメモリサイズ
小数を保存するデータ型
float型のみ,C言語のdoubleで実装されている
Float型のみ,C言語のdoubleで実装されている
その他の数値を保存するデータ型
複素数を保存するcomplex型がある
複素数を保存するComplex型と,
有理数を保存するRational型がある
配列の宣言と,添え字番号の要素へのアクセス
a=[1,2,3]
a[2]
#実際はリスト
a=[1,2,3]
a[2]
#実際はArrayオブジェクト
リストの作成
l=[]
#l=list()でも可
l=[]
#l=Array.new()でも可
要素が全て1で長さが3のリストの作成
l=[1,1,1]
#l=[1 for i in range(3)]やl=list((1,1,1))でも可
l=[1,1,1]
#l=Array.new(3,1)でも可
要素が(添え字番号+1)の二乗で長さ3のリストの作成
l=[(i+1)**2 for i in range(3)]
Array.new(3){|i|(i+1)**2}
リストの第2要素の後ろに整数要素5の追加
l.insert(2,5)
l.insert(2,5)
リストの第2要素の削除
l.pop(1)
l.delete_at(1)
sに入っている文字列のコピー
t=s
t=s
文字列のサイズ取得
len("Hello")
"Hello".size() #かっこはなくてもよい
#"Hello".length()でも可.同様にかっこはなくてもよい
文字列の連結
"Hello"+"World"
#変数がない部分のみ,+演算子は省略可能
"Hello"+"World"
#変数がない部分のみ,+演算子は省略可能
構造体
class foo:
    def __init__(self,a=None,b=None):
        self.a=a
        self.b=b
#メソッドのないクラスを構造体のように扱うことができる
class Foo  #Rubyのクラス名は英字大文字から始まらなければならない
    def initialize(a=nil,b=nil)
        @a=a
        @b=b
    end
    attr_accessor:a
    attr_accessor:b
    #Rubyのクラスメンバは全て外からの直接アクセスは不可能
    #なのでattr_accessor:でアクセスできるようにしている
end
#メソッドのないクラスを構造体のように扱うことができる
読込み専用モードでのファイル読み込み
f=open("FileName","r")
#使い終わったファイルはclose()しなければならない
#この例の場合の記述はf.close()
f=File.open("FileName","r")
#使い終わったファイルはclose()しなければならない
#この例の場合の記述はf.close()
close()を自動でしてくれるファイル読み込み
with open("FileName","r") as f:
    pass
#with文を抜けると自動的にf.close()される

#f = open("FileName","r")
#with f:
#    pass
#でも可
File.open("FileName", "r") do |f|
end
配列aの内容を一行ずつファイルに書き込み
with open("FileName","w") as f:
    for i in a:
        f.write(str(i))
        f.write("\n")
File.open("FileName", "w") do |f|
    for i in a
        f.write(i)
        f.write("\n")
        #この二つは合わせてf.puts(i)と等価
    end
end