生成随机测试(中国各省的简称)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import random

info = {'北京': '京',
'天津': '津',
'河北': '冀',
'山西': '晋',
'内蒙古': '蒙',
'辽宁': '辽',
'吉林': '吉',
'黑龙江': '黑',
'上海': '沪',
'江苏': '苏',
'浙江': '浙',
'安徽': '皖',
'福建': '闽',
'江西': '赣',
'山东': '鲁',
'河南': '豫',
'湖北': '鄂',
'湖南': '湘',
'广东': '粤',
'广西': '桂',
'海南': '琼',
'重庆': '渝',
'四川': '川、蜀',
'贵州': '贵、黔',
'云南': '云、滇',
'西藏': '藏',
'陕西': '陕、秦',
'甘肃': '甘、陇',
'青海': '青',
'宁夏': '宁',
'新疆': '新',
'台湾': '台',
'香港特别行政区': '港',
'澳门特别行政区': '澳',
}
letters = ['A', 'B', 'C', 'D']
# 创建30份试题
for quiz_num in range(30):
# 创建试题文件和答案文件,文本中有中文需要使用utf-8,否则会乱码
quiz_file = open(f'试题/试题{quiz_num + 1}.txt', 'w', encoding='utf-8')
answer_file = open(f'答案/答案{quiz_num + 1}.txt', 'w', encoding='utf-8')
# 写下试卷标题
quiz_file.write('姓名:\t\t日期:\t\t年级:\t\t\n\n')
quiz_file.write((' ' * 20) + f'省份简称试题 (卷{quiz_num + 1})')# 通过敲空格实现标题居中
quiz_file.write('\n\n')# 空一行
# 将省份列表随机重排
provinces = list(info.keys()) # 省份名称列表
random.shuffle(provinces) # 随机排列省份名称
# 循环34次,为每个省级行政区出题
for question_num in range(34):
# 得到正确答案和错误答案
province = provinces[question_num] # 此题对应的省份
correct_answer = info[province] # 此题对应省份的简称
wrong_answers = list(info.values()) # 省份简称列表
# 找到正确答案在省份简称列表中的下标,从省份简称列表删除此题对应省份的简称
del wrong_answers[wrong_answers.index(correct_answer)]
wrong_answers = random.sample(wrong_answers, 3) # 从上面的列表中取三个值组成新的错误答案列表
answer_options = wrong_answers + [correct_answer] # 选项列表,包含三个错误答案和一个正确答案
random.shuffle(answer_options) # 将选项随机排列
# 在试题文件中写下选项和答案
# 题号.某省的简称是?
quiz_file.write(f'{question_num + 1}. {provinces[question_num]}的简称是?\n')
for i in range(4):
quiz_file.write(f'{letters[i]}. {answer_options[i]} \t')
quiz_file.write('\n')
# 将答案写到答案文件中
# 找出正确答案在列表中的下标,再找到该下标对应的字母
answer_file.write(f'{question_num + 1}. {letters[answer_options.index(correct_answer)]}\t')
quiz_file.close()
answer_file.close()

多重剪贴板

这个“多重剪贴板”将被命名为mcb.pyw(因为“mcb”比输入“multiclipboard”更简单)。.pyw扩展名意味着Python运行该程序时,不会显示终端窗口。该程序将利用一个关键字保存每段剪贴板文本。例如,当运行pymcb.pyw save spam,剪贴板中当前的内容就用关键字spam保存。通过运行py mcb.pyw spam,这段文本稍后将重新加载到剪贴板中。如果用户忘记了都有哪些关键字,他们可以运行py mcb.pyw list,将所有关键字的列表复制到剪贴板中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import shelve, pyperclip, sys


mcb_shelf = shelve.open('mcb')# 打开一个shelf文件用来存储内容
# 保存剪贴板文本
if len(sys.argv) == 3 and sys.argv[1].lower() == 'save':# 确保传入了2个命令行参数,save和剪贴板文本的代号
mcb_shelf[sys.argv[2]] = pyperclip.paste()# 代号=剪贴板内容
print(f'已保存代号是{sys.argv[2]}的内容,对应的内容是{pyperclip.paste()}')
elif len(sys.argv) == 2:# 只传入1个命令行参数
# 列出关键字(代号)和保存的内容
if sys.argv[1].lower() == 'list':# 传入list返回代号
keywords = list(mcb_shelf.keys())
for keyword in keywords:
print(f'代号{keyword},内容{mcb_shelf[keyword]}')
elif sys.argv[1] in mcb_shelf:# 传入代号,返回对应内容
pyperclip.copy(mcb_shelf[sys.argv[1]])
print(f'代号{sys.argv[1]}的内容{mcb_shelf[sys.argv[1]]}已经复制到剪贴板')
mcb_shelf.close()

“I’m Feeling Lucky”Bing查找(输入关键字,浏览器打开多个标签页)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests, sys, webbrowser
from bs4 import BeautifulSoup

print('搜索中...') # 跳转到浏览器之前显示搜索中
res = requests.get('https://cn.bing.com/search?q=' + ' '.join(sys.argv[1:]))
res.raise_for_status()
# 检索最前面的几个结果
# print(res.text)
soup = BeautifulSoup(res.text, "lxml")
# 为每个结果打开一个标签页
link_elems = soup.select('div.b_tpcn > a')
num_open = min(5, len(link_elems))
for i in range(num_open):
print(link_elems[i].get('href'))
webbrowser.open(link_elems[i].get('href'))

超级秒表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import time

input('点击ENTER开始计时.之后,点击ENTER记录.点击Ctrl-C停止.') # 点击Enter开始
print('开始计时.')
start_time = time.time() # 得到第一次的开始时间
last_time = start_time
lap_num = 1
# 记录.
try:
while True:
input() # 点击ENTER记录
lap_time = round(time.time() - last_time, 2)
total_time = round(time.time() - start_time, 2)
print(f'记录 #{lap_num}: {total_time} (时间间隔{lap_time})', end='')
lap_num += 1
last_time = time.time() # 重置lap time
except KeyboardInterrupt:
# 处理Ctrl-C导致的报错.
print('\n结束.')

简单的倒计时程序

1
2
3
4
5
6
7
8
9
from time import sleep
from subprocess import Popen
time_left = 5
while time_left > 0:
print(time_left)
sleep(1)
time_left = time_left - 1
# 倒计时结束打开音频
Popen(['start', "C:/Windows/Media/Alarm01.wav"], shell=True)