ライブラリは特に使用せずCUI形式の電話帳を作ってみました。簡単な物なのでソート機能や曖昧検索がないのと改善点としてはtxtデータが登録できない点があります。とはいえ参考程度にはなるのではないかと。出来ればコメント欄で修正点を挙げてもらえれば幸いです。以下にコードを記載します。
import os
import sys
list_name = []
list_tel = []
with open('電話帳.txt',encoding='utf-8',mode='r+')as f:
lines = f.readlines()
for i, sprits in enumerate(lines):
before_sprit = lines[i]
after_sprit = before_sprit.split()
list_name.append(after_sprit[0])
list_tel.append(after_sprit[1])
while True:
print('電話番号管理')
print('')
print('1:番号登録')
print('2:番号リスト表示')
print('3:番号・名前検索')
print('4:番号削除')
print('5:終了')
print('')
number = input('番号を選択してください:')
if number == '1':
name = input('名前を登録してください:')
tel = input('電話番号を入力してください:')
print('以下でよろしいでしょうか')
print('名前:' + name + ',' +'電話番号:' + tel)
while True:
number1or2 = input('よろしければ1、修正する場合は2を選択してください:')
if number1or2 == '1':
list_name.append(name)
list_tel.append(tel)
list_nametel = list(zip(list_name, list_tel))
print('登録完了')
print('')
break
elif number1or2 == '2':
continue
else:
print('該当しない番号です')
elif number == '2':
print('名前 電話番号')
for (name, tel) in zip(list_name, list_tel):
print(str(name) + ' ' + str(tel))
print('')
elif number == '3':
while True:
search_menu = input('名前検索は1、電話番号検索は2、終了する場合は3を選択してください:')
if search_menu == '1':
search_name = input('名前を入力してください:')
if (search_name in list_name) == True:
name_number = list_name.index(search_name)
print('検索結果')
print(search_name + ' ' + list_tel[name_number])
elif search_menu == '2':
search_tel = input('電話番号を入力してください:')
if (search_tel in list_tel) == True:
tel_number = list_tel.index(search_tel)
print('検索結果')
print(list_name[tel_number] + ' ' + search_tel)
elif search_menu == '3':
break
else:
print('該当しない番号です')
continue
elif number == '4':
while True:
search_menu = input('名前検索は1、終了する場合は2を選択してください:')
if search_menu == '1':
search_name = input('削除する名前を記入してください:')
if (search_name in list_name) == True:
print(search_name + 'を削除しますがよろしいでしょうか')
prepare_del = input('よろしければ1を間違えた場合は2を選択してください:')
if prepare_del == '1':
name_number = list_name.index(search_name)
del list_name[name_number]
del list_tel[name_number]
print('削除しました。')
elif prepare_del == '2':
break
elif (search_name in list_name) == False:
print('見つかりませんでした')
continue
elif search_menu == '2':
break
elif number == '5':
f.close
recover_list = []
for i in range(len(list_name)):
recover_list.append(list_name[i] + '/t' + list_tel[i] + '/n')
print(recover_list[0])
os.remove('電話帳.txt')
g = open('電話帳.txt','a', encoding='UTF-8')
g.writelines(recover_list)
g.close
sys.exit('終了します')
else:
print('該当しない番号です')
continue
個人的に苦労したのはやはり配列を使用するところでした。大括弧[]を使用ないといけない所を間違えて小括弧()を使って変数として使用してしまう盆ミスに気づかずに使用してしまったためなぜ配列として呼び出せないのか分からなかったです。それと最初に書いた改善点についてはtxtデータに登録する手順として
電話帳.txtを一度削除→再度生成→recover_listから登録
という手順で登録しようとしているのですがなぜかうまくできないです。一体どうすれば良いのでしょうか?
12/8追記 number==5以下を修正し端末上で起動したらなぜかうまく動きました。IDLEでは機能しなかったのでより一層訳が分からなくなりました。
elif number == '5':
f.close
recover_list = []
for i in range(len(list_name)):
recover_list.append(list_name[i] + ' ' + list_tel[i] + '\n')
os.remove('電話帳.txt')
g = open('電話帳.txt','a', encoding='UTF-8')
g.writelines(recover_list)
g.close
sys.exit('終了します')
コメント