tomの開発メモ

pythonやrubyやjavascript他の学習をメモしていく日記。その他、デイリーで起こったことの殴り書き。

ruby基礎のメモ(3)

hash

pythonでいうならdictionary。

h={'one'=>1,'two'=>2,'three'=>3}
puts h
puts h['three']

出力は以下。
{"one"=>1, "two"=>2, "three"=>3}
3

num={a:1,b:2,c:3,d:4,e:5}
num.each { | k, v | puts "key is #{k} ,and value is #{v}"}

出力は以下。
key is a ,and value is 1
key is b ,and value is 2
key is c ,and value is 3
key is d ,and value is 4
key is e ,and value is 5

num={a:1,b:2,c:3,d:4,e:5}
num.each { | k, v | num.delete(k) if v>=3} 
puts num

出力は以下。
{:a=>1, :b=>2}

num={a:1,b:2,c:3,d:4,e:5}
num2=num.select{ |k, v | v.odd?}
puts num2

出力は以下。
{:a=>1, :c=>3, :e=>5}

class

class User
  def initialize(name)
    @name = name
  end
    
  def get_name
    @name
  end
end

user = User.new("jose")
puts user.get_name

joseが返ってくる。

クラスのインスタンスをを生成するには.new()メソッドを使う。
initialize メソッドがある場合は、new メソッドを使うと必ず呼ばれる。

クラスのイニシャルは大文字。

class Book
  attr_accessor :title, :price
  
  def initialize(title, price)
    @title = title; @price = price
  end
end
 
book = Book.new("Programming Ruby", 1980)
puts book.title
puts book.price

Programming Ruby
1980

と出力される。
attr_accessorメソッドは、クラスやモジュールにインスタンス変数を読み書きするためのアクセサメソッドを定義する。

class Book
  attr_accessor :title, :price
  
  def initialize(title, price)
    @title = title; @price = price
  end
end
 
book = Book.new("Programming Ruby", 1980)
book.price = 2000
puts book.price

2000

と出力される(1980から2000にアップデートされている)。

ruby基礎のメモ(2)

先日の続き。

リスト

a=[1,2,3,4,5]
a.include?(10)

これだと、Falseが返ってくる。aに10が含まれている場合はTrue。
なので、当然、

a=[1,2,3,4,5]
a.include?(1)

とすれば、Trueが返ってくる。

a=[1,2,3,4,5]
a.reverse!
puts a

reverse!メソッドは配列の要素の順番を反転させる。レシーバ自身を変更するメソッドで、戻り値はレシーバ自身。
返ってくるのは、
[5, 4, 3, 2, 1]
となる。

a=[1,2,3,4,5]
a.reverse
puts a

返ってくるのは
[1, 2, 3, 4, 5]
となる。「!」がない場合、レシーバ自身は変更なし。

リファレンスも参照
https://docs.ruby-lang.org/ja/search/version:2.4.0/class:Array/query:reverse/

b=(0..15).to_a

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
と、0から15までのArrayができる。to_a = to array。

b<<25

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 25]
のように、末尾に25が追加される。

その他、リストへの追加や削除はリファレンスを参照。
https://docs.ruby-lang.org/ja/search/version:2.4.0/class:Array/query:push/

c=[1,2,3,4,5,3,2]
puts c
c.uniq!
puts c

返ってくるのは以下のとおり。uniqで重複を省ける。
[1, 2, 3, 4, 5, 3, 2]
[1, 2, 3, 4, 5]

name = ["suzuki","tanaka","okada","yamada"]
name.each do |i|
  puts "hello,#{i.capitalize}-san!"
end

返ってくるのは以下。
hello,Suzuki-san!
hello,Tanaka-san!
hello,Okaada-san!
hello,Yamada-san!

name = ["suzuki","tanaka","okada","yamada"]
name.each { |i| puts "hello,#{i.capitalize}-san!"}

同じ結果が返ってくる(1 lineで書くことができる)。

y=(0..20).to_a
y.select{|i| i.odd?}

返ってくるのは以下。selectで、false を返した要素を自身から削除。
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

a=["My","NAME","IS","TARO"]
a.join(":")

出力は以下。
"My:NAME:IS:TARO"

ruby基礎のメモ(1)

それなりに時間をとって勉強し直すことにしたので、知っていること・わかっていると思うことでも書き起こし。

ダブルクォーテーションとシングルクォーテーション

