码迷,mamicode.com
首页 > 编程语言 > 详细

第四十四天Python学习记录

时间:2018-02-21 11:43:24      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:open   column   sele   直接   phone   osi   print   nes   start   

需求:

修改个人信息程序

在一个文件里存多个人的个人信息,如以下

username password  age position department 
alex     abc123    24   Engineer   IT
rain     df2@432    25   Teacher   Teching
....

1.输入用户名密码,正确后登录系统 ,打印

1. 修改个人信息
2. 打印个人信息
3. 修改密码

2.每个选项写一个方法

3.登录时输错3次退出程序

  1 def print_personal_info(account_dic, username):
  2     """
  3     print user info
  4     :param account_dic: all account‘s data
  5     :param username: username
  6     :return: None
  7     """
  8     person_data = account_dic[username]
  9     info = ‘‘‘
 10     ------------------
 11     Name:   %s
 12     Age :   %s
 13     Job :   %s
 14     Dept:   %s
 15     Phone:  %s
 16     ------------------
 17     ‘‘‘ % (person_data[2],
 18            person_data[3],
 19            person_data[4],
 20            person_data[5],
 21            person_data[6],
 22            )
 23 
 24     print(info)
 25 
 26 
 27 def save_back_to_file(account_dic):
 28     """
 29     把account_dic转换成字符串格式,写回文件
 30     :param account_dic:
 31     :return:
 32     """
 33     f.seek(0)  # 回到文件头
 34     f.truncate()  # 清空原文件
 35 
 36     for k in account_dic:
 37         row = ",".join(account_dic[k])
 38         f.write("%s\n" % row)
 39 
 40     f.flush()
 41 
 42 
 43 def change_personal_info(account_dic, username):
 44     """
 45     change user info , 思路如下
 46     1.把这个人的每个信息打印出来,让其选择修改哪个字段,用户选择了数字,正好是字段的索引,这样直接把字段找出来修改掉就可以了
 47     2.改完后,还要把这个新数据重新写回到account.txt,由于改完后的新数据是字典类型,还需要把字典转换成字符串后,再写回硬盘
 48     :param account_dic:
 49     :param username:
 50     :return:
 51     """
 52     person_data = account_dic[username]
 53     print("person data:", person_data)
 54     column_names = [Username, Password, Name, Age, Job, Dept, Phone]
 55     for index, k in enumerate(person_data):
 56         if index > 1:  # 0 is username and 1 is password
 57             print("%s.  %s: %s" % (index, column_names[index], k))
 58 
 59     choice = input("select column id to change:").strip()
 60     if choice.isdigit():
 61         choice = int(choice)
 62         if 0 < choice < len(person_data):
 63             column_data = person_data[choice]
 64             print("current value>:", column_data)
 65             new_val = input("new value>:").strip()
 66             if new_val:
 67                 person_data[choice] = new_val
 68                 print(person_data)
 69 
 70                 save_back_to_file(account_dic)
 71             else:
 72                 print("输入为空")
 73 
 74 
 75 def change_user_password(account_dic, username):
 76     """
 77     change user info , 思路如下
 78     1.把这个人的密码打印出来,让用户修改
 79     2.改完后,还要把这个新数据重新写回到account.txt,
 80     :param account_dic:
 81     :param username:
 82     :return:
 83     """
 84     person_data = account_dic[username]
 85     print("person data:", person_data)
 86     column_names = [Username, Password, Name, Age, Job, Dept, Phone]
 87     for index, k in enumerate(person_data):
 88         if index < 2:  # 0 is username and 1 is password
 89             print("%s.  %s: %s" % (index, column_names[index], k))
 90 
 91     choice = input("select column id to change:").strip()
 92     if choice.isdigit():
 93         choice = int(choice)
 94         if 0 < choice < len(person_data):
 95             column_data = person_data[choice]
 96             print("current value>:", column_data)
 97             new_val = input("new value>:").strip()
 98             if new_val:
 99                 person_data[choice] = new_val
100                 print(person_data)
101 
102                 save_back_to_file(account_dic)
103             else:
104                 print("输入为空")
105 
106 
107 account_file = "account.txt"
108 f = open(account_file, "r+", encoding="utf-8")
109 raw_data = f.readlines()
110 accounts = {}
111 
112 for line in raw_data:
113     line = line.strip()
114     if not line.startswith("#"):
115         items = line.split(",")
116         accounts[items[0]] = items
117 
118 menu = ‘‘‘
119 1.打印个人信息
120 2.修改个人信息
121 3.修改密码
122 ‘‘‘
123 
124 count = 0
125 while count < 3:
126     username = input("Username:").strip()
127     password = input("Password:").strip()
128     if username in accounts:
129         if password == accounts[username][1]:
130             print("welcome %s ".center(50, -) % username)
131             while True:
132                 print(menu)
133                 user_choice = input(">>>").strip()
134                 if user_choice.isdigit():
135                     user_choice = int(user_choice)
136                     if user_choice == 1:
137                         print_personal_info(accounts, username)
138                     elif user_choice == 2:
139                         change_personal_info(accounts, username)
140                     elif user_choice == 3:
141                         change_user_password(accounts, username)
142 
143                 elif user_choice == q:
144                     exit("bye.")
145         else:
146             print("wrong username or password")
147     else:
148         print("Username does not exist.")
149     count += 1
150 
151 else:
152     print("Too many attempts.")

 

第四十四天Python学习记录

标签:open   column   sele   直接   phone   osi   print   nes   start   

原文地址:https://www.cnblogs.com/xudachen/p/8456274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!