【发布时间】:2019-03-01 16:37:14
【问题描述】:
import json
def get_stored_username():
"""Get stored username if available."""
filename = 'username.json'
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
return None
else:
return username
def get_new_username():
"""Prompt for a new username."""
username = input("What is your name? ")
filename = 'username.json'
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
return username
def greet_user():
"""Greet the user by name."""
username = get_stored_username()
if username:
correct = input("Are you " + username + "? (y/n) ")
if correct == 'y':
print("Welcome back, " + username + "!")
return
# We got a username, but it's not correct.
# Let's prompt for a new username.
username = get_new_username()
print("We'll remember you when you come back, " + username + "!")
greet_user()
上面代码中的函数greet_user()应该根据下面的文字重写:
唯一需要解决的是嵌套的if 语句。这可以通过将检查用户名是否正确的代码移动到单独的函数来清除。如果您喜欢这个练习,您可以尝试创建一个名为 check_username() 的新函数,看看是否可以从 greet_user() 中删除嵌套的 if 语句。
这是我试图解决这个问题的尝试:
def greet_user():
"""Greet the user by name."""
username = get_stored_username()
if username:
check_username()
username = get_new_username()
print("We'll remember you when you come back, " + username + "!")
def check_username():
correct = input("Are you " + username + "? (y/n) ")
if correct == 'y':
print("Welcome back, " + username + "!")
username = get_new_username()
print("We'll remember you when you come back, " + username + "!")
这是 IDLE 的输出:
Traceback (most recent call last):
File "C:\Users\Documents\python_work\files and exceptions\JSON\remember_me.py", line 41, in <module>
greet_user()
File "C:\Users\Documents\python_work\files and exceptions\JSON\remember_me.py", line 29, in greet_user
check_username()
File "C:\Users\Documents\python_work\files and exceptions\JSON\remember_me.py", line 34, in check_username
correct = input("Are you " + username + "? (y/n) ")
UnboundLocalError: local variable 'username' referenced before assignment
程序应该是这样工作的:
What is your name? eric
We'll remember you when you come back, eric!
Are you eric? (y/n) y
Welcome back, eric!
Are you eric? (y/n) n
What is your name? ever
We'll remember you when you come back, ever!
Are you ever? (y/n) y
Welcome back, ever!
【问题讨论】:
-
我确实尝试过自己做。
-
我的尝试已发布。
-
预期输出是什么,当前输出是什么?
-
由于您的问题不取决于读取文件,因此只需对该输入进行硬编码。除非您的问题直接涉及阅读输入,否则不应有任何手动输入:不要让我们进行多余的输入。
-
UnboundLocalError: local variable 'username' referenced before assignment- 了解scoping-rules
标签: python json python-3.x function pep