name = "suzuki"
puts("#{name}")
puts('#{name}')

出力すると以下になる。singleだと、そのままの文字列を返す。

suzuki
#{name}

printとputs

print 'hello (print)' # 改行なし出力
puts 'hello(put)' # 改行あり出力

出力すると以下になる。コメントの通り、改行が入るか、そうでないか。

hello (print)hello(put)

数値処理関連

22.odd?
22.even?

それぞれ、False,Trueで返ってくる。直感的。

x = "10"
y = 10

# 変数xを数値に変換し、5を足して出力
puts x.to_i + 5

# 変数yを文字列に変換し、文字列と連結したものを出力
puts y.to_s + ""

出力は以下になる。s=string,i=int。

15
10人
5.times{print'321:'}

出力は以下になる。{}の中を5回繰り返す、ということ。

321:321:321:321:321:

メソッド

def multiply(n,m)
  n.to_f * m.to_f
end

puts multiply(5,4)

def hogehoge のあとにPythonのような「:」はいらない。return hoge もなくてOK。endは必要。
出力は「20.0」になる。

IF

prompt = gets.chomp

if prompt=="1"
  puts("1 selected")
  
elsif prompt=="2"
  puts("2 selected")
  
else 
  puts("invald")
  
end

promptに入力された条件によって分岐。

phpを(ようやく)初めて学習した(2)

if文の書き方

<?php
$role="admin";
$pos="president";

if ($role=="admin" && $pos=="president") {
  echo "you are admin & president";
}else {
  echo "you are NOT admin";
}

 ?>

アンドの条件は「&&」として二つ重ねる。
(上記出力は、you are admin & president)

<?php
$role="admin";
$pos="stuff";

if ($role=="admin" || $pos=="president") {
  echo "you are admin & president";
}else {
  echo "you are NOT admin";
}

 ?>

orの場合は「||」を二つ重ねる。
(上記出力も、you are admin & president)

for文の書き方

<?php
for ($i=0; $i <10 ; $i++) {
  echo $i.",";
}
 ?>

出力は
0,1,2,3,4,5,6,7,8,9,
となる。
インクリメントは「++」

<?php
for ($i=20; $i >0 ; $i--) {
  echo $i.",";
}
 ?>

デクリメントは「--」。出力結果は以下になる。
20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,

<?php
for ($i=10; $i >=0 ; $i--) {
  if ($i==0) {
      echo $i;
  }else {
      echo $i.",";
  }
}
 ?>

forとifを組み合わせる。出力は以下になる。
10,9,8,7,6,5,4,3,2,1,0

<?php
$group = array("tanaka","suzuki","toyota","matsuda");

for ($i=0; $i <sizeof($group) ; $i++) {
  echo $group[$i].";";
}
 ?>

arrayとforを組み合わせる。長さを動的にするにはsizeofを使えばよい。出力は以下になる。
tanaka;suzuki;toyota;matsuda;

<?php
$group = array("tanaka","suzuki","toyota","matsuda");

foreach ($group as $key => $value) {
  echo $key.";".$value.",";
}
 ?>

foreachの使い方。出力は以下。
0;tanaka,1;suzuki,2;toyota,3;matsuda,

while文の書き方

<?php
$a = 0;
while ($a <= 10) {
  echo $a.",";
  $a++;
}

 ?>

出力結果は以下の通り。
0,1,2,3,4,5,6,7,8,9,10,

phpを(ようやく)初めて学習した(1)

これまでwordpressをいじったことはあっても、基礎を知らないまま、ググってわかる程度のカスタマイズをしてきたけども、色々と苦しくなってきたので最初から学ぼうと思う。

<?php
$name="suzuki";
echo $name;
?>

$で変数の宣言。echo = print。
上記の例だと、suzukiが表示されることになる。

<?php
$num = 10;
$calc=$num + 5;
echo $calc;
 ?>

出力は「15」。計算もできる。

<?php
$num = 10;
$calc=$num + 5;
echo "$calc";
 ?>

これも同じ結果。「"」はあってもなくてもいいの?
よくわからんけど、あとで調べる。

<?php
$bool1=true;
$bool2=false;

echo "$bool1";
echo "$bool2";
 ?>

「1」だけが出力される。
true=1、だが、falseはnullで、何も出力されない。

<?php
<?php
$myarray = array("suzuki","tanaka","abe","inoue");
print_r ($myarray);
 ?>

