変数、名前、オブジェクトについて

pythonでは、ブール値、整数、浮動小点数、文字列、関数、プログラムなどの全てがオブジェクトとして実装されています。
オブジェクトとはなんぞやという前に、こいつのおかげで、他の言語にはないような一貫性を持っているのがPythonです。

オブジェクトについて

オブジェクトとは、データを入れてある透明なプラスチックボックスのようなものだと思えば良いです。
オブジェクトにはブール値、整数などの****
データ型があり、そのデータで何ができるのかはによって決まります。
プラスチックボックスにワレモノと書かれていたら、それがどんなものなのかだいたい想像がつくのと同じようなことだと思えば良いです。
は、ボックスに入っているデータの値を変更できるかできないかも決められます。つまり、箱の中身を取り出して差し替えても良いかどうかですね。
これをミュータブル(変更可能)、イミュータブル(変更不可)と言います。
Pythonははっきりとした言語で、強く型付けされています。
これを英語で
Strong typingと言うらしいけど、強くキーボードを叩けと言う意味じゃない。

a=7
print(a)

“`7
“`

これはaと言う変数に7を代入したものになる。変数はただの名前ということに注意。
名前は、値そのものではなく、値の参照としての意味を持つ。
透明なボックスの表にaというラベルを貼り、中には7という数が転がっている感じ。
この箱に、bというラベルも貼りたければ、貼ることができる。

a=7
b=a
print(b)

“`7
“`

例えばコーディングをしている時にaってなんの型だったっけという場合は次のように確認することができる。

type(a)

“`class ‘int’“`

intというのは、整数値のことを指します。

変数として使えるのは次の文字列のみ

a-zの小文字

A-Zの大文字
数字の0-9
アンダースコア’_’

ハイフンは使えないので注意。
もう一つ、変数の頭に数字は使えない。あくまで、途中や終わりに付与できる。
また、FalseやNoneなどのPythonにもともと指定されている予約語にを変数として使うことはできない。

数値について

pythonには、整数や浮動小点数のサポートが組み込まれています。だから浮動小点数ってなんやねん。
浮動小点数とは、例えば1.12345とか、1.86e4です。普通の小数有りの実数だと思えばいいのね。たぶん。
数値同士を演算するための演算子は次に通りです。

“`+:加算
-:減算
*:乗算(掛け算)
/:除算(割り算)
//:整数の割り算(切り捨て)
%:剰余(余り) 例)7%3 1
**:指数 例)3**4 81
“`

基数について

整数は特別指定しない限り、10進数とみなさます。
Pythonでは、10進数以外に3種類の基数を置くことで2進数と、8進数と16進数を表現することができます。

“`0または0B=2進数
0oまたは0O=8進数
0xまたは0X=16進数
“`

0b10
2
0o10
8
0x10
16

と行った感じになる

型の変換

浮動小点数を整数に変換すると、小数点以下の部分が切り捨てられ、整数になります。

int(98.1231231)
98

また、整数を整数に変換しても整数です。

int(98)
98

文字列は当然ながらintにできない
Pythonでは、64bit以上の数字を入力しても整数オーバーフローとならない。
Pythonでは、途方もなく大きな数字を表現できるようになった。

文字列について

文字列はシングルクオート(’)か、ダブルクオート(“)で囲んで書く。

もし複数行で書きたい場合は、このようにする

'''
ほにゃららら
'''
もしくは、
"""
ほにゃらす
"""

これをトリプルクォートというらしい。

ちな空文列**というものが存在する。

これは、空の文字列、つまり「なにもない」という文字列である。

''
''
""
''
''''''
''
""""""
''

これはNoneとは違い、ちゃんと存在する文字列だということに注意。

##エスケープについて

Pythonでは、バックスラッシュ(\)を使うことで、特別な表現ができる。

(これは、他の言語でもよく使われている。)

たとえば、「\n」は改行を表す。

y

print('いろはにほへと\nちりぬるを\nわかよたれそ\nつねならむ')
いろはにほへと
ちりぬるを
わかよたれそ
つねならむ

文字列の連結

文字列は+で連結させることができる。

print('あかさたな'+'はまやらわ')
あかさたなはまやらわ

文字列は、*を使うことで繰り返し表現できる。(引き算や割り算はできないのにややこしい・・・)

print('あかさたな'*5)
あかさたなあかさたなあかさたなあかさたなあかさたな

文字列の抽出

[]を使うことで、文字列の何番目にある文字を取り出すことができる。

wa='あかさたなはまやらわ'
print('wa[1]')
か

ここで、1としたのに「か」が表示されたのに

は理由がある。Pythonでは、番号は0からカウントする。

