毎日ちょっとPython ~ 6日目 ~

今日でリスト編終わらせたいが、VS Codeの環境を整えたかった。

VS CodeでPythonを動かせるようにしたい。

画像1

こんな感じでのファイルを実行すると以下のようなエラーが出る。

画像2

なんか実行できない。調査する。おそらく、moduleのパスがうまく読み込め内的な原因かもしれない。

Anacondaをダウンロードしているので、Anaconda側からVS codeをLaunchしてみた。

結果は変わらない。ですが、あっさり解決することができました。

今回のimportファイルは random というものを使って呼び出せない!というものでしたが、実は同じ階層に「random.py」というファイルが存在し、そのファイルをimportしてました。(やっちゃったー)

画像3

これが原因で、もともとのPythonのモジュールがうまく呼び出せなくなってしまっておりました。(反省)

ここをリネームすればOK

画像4

これで走るようになりました。VS Codeで作業できるので捗りそうです。
では書籍から学ぶ時間です。

リストは便利だよ

変数だけしか知らないとこんな感じでめんどくさいよね。

print('1匹目の猫の名前を教えてください')
cat_name1 = input()
print('2匹目の猫の名前を教えてください')
cat_name2 = input()
print('3匹目の猫の名前を教えてください')
cat_name3 = input()
print('4匹目の猫の名前を教えてください')
cat_name4 = input()
print('5匹目の猫の名前を教えてください')
cat_name5 = input()
print('猫の名前は次の通り:')
print(cat_name1+' '+cat_name2+' '+cat_name3+' '+cat_name4+' '+cat_name5)

結果はこんな感じ。

1匹目の猫の名前を教えてください
cat
2匹目の猫の名前を教えてください
dog
3匹目の猫の名前を教えてください
fish
4匹目の猫の名前を教えてください
みゃーこ
5匹目の猫の名前を教えてください
たま
猫の名前は次の通り:
cat dog fish みゃーこ たま

ただ、リストとループを知ってると便利だよってはなし

cat_names = []
while True:
   print('猫' + str(len(cat_names) + 1) + 'の名前を入力してください' + '(終了するにはEnterキーだけ押してください)')
   name = input()
   if name == '':
       break
   cat_names = cat_names + [name] #リストの連結
print('猫の名前は次の通り:')
for name in cat_names:
   print(' ' + name)

まぁこんな感じで入力できるだけ続けるものが作ることができる。

気になったこと

少し気になったのは、配列に入れるときの入れ方
見慣れてないだけなのかもしれないですが、なんか直観的じゃないんですよね。イメージこんな感じで書いた。

cat_names = cat_names + [name] #こうじゃなくて
cat_names[len(cat_names)] = name #こっちのほうが感覚的にはよさそう

ただ、ちゃんと動かなかった。

Traceback (most recent call last):
File "d:/Python/ver2/allMyCat2.py", line 9, in <module>
cat_names[len(cat_names)] = name
IndexError: list assignment index out of range

IndexErrorが出ました。なんだろう。初期化時点で cat_names = [] でなのでcat_names[0] は要素が存在せずアクセスすることができないためにこのエラーになっているのかなぁ...。詳しい人教えてください。

ループとリストも相性は当然いいよね

forループのテンプレはこんな感じ

supplies = ['pen','staplers','flame-throwers','binders']
for i in range(len(supplies)):
   print('Index' + str(i) + 'in supplies is : ' + supplies[i])

for i in range(len(リスト名)): みたいな感じかしら。

in , not inは便利

リストのin , not in 便利

in - リストにあれば True , なければ False
not in - リストになければ True, あったら False

index_list = ['hello','hi','howdy','heyas']
print('howdy' in index_list) #True
print('cat' in index_list) #False
print('howdy' not in index_list) #False
print('cat' not in index_list) #True

複数代入法

これ使うのかしら。でも面白い書き方ですね。いや便利だな。

# まぁ一般的にはこう書くよね
cat1 = ['太い','黒','うるさい']
size1 = cat1[0]
color1 = cat1[1]
disposition1 = cat1[2]

print(size1 + ' ' + color1 + ' '  + disposition1)

# Pythonだとこんな感じで書ける
cat2 = ['太い','黒','うるさい']
size2,color2,disposition2 = cat2

print(size2 + ' ' + color2 + ' ' + disposition2)

ちなみに、変数の数とリストは一致している必要があるそうです

cat2 = ['太い','黒','うるさい']
size2,color2,disposition2,name2 = cat2
size2,color2 = cat2

長くても、短くてもエラーなります
ValueError: not enough values to unpack (expected 4, got 3)

累算代入演算子

まぁ便利よね。

spam += 2 #spam = spam + 2
spam -= 2 #spam = spam - 2
spam *= 2 #spam = spam * 2
spam /= 2 #spam = spam / 2
spam %= 2 #spam = spam % 2

append() と insert()

appendはリストの末尾に追加していく
insertは、

第一引数 - どこに入れたいか
第二引数 - 何の値を挿入するか

になります。

spam1 = ['cat','dog','bat']
spam1.append('moose')
print(spam1)
# 結果はこんな感じ -> ['cat', 'dog', 'bat', 'moose']


spam2 = ['cat','dog','bat']
spam2.insert(1,'chicken')
print(spam2)
# 結果はこんな感じ -> ['cat', 'chicken', 'dog', 'bat']

remove()メソッド

特定の値を消せます

spam = ['cat','bat','rat','elephant']
spam.remove('bat')
print(spam)
# 結果はこんな感じ -> ['cat', 'rat', 'elephant']

リストに複数存在する場合は、一番最初のものを削除します。

spam = ['cat','bat','rat','elephant','cat','dog','cat']
spam.remove('cat')
print(spam)
# 結果はこんな感じ -> ['bat','rat','elephant','cat','dog','cat']

一括削除はこんな感じ

spam = ['cat','bat','rat','elephant','cat','dog','cat']
while 'cat' in spam:
   spam.remove('cat')
print(spam)
# 結果はこんな感じ -> ['bat', 'rat', 'elephant', 'dog']


del と remove()の違い

del は、削除したいindexがわかっているとき
remove() は、削除したい値がわかっているとき

sort() メソッド

数のリストや文字列のリストは sort() メソッドを使ってソートできる
reverse=True というオプションで降順にできる。

spam = [2,5,3.14,1,-7]
spam.sort()
print(spam)
# 結果はこんな感じ -> [-7, 1, 2, 3.14, 5]

spam = ['ants','cats','dogs','badgers','elephants']
spam.sort()
print(spam)
# 結果はこんな感じ -> ['ants', 'badgers', 'cats', 'dogs', 'elephants']

spam = ['ants','cats','dogs','badgers','elephants']
spam.sort(reverse=True)
print(spam)
# 結果はこんな感じ -> ['elephants', 'dogs', 'cats', 'badgers', 'ants']

おわり

最後に

ちょっと今日時間かかりすぎたので、この辺で終了。

この記事が気に入ったらサポートをしてみませんか?