Array ( [0] => suzuki [1] => tanaka [2] => abe [3] => inoue )
と返ってくる。print_r = print readable。
アレイの中を個別にとってくるには、以下のようにすればよい。

<?php
$myarray = array("suzuki","tanaka","abe","inoue");
echo "$myarray[2]";
 ?>

abeが出力される。


連想配列 arrayX["key"]="value
間を飛ばしても問題ない。文字列が混ざってもよい。

<?php
$array2[0]="taro";
$array2[1]="jiro";
$array2[3]="saburo";
$array2[6]="shiro";
$array2["myson"]="takashi";

print_r($array2);
 ?>

Array ( [0] => taro [1] => jiro [3] => saburo [6] => shiro [myson] => takashi )
と出力される。

<?php
$array3=array("apple" => "リンゴ", "orange" => "ミカン", "grape" => "ブドウ");

echo sizeof($array3);
 ?>

上記で出力される結果は3。
array関数でarrayをセット。
sizeof(hoge)は、イコールlenと同じ働きをする。

<?php
$array3=array("apple" => "リンゴ", "orange" => "ミカン", "grape" => "ブドウ");

echo sizeof($array3);
echo "<br>";
print_r($array3);

echo "<br><br>";

unset($array3["orange"]);
echo sizeof($array3);
echo "<br>";
print_r($array3);

 ?>

3
Array ( [apple] => リンゴ [orange] => ミカン [grape] => ブドウ )

2
Array ( [apple] => リンゴ [grape] => ブドウ )

と出力される。unsetで値をクリアできる。

SQL初心者向けな練習サイト

SQLをよくよく考えてみると、経験はあるものの、体系的に学習した覚えがない。
必要な物事は全て実務でやって覚えてきた。

そんなわけで、SQLの初心者に向けて使えそうなサイトを見つけて、復習がてら遊んでみた。

今回試したのは以下のサイト
www.codecademy.com

ユーザー登録は必要、英語も必要(だけど難しい英語は何一つとしてない)。sqliteを使用。

SELECT * FROM table_name;

table_nameテーブルから全てのフィールドを選択

SELECT column1, column2, ...
FROM table_name;

先ほどとは逆に、指定したテーブルのフィールドを選択

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);

データベースに新しいテーブルを作る。
columnXはカラム名のこと。IDとか、nameとかが、実務上では入ってくると思う。
datatypeは、integerとか。詳しくは「(DB名) datatype」とかでググってみる。

INSERT INTO celebs (id, name, age) VALUES (1, 'Justin Bieber', 21);

insert文。

INSERT INTO (table_name) (hoge1,hoge2,hoge3) values(fuga1,fuga2,fuga3)
みたいな感じで、hogeカラム名、fugaはinsertされるパラメータ。

UPDATE celebs 
SET age = 22 
WHERE id = 1; 

UPDATEでcelebsってテーブルを指定する。
SETで編集するカラム名を指定して、更新後の値をイコールのあとに入力する。
WHEREで更新するrowを指定する。上記の例だとカラム名がIDで、ID=1のレコードが22に更新されることになる。

ALTER TABLE celebs 
ADD COLUMN twitter_handle TEXT;

ALTER TABLEでテーブルを指定する。
ADD COLUMN X Y でXには追加するカラム名、Yにはデータタイプを指定する。

DELETE FROM celebs WHERE twitter_handle IS NULL;

DELETE FROM テーブル名、
WHERE以下で、twitter_handleってカラムがIS NULLのレコードを指定して、削除。


一通り(10問)終えると、クイズがある。スキップも可能。


どうやら、無料では10問解き終えたら終わりな様子。有料(プロ)ではもっと多くの問題があるけども。
簡単でした。もうちょっと歯ごたえあるものを探そう。

jupyter notebook起動時に自動でブラウザが開かなくなった

昨日の話。

 

macbookでjupyter notebookを開こうと思ったところ、何故か開かず。

ググってみたところ、以下がヒット。

 

qiita.com

 

mac osのアップデートが原因と思われる、とのこと。

 

で、対処法も書いてあるけど、個人的には色々と弄るのも面倒だったので

(そのうち対処されるでしょ?という思いもあり)

http://localhost:8888/

chromeのブックマークに入れて、jupyter notebookを起動→ブクマ押下、みたいに対応。

 

当面はこれでいいかなあと。jupyter notebook起動と同時にブラウザが開かなくても、さほどの手間でもないし。