defload_list_data(total_nums, target_nums): """ 从文件中读取数据,以 list 的方式返回 :param total_nums: 读取的数量 :param target_nums: 需要查询的数据的数量 """ all_data = [] target_data = [] file_name = "G:/test/AdvancePython/fbobject_idnew.txt" withopen(file_name, encoding="utf8", mode="r") as f_open: for count, line inenumerate(f_open): if count < total_nums: all_data.append(line) else: break
for x inrange(target_nums): random_index = randint(0, total_nums) if all_data[random_index] notin target_data: target_data.append(all_data[random_index]) iflen(target_data) == target_nums: break
return all_data, target_data
defload_dict_data(total_nums, target_nums): """ 从文件中读取数据,以dict的方式返回 :param total_nums: 读取的数量 :param target_nums: 需要查询的数据的数量 """ all_data = {} target_data = [] file_name = "G:/dev/AdvancePython/fbobject_idnew.txt" withopen(file_name, encoding="utf8", mode="r") as f_open: for count, line inenumerate(f_open): if count < total_nums: all_data[line] = 0 else: break all_data_list = list(all_data) for x inrange(target_nums): random_index = randint(0, total_nums-1) if all_data_list[random_index] notin target_data: target_data.append(all_data_list[random_index]) iflen(target_data) == target_nums: break
return all_data, target_data
deffind_test(all_data, target_data): # 测试运行时间 test_times = 100 total_times = 0 import time for i inrange(test_times): find = 0 start_time = time.time() for data in target_data: if data in all_data: find += 1 last_time = time.time() - start_time total_times += last_time return total_times/test_times
defguess(k): if k == N: print("Right!") returnTrue elif k < N: print("{} < N...".format(k)) else: print("{} > N...".format(k))
while1: num = input("Please input a number:") if num: k = int(num) if guess(k): break
但有时随着输入的次数增多,就很容易忘记之前已经输入过的数字,这时候可以引入一个存放历史记录的队列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
from collections import deque from pickle import dump, load # 需要时可用 pickle 写入文件 history = deque([], 5) # 空队列,长度为 5 # ... while1: num = input("Please input a number:") if num: k = int(num) history.append(k) # 当用户输入 ? 或 history 时返回历史输入提示 if num in ['history', '?']: print(list(history)) if guess(k): break