1番目なら、0。2番目なら1といった感じ。(これがややこしい

文字列の数以上の数字を指定するとエラーになる。

文字列の置き換え

replace() を使うことで、文字列を変換することができる。

個人的にはこれが結構便利で、スクレイピング(webページから情報を抽出する作業)の時にも、いろいろと役に立つ。

.replace('変換させたい文字列','変換後の文字列')

という風に使う。たとえば、

wa='あかさたなはまやらわ'
print(wa.replace('あか','きいろ'))
きいろさたなはまやらわ

文字列のスライス

[start:end:step]を使うことで、文字列をどこからどこまでかつ何文字飛んでという取り出し方が可能になる。

alpha='abcdefghijklmnopqrstuvwxyz'
print(alpha[0:10])
abcdefghij
print(alpha[5:12])
fghijkl
print(alpha[:])
abcdefghijklmnopqrstuvwxyz #全部という意味になる
print(alpha[::1]) #全部一つずつ=全部
abcdefghijklmnopqrstuvwxyz
print(alpha[::2]) #1つおきに
acegikmoqsuwy
print(alpha[2:19:2]) #2つ目から18番目まで1つおき
cegikmoqs

ここでん?となる。カウントは0が1番目なのに、[0:19]とした場合に18番目までしか表示されない。

これが僕の頭を悩ませている問題の一つで、[x:y]とした場合日本語に直すと、x+1番目から、y-1番目までということになる。

さらに[-x:]とか指定すれば末尾からとか指定できるんだけど、この場合〜番目がまたルール違ってくるのでお手上げ。バカな僕は多分二度と使わないでしょう。

len() による長さの取得

len() を使えば、文字列の長さ(=文字列の数)を取得することができる。

これもよく使うことになるので必須。

alpha='abcdefghijklmnopqrstuvwxyz'
print(len(alpha))
26

これでa-zまでが26文字だということがわかった。

これはどんな時に便利かというと、後ででてくるリスト( list )でよく使う。

リストは簡単にいうと、リストである(意味不明

alpha=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

これはa-zまでを一文字ずつ格納したリストだ。
これが、たとえば適当に抽出してきたリストで、いったい幾つ要素が含まれているのかわからない時に、

print(len(alpha))
26

文字列の分割

split() を使うと、文字列を特定の条件にしたがって分割し、リストにすることができる。

alpha='いろはにほへと ちりぬるを わかよたれそ つねならむ'
print(alpha.split(' '))
['いろはにほへと', 'ちりぬるを', 'わかよたれそ', 'つねならむ']

ちなみに、list() を使うことでもリスト化は可能。しかし、こちらは1文字ずつがリスト化されてしまう。

print(list(alpha))
['い', 'ろ', 'は', 'に', 'ほ', 'へ', 'と', ' ', 'ち', 'り', 'ぬ', 'る', 'を', ' ', 'わ', 'か', 'よ', 'た', 'れ', 'そ', ' ', 'つ', 'ね', 'な', 'ら', 'む']

気をつけなければならないのは、間のスペースも一つの文字として勘定されてしまうこと。

join() による結合

またこの逆にjoin() を使ってリスト化された文字列を結合することができる

#こいつがまたややこしい。
alpha='いろはにほへと ちりぬるを わかよたれそ つねならむ'
a=alpha.split(' ')
print(a)
['いろはにほへと', 'ちりぬるを', 'わかよたれそ', 'つねならむ']
print('@'.join(a))
いろはにほへと@ちりぬるを@わかよたれそ@つねならむ

これはつまり、”で囲まれた文字列を、リストを取っ払った間に入れて結合するぜ!という意味になる。

なので元どおりに半角スペースでいろはをなおしたければ、’ ‘.join(a)といった感じにすれば良い。

なんで逆にしたんだろうね。普通にa.join(‘文字列’)でいいじゃんかよ・・・。

という感じで、本日は終了。

練習問題

a=’abcdefghijklmnopqrstuvwxyz’
という文字列をaの変数で定義する。この文字列の間に「@」を挿入し、さらに「@」を「,」に直しなさい。

ansewer

解答

print('@'.join(list(a)).replace("@",","))

“`a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z“`

【レベル1】dictionary機能を使ってみる

練習問題

dictionary(辞書)機能を使って、初代ポケモンの御三家のタイプを検索するプログラムをかなさい。

この問題を解くのに必要な知識

解説

(なぜかh1タグ打つと落ちる・・・)
dictionaryは以下のように書きます。

dictionary={"a":"1","b":"2","c":"3"}

したがって、初代ポケモの名前をキーに、タイプを値に
dictionary を用いて書くと以下のようになります

poke={'フシギダネ':'くさタイプ','ヒトカゲ':'ほのおタイプ','ゼニガメ':'みずタイプ'}

参照の仕方

あれ、ヒトカゲって何タイプだっけそんな時は

print(poke['ヒトカゲ'])

“`ほのおタイプ
“`

でてきましたね。なので、これでこの問題は終了です。

解答

poke={'フシギダネ':'くさタイプ','ヒトカゲ':'ほのおタイプ','ゼニガメ':'みずタイプ'}
print(poke['ヒトカゲ'])

【レベル1】pickleでバイナリデータを読み書きする

練習問題

pickle モジュールを使い、 “Hello, world!”を読み書きしなさい。

解説

pickleモジュールを使うと、Pythonのデータ構造(タプルとかリストとかクラスの要素)をバイナリデータで保存できます。

import pickle
p=pickle #便宜をはかるため
f=open("sample.pickle", mode="wb")

これで、sample.pickleというファイルを呼び出すことができます。
データの放り込みは、放り込みだけにdump() を使います。

 p.dump("Hello, world!",f)

ファイルを閉じます

f.close()

今度は、読み込みモードで呼び出します。

f=open("sample.pickle", mode="rb")
p.load(f)

“`”Hello, world!”
“`

データを読み込むことができましたね!

解答

import pickle
p=pickle
f=open("sample.pickle",mode="wb")
p.dump("Hello, world!",f)
f.close()
f=open("sample.pickle",mode="rb")
p.load(f)

以上です。

【レベル1】プレースホルダーで苗字と名前を入力・表示させる

練習問題

苗字と名前をそれぞれ入力させ、「私の名前は[苗字] [名前]です。と表示させるプログラムを書きなさい。」

この問題を解くのに必要な知識

解説

まず苗字と名前を順番に入力させます。

family_name=input('苗字:')
first_name= input('名前:')

次に、入力した内容を挿入させるプレースホルダー を記述します。

print("私の名前は、%s %sです。" % (family_name,first_name))

解答

family_name=input('苗字:')
first_name= input('名前:')
print("私の名前は、%s %sです。" % (family_name,first_name))

【レベル4】Pythonでワードプレスに記事を読み書き投稿するプログラム

練習問題

wordpress_xmlrpcを使ってワードプレスに投稿するプログラムを書きなさい。

この問題を解くのに必要な知識

特になし

解説

ワードプレスに投稿するライブラリが存在します。
これは、ワードプレスサイトの

“`xmlrpc.php“`

というphpページにアクセスして投稿できるようにしたものらしいですが、詳しいことはわかりません。素人だもの。
一つ明らかなのは、こいつをpipでモジュールとしてインストールすれば、Pyhonからワードプレスに記事が投稿可能になるということです。

python-wordpress_xmlrpcのインストール

まずはターミナル(Windowsならコマンドプロンプト)を開いて、

pip install python-wordpress-xmlrpc

これでモジュールのインストールが完了しました。

モジュールのインポート

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo

ここから具体的に投稿条件を記述していきます。

wp = Client('http://[サイトのアドレス]/xmlrpc.php', 'ユーザー名', 'ログインパスワード')
post = WordPressPost()
post.title = 'タイトル'
post.content = 'ここに投稿内容'
post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
post.status='publish'
wp.call(NewPost(post))

[サイトのアドレス][ユーザー名][ログインパスワード]を入れれば、すぐに投稿できます。
一応は、使い勝手が悪すぎますが、Pythonからワードプレスみ投稿する環境ができました。

解答

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo

wp = Client('http://[サイトのアドレス]/xmlrpc.php', 'ユーザー名', 'ログインパスワード')
post = WordPressPost()
post.title = 'タイトル'
post.content = 'ここに投稿内容'
post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
post.status='publish'
wp.call(NewPost(post))

ただこれでは使い勝手が悪すぎます。
もう少し変数を定義してすっきりさせましょう。

練習問題

新規にテキストファイルを作成し、随時書き込み、保存したファイルを読み出し、その内容をワードプレスに投稿するプログラムを書きなさい。

この問題を解くのに必要な知識

  • open() 関数
  • while文
  • 使い勝手をよくしてみる。

    importの部分は省きます
    プレースホルダー を使うと便利です

    url='[サイトのアドレス]'
    username='[ユーザー名]'
    password='[パスワード]'
    wp = Client('%s' % url, '%s' % username, '%s' % password)
    post = WordPressPost()
    post.title = 'タイトル'
    post.content = 'ここに投稿内容'
    post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
    post.status='publish'
    wp.call(NewPost(post))
    

    タイトルと本文をinput() 形式で入力できるようにする。

    input() を使えば、楽にタイトルと本文を挿入することができます。

    p_title=input('タイトル名:')
    p_content=input('本文:')
    
    post.title=p_title
    post.content=p_content
    

    これで少しは楽になりました。試しに実行してみると、タイトルと本文を入力すれば投稿することができますね。
    しかしこれではinputが一行しか入力できないので、困ったものです。
    endと入力するまで続けてかけるようにします。

    input() で複数行の入力

    while文 でinput() を繰り返します。
    whileは便利です。個人的にはfor文よりも扱いがし易く、理解しやすいと思っています。

    while True:
       text=input("文章を入力:")
       if text=="end":
          break
    

    このようにしてあげれば、endと入力するまで、書き続けられます。
    しかしこれでは、せっかく書いた文章が保存されません。
    次に、txtファイルに保存する方法を解説します。

    一度ワードプレスのことは忘れて、頭をまっさらにしましょう。

    テキストファイルを作成する

    テキストファイルを新規に作成するには、open() 関数を用います。

    p_title=input('タイトル:')
    directory='ファイルのパス'
    file=open('%s/%s.txt' % (directory,p_title),'a',encoding='utf-8') #書き込み追記モード
    

    %s/%sの部分がよくわからないかもしれません。

    これは、プレースホルダー を連続して使っています。
    通常であれば、

    “`’%s’ % sample1“`

     で変数sample1を挿入できますが、複数を異なる場所に挿入したい場合は、

    “`’%s %s’ % (sample1, sample2)“`

    とします。

    今回は、’ファイルのパス/タイトル.txt’というテキストファイルを作成したかったので、このような形になりました。

    ‘w’は書き込みモードで、開くたびに内容を消去してまっさらな状態から書き込むモードです。

    open() で、モードの選択を行う。
  • ‘r’:読み込みモード
  • ‘w’:書き込み用に開き、まずファイルを切り詰める
  • ‘a’:書き込み用に開き、ファイルが存在する場合は末尾に追記する
  • ‘b’:バイナリモード
  • 使うのはこの4つくらいです。

    今回は、続けて書けるように’a’で開きましょう。
    上の繰り返し入力と合わせてファイルに追記するコードはこのようになります。

    p_title=input('タイトル:')
    directory='ファイルのパス'
    file=open('%s/%s.txt' % (directory,p_title),'a',encoding='utf-8') #書き込み追記モード
    while True: #エラーがなければ延々と繰り返す構文。便利。
        text=input("文章を入力:")
        if text=="end":
            break #whileのループから抜け出す呪文
        else:
            file.write('%s\n' % text) #改行\nを入れないと、詰め詰めになる
    file.close()
    

    file.write(‘ここに内容’)とすれば、ファイルに書き込みすることができます。
    書き込んだ後は、file.close()で閉じましょう。

    ファイルのパスは、右クリックからoptionキーを押すことでコピーできます。
    MacOSのデスクトップの場合、
    “`/Users/ユーザー名/Desktop“`
    がパスになります。

    テキストファイルを読み出し、ワードプレスに投稿する

    これで、新しく作成するメモ帳が完成しましたね。

    次は、こいつを読み込みます。

    file=open('%s/%s.txt' % (directory,p_title),'r',encoding='utf-8')
    

    モードを’r’に変更することを忘れないようにしましょう。

    ここで、忘れていたワードプレスの呪文を引っ張ってきます。

    file=open('%s/%s.txt' % (directory,p_title),'r',encoding='utf-8')
    
    wp = Client('%s' % url, '%s' % username, '%s' % password)
    post = WordPressPost()
    post.title = p_title
    post.content = file.read() #ここに、読み込み内容
    post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
    post.status='publish'
    wp.call(NewPost(post))
    file.close()
    

    file.read()とすれば、内容を読み込むことができます。
    file.close()で閉じるのを忘れないようにしましょう。
    これで、新しくメモを作成し、ワードプレスに投稿することができるようになりましたね。
    file.close()で閉じるのを忘れないようにしましょう。

    解答

    from wordpress_xmlrpc import Client, WordPressPost
    from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
    from wordpress_xmlrpc.methods.users import GetUserInfo
    
    #初期設定欄
    p_title=input('タイトル:')
    directory='/Users/SeiyaAsada/Desktop'
    url='[サイトのアドレス]'
    username='[ユーザー名]'
    password='[パスワード]'
    
    #ファイルを書き込み
    file=open('%s/%s.txt' % (directory,p_title),'a',encoding='utf-8')
    while True:
      text=input("文章を入力:")
      if text=="end":
        break
      else:
        file.write('%s\n' % text)
    file.close()
    
    #ファイルを読み出し、ワードプレスに投稿
    file=open('%s/%s.txt' % (directory,p_title),'r',encoding='utf-8')
    wp = Client('%s' % url, '%s' % username, '%s' % password)
    post = WordPressPost()
    post.title = p_title
    post.content = file.read() #ここに、読み込み内容
    post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
    post.status='publish'
    wp.call(NewPost(post))
    file.close()
    

    書き込み、保存し、追記してワードプレスに投稿する

    次はいよいよ、本格的に投稿プログラムを完成させます。
    ここまで、新たに書き込み、それを投稿するところまで作りましたが、一発で長い文章を書き続けるのは辛いところです。

    タイトルを指定することで追記できますが、「【完成形】Pythonでワードプレスに投稿するプログラム」なんていちいち打って入られません。

    しかも、endと入力した場合にすぐに投稿されてしまいます。

    そこで、os.listdir()を使い、ディレクトリ内のファイルをリストアップします。

    import os
    files = os.listdir(directory)
    

    これでディレクトリ内のファイルを読み出すことができます。
    あとは、リスト化です。

    import os
    files = os.listdir(directory)
    for i in range(len(files)) : #フォルダ内のファイルリストを表示
      print("%s:%s" % (i,files[i]))
    

    仮にディレクトリ内に[test1.txt][test2.txt][test3.txt]があるとき、このように表示されます。

    “`
    0:test1.txt
    1:test2.txt
    2:test3.txt
    “`

    あとは、任意の番号を指定するだけでファイルを引っ張り出してくれるコードを記述するだけです。

    files = os.listdir(directory)
    while True:
      for i in range(len(files)) : #フォルダ内のファイルリストを表示
        print("%s:%s" % (i,files[i]))
        #番号を入力させて、エラーが出なければbreakで次へ
      try:
        title=str(files[int(input("番号入力:"))]).replace(".txt","")
          f=open("%s/%s.txt" % (directory,title),"r",encoding="utf-8")
          break
      #エラーが出れば(番号が違う、番号じゃないなど)ループさせる
      except:
        print("番号を入力してください")
    print(file.read()) #開いたファイルを表示してみましょう
    

    これを、新しくファイルを作成するか、既存のファイルを読み込むか、選択できるようにすればいいわけですね!

    while True:
      new=input('\n新規作成?(y/n):')
      #新規作成を選んだ場合、タイトルを新たに決めて、ファイルを作成します
      if new == "y":
        while True:
          p_title=input('タイトルを入力:')
          if p_title=="":
            print("タイトルが入力されていません。")
          else:
            break
        break
      #既存のファイルを開く場合、指定ディレクトリのフォルダからファイル一覧を出し、選択させます
      elif new== "n":
        files = os.listdir(directory)
        while True:
          for i in range(len(files)) : #フォルダ内のファイルリストを表示
            print("%s:%s" % (i,files[i]))
          #番号を入力させて、エラーが出なければbreakで次へ
          try:
            #replace()で、拡張子を一旦消す。
            p_title=str(files[int(input("番号入力:"))]).replace(".txt","")
            f=open("%s/%s.txt" % (directory,p_title),"r",encoding="utf-8")
            print(f.read()) #ファイルの中身を表示させて、確かめる
            f.close()
            break
          #エラーが出れば(番号が違う、番号じゃないなど)ループさせる
          except:
            print("番号を入力してください")
        break
      #yでもnでもない入力の場合、ループさせる。
      else:
        continue
    f=open("%s/%s.txt" % (directory,p_title),"a",encoding="utf-8")
    

    これで、新規作成時と既存のファイルを編集する両方に対応できました。

    ただし、まだ問題が残っています。
    このままでは文章をを書き終え、endと入力した場合にすぐにワードプレスに投稿されてしまします。

    投稿するか保存するかの条件

    ファイルを閉じた瞬間に、「ワードプレスに投稿しますか?」と選択可能なコードを入れましょう。

    #ワードプレスに投稿するかどうか
    doupost=input('ワードプレスに投稿しますか?(y)')
    if doupost=='y':
      f=open("%s/%s.txt" % (directory,p_title),"r",encoding="utf-8")
      print('投稿しています...Wait for a second...')
      wp = Client('%s' % url, '%s' % username, '%s' % password)
      post = WordPressPost()
      post.title = p_title
      post.content = file.read()
      post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
      post.status='publish'
      wp.call(NewPost(post))
      file.close()
      print('投稿が完了しました。')
    else:#yとしない場合。
      print('投稿をやめました。')
    

    これで、ブログ投稿プログラムの完成です。

    いえ、もうひとつ加えましょう。
    ワードプレスに投稿するかしないかに関わらず、全ての作業が完了したら、また続きを編集するか、別のファイルを編集できたらいいですよね。

    全体をwhile文で囲ってあげればよいです。

    while True:
      #[今まで書いたプログラムコード]
      conti=input('このまま編集を続けますか?(y):')
      if conti=="y":
        continue
      else:
        break
    print('作業を終了しました。')
    

    といった感じにすれば、完成です。

    まとめ

    ここまで解説した内容はそれぞれの箇所でバラバラなので、ちゃんと書きましょう。

    while True:#全体の繰り返し
      while True:#ファイル作成、読み込み時のループ
        new=input('\n新規作成?(y/n):')
        #新規作成を選んだ場合、タイトルを新たに決めて、ファイルを作成します
        if new == "y":
          while True:
            p_title=input('タイトルを入力:')
            if p_title=="":
              print("タイトルが入力されていません。")
            else:
              break
          break
        #既存のファイルを開く場合、指定ディレクトリのフォルダからファイル一覧を出し、選択させます
        elif new== "n":
          files = os.listdir(directory)
          while True:
            for i in range(len(files)) : #フォルダ内のファイルリストを表示
              print("%s:%s" % (i,files[i]))
            #番号を入力させて、エラーが出なければbreakで次へ
            try:
              #replace()で、拡張子を一旦消す。
              p_title=str(files[int(input("番号入力:"))]).replace(".txt","")
              f=open("%s/%s.txt" % (directory,p_title),"r",encoding="utf-8")
              print(f.read()) #ファイルの中身を表示させて、確かめる
              f.close()
              break
            #エラーが出れば(番号が違う、番号じゃないなど)ループさせる
            except:
              print("番号を入力してください")
          break
        #yでもnでもない入力の場合、ループさせる。
        else:
          continue
      #文章の編集開始
      f=open("%s/%s.txt" % (directory,p_title),"a",encoding="utf-8")
      while True:
        text=input("文章を入力:")
        if text=="end":
          break
        else:
          file.write('%s\n' % text)
      file.close()
    
      #ファイルを読み出し、ワードプレスに投稿
      file=open('%s/%s.txt' % (directory,p_title),'r',encoding='utf-8')
      doupost=input('ワードプレスに投稿しますか?(y)')
      if doupost=='y':
        f=open("%s/%s.txt" % (directory,p_title),"r",encoding="utf-8")
        print('投稿しています...Wait for a second...')
        wp = Client('%s' % url, '%s' % username, '%s' % password)
        post = WordPressPost()
        post.title = p_title
        post.content = file.read()
        post.terms_names = {'post_tag': ['タグ名1','タグ名2'],'category': ['カテゴリ名1','カテゴリ名2']}
        post.status='publish'
        wp.call(NewPost(post))
        file.close()
        print('投稿が完了しました。')
      else:#yとしない場合。
        print('投稿をやめました。')
      conti=input('このまま編集を続けますか?(y):')
      if conti=="y":
        continue
      else:
        break
    print('作業を終了しました。')
    

    ふぅ、ちゃんと動いてくれることを願っています。
    もしかすると、インデントの違いでエラーが出る可能性はありますが、適宜修正してください。

    また、以下に究極形のコードを公開しておきます。

    究極形でできること

  • ディレクトリを選択
  • 複数のWPアカウントから選択
  • ファイルを新規作成
  • ファイルを読み出し
  • 読み出し時に保存内容を確認
  • 編集時のスニペット登録・呼び出し
  • 投稿時に[下書き]or[公開]
  • 投稿時にカテゴリ追加
  • どうぞ。
    ちなみに、この記事はこれで作ったプログラムで書いて投稿しています。

    import os #フォルダの中身を探る
    import sys #プログラム強制終了用
    from wordpress_xmlrpc import Client, WordPressPost
    from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
    from wordpress_xmlrpc.methods.users import GetUserInfo
    
    #スニペット中のendを入力するまで繰り返し書かせる子プログラムの定義
    def write_roop():
        i=1
        while True:
            text=input('%s:' % i)
            if text=='end':
                break
            else:
                f.write('%s\n' % text)
                i+=1
                continue
    
    #ディレクトリ選択
    place=["Desktop","User"]
    print("-----------------------")
    for i in range(int(len(place))):
        print("%s:%s" % (i,place[i]))
    print("-----------------------")
    while True:
        select=input("どのディレクトリで作業しますか?:")
        if select=="0":
            directory="/Users/ユーザー名/Desktop"
            break
        elif select=="1":
            directory="/Users/ユーザー名"
            break
        else:
             continue
    
    #どのアカウントを使用するか
    account=["アカウント1","アカウント2"]
    print("-----------------------")
    for i in range(int(len(account))):
        print("%s:%s" % (i,account[i]))
    print("-----------------------")
    while True:
        page=input("どのアカウントで投稿しますか?:")
        if page=="0":
            url="アカウント1のURL"
            username="アカウント1のユーザー名"
            password="アカウント1ののパスワード"
            break
        elif page=="1":
            url="アカウント2のURL"
            username="アカウント2のユーザー名"
            password="アカウント2ののパスワード"
            break
        else:
             continue
    
    while True: #最後の編集を続ける選択をした場合のループ
        #書き始めを決定します
        while True:
            new=input('\n新規作成?(y/n):')
            #新規作成を選んだ場合、タイトルを新たに決めて、ファイルを作成します
            if new == "y":
                while True:
                    title=input('タイトルを入力:')
                    if title=="":
                        print("タイトルが入力されていません。")
                    else:
                        break
                break
            #既存のファイルを開く場合、指定ディレクトリのフォルダからファイル一覧を出し、選択させます
            elif new== "n":
                files = os.listdir(directory)
                while True:
                    for i in range(len(files)) : #フォルダ内のファイルリストを表示
                        print("%s:%s" % (i,files[i]))
                    #番号を入力させて、エラーが出なければbreakで次へ
                    try:
                        title=str(files[int(input("番号入力:"))]).replace(".txt","")
                        f=open("%s/%s.txt" % (directory,title),"r",encoding="utf-8")
                        print('''
    -----------------------
    ファイルの内容
    -----------------------
                        ''')
                        print(f.read())
                        print('''
    -----------------------
    -----------------------
                        ''')
                        f.close()
                        break
                    #エラーが出れば(番号が違う、番号じゃないなど)ループさせる
                    except:
                        print("番号を入力してください")
                break
            #endと入力した場合、強制終了
            elif new=="end":
                sys.exit()
            #yでもnでもendでもない入力の場合、ループさせる。
            else:
                continue
        f=open("%s/%s.txt" % (directory,title),"a",encoding="utf-8")
    
        #本文を繰り返し入力させる
        while True:
            content=input("文章を入力(or end):")
            #endと打てば本文入力終了
            if content=="end":
                break
    
            #見出し1
            elif content=='#':
            	f.write('<h1>%s</h1>\n' % input("<h1>"))
            	print('</h1>')#視覚的な補助
    
            #見出し2
            elif content=='##':
            	f.write('<h2>%s</h2>\n' % input("<h2>"))
            	print('</h2>')#視覚的な補助
    
            #見出し3
            elif content=='###':
            	f.write('<h3>%s</h3>\n' % input("<h3>"))
            	print('</h3>')#視覚的な補助
    
            #list
            #見出し3
            elif content=='li':
            	f.write('<li>%s</li>\n' % input("<li>"))
            	print('</>')#視覚的な補助
    
            #pre
            elif content=='pre':
            	f.write('<pre>')
            	print('<pre>')#視覚的な補助
            	write_roop()
            	f.write('</pre>\n')
            	print('</pre>')#視覚的な補助
    
            #その他普通の文字列はそのまま書き込み
            else:
                f.write("%s\n" % content)
        #最後にファイルを閉じる
        f.close()
        print("保存しました。")
    
        #ワードプレスに投稿するかどうか
        doupost=input('ワードプレスに投稿しますか?(y)')
        if doupost=='y':
            f=open("%s/%s.txt" % (directory,title),"r",encoding="utf-8")
            #カテゴリー設定
            category=[]
            while True:
                cat=str(input("カテゴリーを入力:"))
                if cat=="end":
                    break
                category.append(cat)
            while True:
                dp=input('下書き(draft)か公開(publish)を選択してください。(d/p)')
                if dp=='p':
                    p_status='publish'
                    break
                elif dp=='d':
                    p_status='draft'
                    break
                else:
                    continue
            print('投稿しています...Wait for a second...')
    
            wp = Client('%s/xmlrpc.php' % url, username, password)
            post = WordPressPost()
            post.title = title
            post.content = f.read()
            post.terms_names = {'post_tag': [],'category': category}
            post.status=p_status
            wp.call(NewPost(post))
    
            f.close()
            print('投稿が完了しました。')
        else:
            print('投稿をやめました。')
    
        #最後に、編集を続けるかどうかの条件。yで、最初に戻り、新規作成と既存のファイルの編集が出来る。
        while True:
            conti=input("編集を続けますか?(y/n)")
            if conti=="y":
                break
            elif conti=="n":
                print("作業を終了します。")
                sys.exit()
            else:
                print("入力してください")
                continue
    

    【レベル2】フィボナッチ数列を羅列させる

    練習問題

    フィボナッチ数列をリスト化するプログラムを書きなさい。

    問題を解くのに必要な知識

  • while
  • append()
  • 解説

    フィボナッチ数列自体を表現することは難しくありません。
    まず、def関数で定義を行い結果を出すリストを作成します。
    def関数は特別使う必要はありませんが、nを様々な数字で検証したいときに便利です。
    def fib(n):
         result = []
    

    次に、初項と第二項を指定してあげます。でないと、An+1=An+An-1が成り立ちません。
    a=0
    b=1
    あとは、while文で条件を整えます。ここが一番頭を使うところです。

    while b < n:        #nで指定した数字まで以下を繰り返す
        result.append(b) #bをリストに加える
        a, b = b, a+b    #a=b,b=a+bと同義
    return result        #リストを返します
    

    これで、フィボナッチ数列は完成です。

    解答

    def fib(n):
        result = []
        a, b = 0, 1
        while b < n: 
            result.append(b)
            a, b = b, a+b
        return result
    

    fib(100)
    とすれば、
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
    が返ってきます。

    【レベル2】数当てゲーム

    練習問題

    0から100までの数字をランダムに取得し、数を当てるゲームを作りなさい

    問題を解くのに必要な知識

  • random
  • input()
  • if
  • 解説

    まずは乱数を得るためのrandomモジュールをインポートします。
    import random

    次に、0から100までの数をランダムで1つ出します。

    num=random.randint(0,100)

    次に、数の予想を入力させます。当たるまで繰り返す文を書くところがポイント。

    while True:
        print("数を当てなさい")
        guess=input()
        i=int(guess)

    ここまでで、数を入力させました。
    あとは、入力された数が当たっているかどうかのif 文でおkですね。

        if i == num:
            print("正解")
            break
        elif i > num:
            print("もっと小さく")
        elif i < num:
            print("もっと大きく")
    

    これでゲームが完成です。

    解答

    import random 
    num=random.randint(0,100)
    while True:
        print("数を当てなさい")
        guess=input()
        i=int(guess)
        if i == num:
            print("正解")
            break
        elif i > num:
            print("もっと小さく")
        elif i < num:
            print("もっと大きく")

    【レベル2】メモを素早く作成するプログラム

    練習問題

    適当なディレクトリにメモを素早く作成するプログラムを書きなさい。
    また、endと入力するまで改行でメモが取れるようにしなさい。

    問題を解くのに必要な知識

  • open()
  • while
  • input()
  • 解説

    まず、open() 関数を用いてファイルを作成します。もともとのファイルがない場合は新規に作成されるので、心配いりません。
    file=open('test.txt','w',encoding='utf-8')

    次に、endと打つまで入力させます。ここがポイント。

    while True:
    	s=input() 
    	if s=='end': #endと打つまで入力繰り返す
    		break
    	file.write('%s\n' % s)

    最後に、ファイルを閉じます。

    file.close()

    無事閉じたら、「書き込み完了」なんかをプロントさせると安心です。

    print('書き込み完了')

    解答

    file=open('test.txt','w',encoding='utf-8')
    while True:
    	s=input() 
    	if s=='end': #endと打つまで入力繰り返す
    		break
    	file.write('%s\n' % s)
    file.close()
    print('書き込み完了')
    

    【レベル2】コピーファイルを作成する

    練習問題

    同じ内容で書かれたファイルを10個作成するプログラムを書きなさい

    問題を解くのに必要な知識

    解答

    for x in range(10):
        content='''
        これは%s番目のファイルです。
        ちゃんと入力できているか確かめましょう。
        ''' % str(x+1) #何番目、はオマケです
        write_file=open('/test%s.txt' % x,"w")
        write_file.write(content)
        write_file.close()
        print(open('/test%s.txt' % x).read())
    

    【レベル2】数字を入力させ、最大値、最小値を表示する

    練習問題

    5つの数字を入力させ、その数字のリストの中から最大値、最小値を割り出すプログラムを書きなさい。

    問題を解くために必要な知識

  • list() 関数
  • input() 関数
  • append() 関数
  • float() 関数
  • max() 関数
  • min() 関数
  • 解説

    まずはからのリストを作ります。

    numbers=[]
    

    次に、5回数字を入力させます。

    for i in range(5):
        x=input('適当な数字を入力(あと%s回):' % str(5-i))
    

    (あと何回)の部分はオマケです。

    入力させた値を、numbersリストに加えます。数字が実数になるようにちゃんとfloat() を使いましょう。

    for i in range(5):
        x=input('適当な数字を入力(あと%s回):' % str(5-i))
        numbers.append(float(x))
    

    あとは、最大値、最小値を出力させるだけです。

    max(numbers),min(numbers)
    

    解答

    numbers=[]
    for i in range(5):
        x=input('適当な数字を入力(あと%s回):' % str(5-i))
        numbers.append(float(x))
    max(numbers),min(numbers)
    

    【レベル1】input() の使い方

    練習問題

    実行結果が“`
    苗字:[入力欄1]
    名前:[入力欄2]
    私の名前は、[入力欄1][入力欄2]です。“`
    となるようにプラグラムを書きなさい。

    問題を解くのに必要な知識

    必ず必要

  • print()
  • input()
  • 知っていると便利

  • def文
  • プレースホルダー
  • 解答

    def username(first,last):
        print("私の名前は、 %s %sです。" % (first, last))
    username(input("苗字:"),input("名前:"))
    

    【レベル1】input() の基本

    練習問題

    変数 name に対して名前を記入させ、プレースホルダー を用いて、
    “`
    私の名前は、[あなたの名前]です。

    “`
    という結果を得てください。

    この問題を解くのに必要な知識

    解答

    “`py

    name = input()
    x = "私の名前は、%sです。"
    print(x % name)

    “`