编写一个程序,从键盘输入一个英文句子,按字母序输出每个单词及其重复次数。英文句子中只用空格分割单词,不包含其它标点符号
# 从键盘输入一个英文句子
sentence = input("请输入一个英文句子:")
# 将句子按空格分割成单词
words = sentence.split()
# 统计每个单词出现的次数
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
# 按字母序输出每个单词及其重复次数
for word in sorted(word_count):
print(word, word_count[word])
不知道你这个问题是否已经解决, 如果还没有解决的话:如果我们对一个文件进行爬取,想给爬取的过程增加一些动作,比如暂停,继续,取消,怎样才能让这些功能实现呢?
下面是经过博主不断踩坑试错得到的可以实现这些功能的代码(可能不是最优秀的代码,望大家多多指教!!!)
from dlpackage import model_download as dm
from dlpackage import requests_header
from dlpackage import setting
from dlpackage import share
import threading
import time
import os
# 定义的全局变量
pause_flag = False #暂停标志
cancel_flag = False #取消下载标志
length = None #用来保存已经下载文件的长度
mode = None #用来保存文件的存储模式
file_status = False #用来保存文件的打开或关闭状态
file_path_name = None #用来保存文件的存储路径
# 暂停/继续下载
def pause_or_continue():
global pause_flag
if share.m3.m.get() == '暂停下载':
share.m3.m.set('继续下载')
pause_flag = True
else:
share.m3.m.set('暂停下载')
pause_flag = False
m3u8_href = share.m3.button_url.get().rstrip()
video_name = share.m3.button_video_name.get().rstrip()
t = threading.Thread(
target=download_mp4, args=(
m3u8_href, video_name,))
# 设置守护线程,进程退出不用等待子线程完成
t.setDaemon(True)
t.start()
#取消下载的线程
def cancel_thread():
t = threading.Thread(
target=cancel)
# 设置守护线程,进程退出不用等待子线程完成
t.setDaemon(True)
t.start()
# 取消下载
def cancel():
global pause_flag
global cancel_flag
global file_status
global file_path_name
if not pause_flag:
cancel_flag = True
# 判断download_mp4()中打开的文件是否关闭,file_path_name是否被赋值,如果没有就再给它一点时间
while file_status == False or file_path_name == None:
time.sleep(1)
#移除已经下载完成的部分文件
os.remove(file_path_name)
#进度条归零
share.set_progress(0)
share.m3.show_info("取消成功!")
cancel_flag = False
file_status = False
file_path_name = None
else:
os.remove(file_path_name)
share.set_progress(0)
share.m3.m.set('暂停下载')
pause_flag = False
share.m3.show_info("取消成功!")
#对文件进行下载
def download_file(m3u8_href, video_name):
global length
global cancel_flag
global mode
global file_path_name
global file_status
share.m3.clear_alert()
video_name = share.check_video_name(video_name)
video_name = setting.path + "/" + video_name # 将保存路径与文件名称进行拼接
video_name = video_name + share.m3.button_url.get()[share.m3.button_url.get(
).rfind('.'):share.m3.button_url.get().rfind('.') + 4] # 将文件的后缀与整体路径进行拼接
chunk_size = 512
# 当这个文件已经下载过
if os.path.exists(
video_name):
response = dm.easy_download(
url=m3u8_href,
stream=True,
#请求头中加入'Range': 'bytes'参数实现断点续传
header=requests_header.get_user_agent1(
os.path.getsize(video_name)))
mode = 'ab'
size = os.path.getsize(video_name)
content_size = length
else:
response = dm.easy_download(
url=m3u8_href,
stream=True,
header=requests_header.get_user_agent())
mode = 'wb'
size = 0
content_size = int(response.headers['content-length'])
share.m3.alert('[文件大小]:%0.2f MB' % (content_size / 1024 / 1024))
with open(video_name, mode) as f:
for data in response.iter_content(chunk_size=chunk_size):
try:
#如果既没有暂停也没有取消下载就正常下载
if pause_flag == False and cancel_flag == False:
f.write(data)
size = size + len(data)
p = (size / content_size) * 100
share.set_progress(p)
share.m3.str.set('%.2f%%' % p)
#如果取消下载
elif cancel_flag:
f.close()
file_status = f.closed
file_path_name = video_name
break
#如果暂停下载
elif pause_flag:
f.close()
length = content_size
file_path_name = video_name
break
except BaseException:
share.m3.show_info("下载出现异常!")
if size == content_size:
share.m3.alert('下载完成!')
share.m3.show_info("下载完成!")
share.set_progress(0)
share.m3.str.set('')
以上代码是从博主的毕业设计中截取的,有部分导入的包是博主自己定义的,不过不影响对暂停,继续,取消这些功能代码的观看,理解噢!