Help us understand the problem. What is going on with this article?

僕はプログラミングができません① 〜言語処理100本ノック No.00-04〜

はじめに

タイトルのままです。
IT業界に関わっているのに全然かけない!
簡単なものなら読めるが複雑だと読めないし、何よりかけない
どうしてこうなったし...
このままでは恥ずかしすぎるので言語処理100本ノック 2015というとてもとても素敵な教材(東北大学の 乾・岡崎研究室のトレーニング教材)を見つけたので時間がかかるかもしれませんが挑戦してみた備忘録です。
恥ずかしコードですがお許しください。

環境

Python 3.7.1

00. 文字列の逆順

文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

a = 'stressed'
for i in range(len(a)):
    print(a[len(a)-i-1], end="")
print()
後日追記:こんな簡単な方法あるやんけ!!
a = 'stressed'
print(a[::-1]) ## -1で逆順

01. 「パタトクカシーー」

「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.

a = 'パタトクカシーー'
i = 0
for i in range(0,8,2): #1以上8未満の数字の中で2ずつ増える
    print(a[i], end ="")
print()
後日追記:こっちも一行でかけるやんけ!!
a = 'パタトクカシーー'
print(a[0:8:2])

02. 「パトカー」+「タクシー」=「パタトクカシーー」

「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.

a = 'パトカー'
b = 'タクシー'

for i in range(len(a)):
    print(a[i] + b[i], end="")
print()

03. 円周率

"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

a = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
mylist = list()
for i in a.split(" "):
    mylist.append(len(i.strip('.,')))
print(mylist)
# [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

04. 元素記号

"Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,
1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,
取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

a = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
mylist = list()
mydict = {}

# 単語を空白で分割し、カンマやコロンを削除
for i in a.split(" "):
    mylist.append(i.strip('.,'))

# 先頭1文字のリストを作る
num_list = [1, 5, 6, 7, 8, 9, 15, 16, 19] # コピペでHPのリストを貼り付ける
num_list = list(map(lambda x: x - 1, num_list)) # lambda関数で全部1引いたリストを作る

for i in range(len(mylist)):
    str = mylist[i]
    if i in num_list: # num_list番目の単語は先頭1文字
        atom = str[0]
    else: # それ以外は2文字
        atom = str[0:2]
    mydict[i+1] = atom
print(mydict)
#{1: 'H', 2: 'He', 3: 'Li', 4: 'Be', 5: 'B', 6: 'C', 7: 'N', 8: 'O', 9: 'F', 10: 'Ne', 11: 'Na', 12: 'Mi', 13: 'Al', 14: 'Si', 15: 'P', 16: 'S', 17: 'Cl', 18: 'Ar', 19: 'K', 20: 'Ca'}
後日追記

以下のようにstrにリストを格納していますが、これをすると
stringに変換するstrを実行するとエラーが発生する。
TypeError: ‘str’ object is not callable
これはstr()を呼び出したときに、変数strが呼ばれてしまってこのエラーがでる。
つまり、予約後を変数にするようなナンセンスなことをやってはいけないということですね。。。

str = mylist[i]

05. n-gram

与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,"I am an NLPer"という文から単語bi-gram,文字bi-gramを得よ.

!?

突然の宇宙語。突然球早くないっすか...
次回n-gramから...

※もしお気づきの点ありましたら、コメントいただけるとうれしいです!!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away