zoukankan      html  css  js  c++  java
  • 第四十四天Python学习记录

    需求:

    修改个人信息程序

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

    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
    " % 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.")
  • 相关阅读:
    前端开发—HTML
    初识 Django
    前端开发—BOM对象DOM文档对象操作
    前端开发—jQuery
    前端开发—Javascript
    前端开发—CSS 盒子、浮动、定位
    前端开发—CSS
    html模拟手机页面
    人类简史读书笔记
    正则表达式
  • 原文地址:https://www.cnblogs.com/xudachen/p/8456274.html
Copyright © 2011-2022 走看看