Python for XX in range(n)は0から始まるのか1から始まるのか

毎回忘れてしまうので、書いておきます。

結論から言うと、0から始まり、n-1で終わります。

n = 6
for x in range(n):
    print(x)
#0,1,2,3,4,5が出力される

どっちかというと、range()関数が何から始まるのか、という問題なんですけどね(^_^;

range関数に引数を一つだけ渡すと

「0を起点にし、引数より小さい整数までの数列を作成」

します。

Git ローカルにないリモートブランチに切り替えるコマンド

今更いうことでもないとは思うんですが、毎回ググってるので書いておきます。(^_^;
Gitクライアントが死亡しまくって、仕方なくGitをコマンドプロンプトから使っています。

git fetch

してからの

git checkout "ブランチ名"

です。
ブランチ名が、”hotfix”だとすると

git checkout hotfix

です。

Python リストの中に関数を書く

最初に、なんだ?これ… と思ったのが

counts = [self.Nsa[(s,a)] if (s,a) in self.Nsa else 0 for a in range(self.game.getActionSize())]

これ。

これ、リスト内包表記というらしいです。

そういえば、勉強会で聞いたことがあるぞっ!

リストの中で関数を実行して、その結果をリストの中に入れてリストを作成できる、夢のような仕組みです。

もうちょっと簡単な例がいいと思うので、下記の例です。

square = [x ** 2 for x in range(10)]
print(square)

#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] を出力

まず、for文の中で0~10までのカウントがされ、それが一つずつ二乗されてリストに収まります。

慣れればこの方が早い場合があるでしょうが、あんまり複雑なのは私は好きではありませんね!!(´ω`)

 

Python勉強し始めでJava、PHPとの違いメモ

Pythonを勉強し始めです。

日ごろ私が慣れ親しんでいる言語は、Java、PHP、Javascriptです。

Pythonをやり始めた時は、スクリプト言語だからPHPと似てるかな?と思ったのですが、
「なんでもオブジェクト」
というところはJavascriptと似てたりもしますね。

とりあえず、これは引っかかった!というポイントをメモっておきます。

①defステートメントの中で値が代入された変数は、defステートメントの中でのみ有効。
わかりにくい表現だと思うので、例を書きますね。

x=99;

def hogehoge():
    x = 100

hogehoge()
print(x)
#99が出力されます

②関数の呼び出し側のコードに、同じオブジェクトへのリファレンスを保持する変数があれば、関数と呼び出し側でオブジェクトを共有することになります。

def changer(x, y):
    x = 2
    y[0] = 'spam'

X = 1
L = [1,2]
changer(X, L)
print(X, L)

#1 ['spam', 2]が出力されます

上記の例で、Xについては、①で述べたように1のまま変わらないんですが、Lについては、変わっています。
わかりにくっ!

こういうことを防ぐために、copy() がよく使われます。

③ //は割り算! ほんと、それだけw

④クラスのメソッドは自分自身のインスタンスが既に代入されている

下記のように、メソッドの第一引数 self を渡す必要はありません。
selfはxが代入されているのです。

class NextClass:
    def printer(self, text):
        self.message = text
        print(self.message)

x = NextClass()
x.printer('hogehoge')
#hogehoge が出力される

下記の本で勉強してます。やっぱりオライリー。わかりやすい!
②、④のコードは下記本からの抜粋です。

minSdkVersionのバージョンを変更しなければならない時の対処法

「MinSdkVersion 15」の設定バージョンを上げなければならない時

エラー内容は、以下の通り

Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 18 declared in library [com.android.support.constraint:constraint-layout:2.0.0-alpha1] C:\android_project\MyApplicationCorrespond8\.gradle\caches\transforms-1\files-1.1\constraint-layout-2.0.0-alpha1.aar\19a62d69b4d9b53fc8a3cdd7d33c2cb6\AndroidManifest.xml as the library might be using APIs not available in 15
Suggestion: use a compatible library with a minSdk of at most 15,
or increase this project’s minSdk version to at least 18,
or use tools:overrideLibrary=”android.support.constraint” to force usage (may lead to runtime failures)

 

対応方法としては、二つ。

1、上記の内容は、minSdkVersionを「15⇒18」にしろと書いてあるので、gradleのファイルで、「MinSdkVersion 15」⇒「MinSdkVersion 18」にしたらOK!

2、もう一つの対処方法としては、「tools:overrideLibrary=”android.support.constraint”」を追記しろと書いてあるので、AndroidManifestに、下記のように記載するとOK!

<uses-sdk tools:overrideLibrary=”android.support.constraint”/>