猜年龄,有三次机会,如何做?
1. 检查 输入的数据是否合法,通过异常try来处理,并记录 输入错误次数
2. 通过累加器,判断是否猜了3次,并提示还剩余多少的机会
3. 当3次错误,跳出
#!/usr/bin/python3 def guess_age(name, real_age): '''猜年龄,有三次机会''' count = 0 print('%s来猜猜我的年龄来' % name) while True: error_number = 0 while True: # 验证是否输入合法 try: maybe_age = int(input("%s:" % name)) except: error_number += 1 print('调皮,不想玩了,已经答非所问 %s 次了' % error_number) else: break count += 1 if maybe_age == real_age: if count == 1: print('%s真的太棒了,居然马上就猜中了' % name) else: print('%s真的太ben了,居然猜了这么多次才猜中,你居然猜了 %s 次' % (name, count)) break elif maybe_age > real_age: print('我有那么老么?滚滚滚,再给你%d机会'%(3-count)) elif count == 3: print('不和你玩了,真的ben!!!!!!!') break elif maybe_age < real_age: print('嗯哼,把我年龄说的那么低,暗示我智商低?哼,还给你%d机会' % (3-count)) if __name__ == '__main__': guess_age(name='北门吹雪', real_age=18)
猜年龄进阶
猜年龄,并且记录最近5次猜的数据,并保存下来,下次打开程序,历史记录依旧保存
#!/usr/bin/python3 import pickle import os from random import randint from collections import deque def guess_age(age): # 判断输入是否合法 try: age = int(age) except: print('输入错误,重新输入') return 'error' if age == real_age: print('猜对了') return 'ok' elif age > real_age: print('猜大了') return None elif age < real_age: print('猜小了') return None if __name__ == '__main__': # 判断历史记录是否存在 if os.path.exists('history'): try: # 存在就打开 history = pickle.load(open('history', 'br')) except: # 打开失败或者损坏重新定义 history = deque([], 5) else: # 不存在声明新的q,[]表示初始列表,5表示长度 history = deque([], 5) # 生成随机数 real_age = randint(1, 100) while True: age = input('(1~100)输入:') # 查询历史命令 if age == 'history' or age == 'h?': print(list(history)) continue result = guess_age(age) history.append(age) # 判断是否猜对 if result == 'ok': break # 退出程序 if age == 'q': break # 把历史数据写入文件 pickle.dump(history, open('history', 'bw'))