Python编程从入门到实践 10-13验证用户

10-13 验证用户:最后一个remember_me.py版本假设用户要么已输入其用户名,要么是首次运行该程序。我们应修改这个程序,以应对这样的情形:当前和最后一次 运行该程序的用户并非同一个人。
为此,在greet_user() 中打印欢迎用户回来的消息前,先询问他用户名是否是对的。如果不对,就调用get_new_username() 让用户输入正确的用户名。

这个题目很有意思,实际上如果你把输入的文件 username.js 清空为空文件,那么如果按照课本的程序, get_stored_username() 函数里
你程序为 except FileNotFoundError: 或者 except IOError: 你都会很无奈的出现报错,而不是按照料想的那样,程序 会问 what’s your name?
给出解决此方案的 程序如下,大家可以看看:

import json


def get_stored_username():
    """如果存储了用户名,就获取它"""
    filename = 'username.json'
    try:
        with open(filename) as file_object:
            username = json.load(file_object)
    except json.decoder.JSONDecodeError:
        return None
    else:
        return (username)


def get_new_username():
    """提示用户输入用户名"""
    username = input("What's your name?")
    filename = 'username.json'
    with open(filename, 'w') as file_object:
        json.dump(username, file_object)
    return username


def greet_user():
    """询问用户用户名是不是正确,正确则欢迎,错误则重新输出用户名"""
    username = get_stored_username()
    if username:
        ask = input(username + " is your name?(y/n)")
        if ask == 'y':
            print("Welcome back," + username + " !")
        else:
            username = get_new_username()
            print("We'll remember you," + username + " !")
    else:
        username = get_new_username()
        print("We'll remember you," + username + " !")


greet_user()

username.js 文件为空的情况下,会输入一下结果:

What's your name?yoyo
We'll remember you,yoyo !

Process finished with exit code 0

而不是很悲催的 报错程序,哈哈 辛苦码字不易,请大家点赞!!

Traceback (most recent call last):
  File "C:/Users/win10/PycharmProjects/Python/remember_me5.py", line 40, in <module>
    greet_user()
  File "C:/Users/win10/PycharmProjects/Python/remember_me5.py", line 27, in greet_user
    username = get_stored_username()
  File "C:/Users/win10/PycharmProjects/Python/remember_me5.py", line 9, in get_stored_username
    username = json.load(file_object)
  File "C:\Users\win10\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
  File "C:\Users\win10\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "C:\Users\win10\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\win10\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

你可能感兴趣的:(Python编程从入门到实践 10-13验证用户)