"""
This modules is used to convert image format to base64 format.
"""defpic_change_base64():import PySimpleGUI as sg
import base64
layout =[[sg.Text("文件路径", font=15, text_color='black'),
sg.Input(key='-IN1-',
size=(35,2),
font='宋体',
border_width=2,
enable_events=True),
sg.FileBrowse("选择文件", size=(8,1))],[sg.Button("确定转换", bind_return_key=True, border_width=5, size=(30,1)),
sg.Button("取消转换", bind_return_key=True, border_width=5, size=(30,1))]]
window = sg.Window("Change_To_Base64", layout)defchange(path):withopen(path,'rb')as f1:
pic = f1.read()return base64.b64encode(pic)whileTrue:
event, values = window.read()print(event, values)ifnot event:breakif event =='取消转换':breakif event =='确定转换':if values['-IN1-']=='':returnNoneelse:return change(values['-IN1-'])
window.close()if __name__ =='__main__':print(pic_change_base64())
ASCIIconversion.py
"""
This module converts characters and numbers according to the ASCII table.
"""defchange_character(choose=1):# 默认返回字符串格式if choose ==1or choose ==2:
character =input("请输入字符:")
lt =[]for i in character:
lt.append(ord(i))# ord函数:将字符转为对应的ASCII码if choose ==1:# 参数为 1 的时候,返回字符串格式
lt_s =[]for i in lt:
lt_s.append(str(i))return' '.join(lt_s)else:# 参数为 2 的时候,返回列表格式return lt
else:return'参数错误'defchange_number(choose=1):
number =input("请输入编号[请用空格符进行间隔]>>>")if choose ==1or choose ==2:
lt = number.split(' ')
lt_s =[]for i in lt:
lt_s.append(chr(int(i)))# chr函数:将ASCII码转为对应的字符if choose ==1:# 参数为 1 的时候,返回字符串格式return''.join(lt_s)else:# 参数为 2 的时候,返回列表格式return lt_s
else:return'参数错误'if __name__ =='__main__':print(change_character())print(change_number())
JudgeInput.py
"""
This module is used to determine the number of letters and numbers in a string.
"""
function_dict ={
'1':"判断(字符串)是否为:纯字母 [返回值:True or False]",'2':"判断(字符串)是否为:纯数字 [返回值:True or False]",'3':"统计(字符串)中不同字符总个数 [返回值:int]",'4':"统计(字符串)中‘大写字母’、‘小写字母’、‘数字’、‘其他字符’的个数 [返回值:dict]"}defjudge(strings='', funcnum=3, scan=False,):# 参数类型:str类型 内容:字符串if scan:for i in function_dict:print("{}:{}".format(i, function_dict[i]))if funcnum ==1:# 判断是否为纯字母return strings.isalpha()elif funcnum ==2:# 判断是否为纯数字return strings.isdigit()elif funcnum ==3:# 统计字符种类
set_1 =set()for i in strings:
set_1.add(i)returnlen(set_1)elif funcnum ==4:
capital_letter =0# 大写字母个数
lower_letter =0# 小写字母个数
number =0# ‘数字’个数
others =0# 非数字和字母的字符for i in strings:if65<=ord(i)<=90:# 统计大写字母个数
capital_letter +=1elif97<=ord(i)<=122:# 统计小写字母个数
lower_letter +=1elif48<=ord(i)<=57:
number +=1else:
others +=1
letter_total = capital_letter + lower_letter # 统计大小写字母总数
result_dict ={
'字符串长度':len(strings),'数字字符': number,'字母字符': letter_total,'大写字母字符': capital_letter,'小写字母字符': lower_letter,'其他字符': others
}return result_dict
else:# 输入不合法,结束函数!returnNoneif __name__ =='__main__':print(judge(scan=True))
案例1: 刮刮乐
import random
from JudgeInput import judge # 导入自制模块defscratch_off_game(probiblity=1/3):# 自定义概率if0< probiblity <=1:return main(probiblity)else:return'参数错误_正确范围[0~1]'defmain(probiblity):
n =int(6/ probiblity -6)
list_prize =['一等奖','二等奖','二等奖','三等奖','三等奖','三等奖']
list_mix = list_prize +['谢谢惠顾']* n # 融合列表
random.shuffle(list_mix)# 将列表打乱whileTrue:
res =input("请输入你想要刮开的号码\n--->").strip()if judge(res,2):# 字符串中,是纯数字则会返回True,执行if下的语句if judge(res)==1:# 如果字符种类为’1‘,则查看是否为全部是’0‘if res.startswith('0',0,1):print('对不起,没有0或全为0的号码!')continueelse:
res =int(res)breakelse:
lt =list(res)# 将字符串转成列表whileTrue:if lt[0]=='0':# 对列表第一个值进行判断
lt = lt[1::]# 若它是’0‘,进行切片!continue# 对切片后的列表,继续做上面的判断else:# 当列表的第一个值不是’0‘时候,将它转为字符串的形式,并且将这些-数字字符串-转为整型
res =''.join(lt)
res =int(res)breakbreakelse:print('请输入数字!', end='')if0< res <=(n +6):return list_mix[res -1]else:
res = res %(n +6)return(list_mix[res -1])if __name__ =='__main__':print(scratch_off_game(1/2))
案例2: 平润年
import time
defyear():
year =int(input("请输入年份:").strip())whileTrue:if year >0:if year %400==0or(year %4==0and year %100!=0):return[year,"平年"]else:return[year,"闰年"]else:print('请正确输入!')defmonth(year):whileTrue:
month =int(input("请输入月份:").strip())if month in[1,3,5,7,8,10,12]:returnf"{
year}年{
month}月,有31天"elif month in[4,6,9,11]:returnf"{
year}年{
month}月,有30天"elif month ==2:if year %400==0or(year %4==0and year %100!=0):returnf"{
year}年{
month}月,有28天"else:returnf"{
year}年{
month}月,有29天"else:print('请正确输入!')defmain():whileTrue:print('\n1.只查询年份\n2.查询到月份\n3.退出')
num =input('\n请输入功能号\n--->').strip()if num =='1':
lt = year()print("{}年是{}".format(lt[0], lt[1]))
time.sleep(3)elif num =='2':
lt = year()print(month(lt[0]))
time.sleep(3)elif num =='3':breakelse:print('请正确输入!')if __name__ =='__main__':
main()
案例3: 手机通讯录
import os
# 通讯录功能---展示部分:
program = {"1": "添加联系人", "2": "查看通讯录", "3": "修改联系人", "4": "删除联系人", "5": "清空通讯录", "6": "退出"}
# 手机通讯录date目录:
address = os.path.abspath('') # 当前py文件的上一级目录
old_address = fr"{address}\手机通讯录date.txt"
new_address = fr"{address}\手机通讯录date(copy).txt"
# 辅助函数
def quit():
if input("任意键退出查询") != '':
return None
def write_infomation():
per_name = input_not_empty("联系人的姓名:")
if is_exist(per_name):
print("此人已在通讯录中!")
return None
phone_num = input_not_empty("联系人的手机号:")
per_email = input_not_empty("联系人的邮箱:")
per_address = input_not_empty("联系人的地址:")
# 信息整合
per_infomation = f"姓名-{per_name}---手机号-{phone_num}---邮箱-{per_email}---地址-{per_address}\n"
return per_infomation
def input_not_empty(str):
""" 此函数的功能是判断输入的内容是否为空 """
while True:
content = input(str).strip()
if content == '':
print("内容不能为空,请重新输入!")
continue
return content
def is_exist(name, switch=1):
"""
此函数的功能是判断某人的信息是否已经存在于手机通讯录的数据中
参数 switch = 1 ---> 只查询模式
参数 switch = 2 ---> 返回对象模式
"""
if switch == 1:
with open(old_address, mode='rt', encoding='utf-8') as f1:
for line in f1:
list1 = line.strip().split("---") # [姓名-per_name, 手机号-phone_num, 邮箱-per_email, 地址-per_address]
list2 = list1[0].split('-') # [姓名, per_name]
if list2[1] == name:
return True
return False
if switch == 2:
with open(old_address, mode='rt', encoding='utf-8') as f1:
for line in f1:
list1 = line.strip().split("---") # [姓名-per_name, 手机号-phone_num, 邮箱-per_email, 地址-per_address]
list2 = list1[0].split('-') # [姓名, per_name]
if list2[1] == name:
return list1
return False
def date_is_empty():
with open(old_address, mode='rt', encoding='utf-8') as f1:
if f1.readline() == '':
return True
return False
def change_or_delete(switch):
"""
此函数的功能是修改或删除某人的信息
参数 switch = 1 ---> 修改模式
参数 switch = 2 ---> 删除模式
"""
# 文件信息转移:
def main(switch):
n = 0 # 名字异常(不用修改文件,直接退出到系统首页)-- 计数
with open(old_address, mode='rt', encoding='utf-8') as f1:
with open(new_address, mode='wt', encoding='utf-8') as f2:
# 主体部分:
if switch == 1:
name = input("请输入要修改信息的联系人的姓名:").strip()
if is_exist(name):
# change核心开始
# 先存好其他联系人的信息:
for line in f1:
# 辅助查找名字部分
list1 = line.strip().split(
"---") # [姓名-per_name, 手机号-phone_num, 邮箱-per_email, 地址-per_address]
list2 = list1[0].split('-') # [姓名, per_name]
# 查找名字:
if list2[1] == name:
old_per_info = line # 对要修改的信息,先备一份,以防要使用旧的数据
continue
# 主线部分
f2.write(line)
# 循环保存好了之后,再追加修改后的信息:
print('请进行修改...')
res = write_infomation()
if res:
f2.write(res)
print('修改成功!')
return quit()
print('修改失败!')
f2.write(old_per_info) # 修改失败后将旧的信息写入
return quit()
# change核心结束
print('修改失败!通讯录查无此人')
n = 1 # 计数为1,不用修改文件
quit()
return n
if switch == 2:
name = input("请输入要删除的联系人的姓名:").strip()
if is_exist(name):
# delete核心开始
# 先存好其他联系人的信息:
for line in f1:
# 辅助查找名字部分
list1 = line.strip().split(
"---") # [姓名-per_name, 手机号-phone_num, 邮箱-per_email, 地址-per_address]
list2 = list1[0].split('-') # [姓名, per_name]
# 查找名字:
if list2[1] == name:
continue
# 主线部分
f2.write(line)
# 循环保存结束
print("删除成功!")
return quit()
# delete核心结束
print('删除失败!通讯录查无此人')
n = 1 # 计数为1,不用修改文件
quit()
return n
# 文件伪装部分:
def camouflage():
os.remove(old_address)
os.rename(new_address, old_address)
# 执行部分:
if main(switch) != 1: # 返回值为n,若n的计数为1,不用修改文件(也就不用进行伪装部分),否则,进行修改文件,而且下一步要进行文件伪装的操作
camouflage()
# 通讯录功能函数
def func1():
# 信息写入
with open(old_address, mode='at', encoding='utf-8') as f1:
res = write_infomation()
if res:
f1.write(res)
print("保存成功!")
def func2():
per_info_list = []
all_info_list = []
while True:
funcnum = input('1.查看通讯录中所有信息\n2.查看某人的信息\n--->').strip()
if funcnum == '1':
if date_is_empty():
print("通讯录暂无信息")
return None
with open(old_address, mode='rt', encoding='utf-8') as f1:
for line in f1:
list1 = line.strip().split("---") # [姓名-per_name, 手机号-phone_num, 邮箱-per_email, 地址-per_address]
for i in range(4):
per_info_list.append(
list1[i].split('-')[1]) # 将列表中的第二个元素添加到--->个人列表中, 如:[姓名, per_name] 中的per_name
all_info_list.append(list1)
print(all_info_list) # 显示所有信息
return quit()
if funcnum == '2':
if date_is_empty():
print("通讯录暂无信息")
return None
name = input("被查询者的姓名:").strip()
if is_exist(name):
print(is_exist(name, 2))
return quit()
print("查询失败!通讯录中查无此人")
return quit()
print("输入有误,请重试!")
def func3():
change_or_delete(1)
def func4():
change_or_delete(2)
# 手机通讯录’核心‘执行函数
def address_book():
print("欢迎使用手机通讯录")
while True:
print("\n<<功能列表>>")
for i in program:
print(f"{i}:{program[i]}")
funcnum = input("请输入功能号>>").strip()
if funcnum == '1':
func1()
continue
if funcnum == '2':
func2()
continue
if funcnum == '3':
func3()
continue
if funcnum == '4':
func4()
continue
if funcnum == '5':
while True:
num = input("是否真的清空通讯录?数据不可恢复,请慎重考虑!\n1.Yes 2.No\n").strip()
if num == '1':
with open(old_address, 'at', encoding='utf-8') as f1:
f1.seek(0)
f1.truncate() # 清空--此刻光标所在位置之后的内容
print('已清空通讯录!')
break
if num == '2':
print('已取消——清空命令')
break
print("输入有误,请重试!")
continue
if funcnum == '6':
break
print("输入错误,请重新尝试!")
if __name__ == '__main__':
address_book()
案例4: 星期类单词识别
# 方法一
day_dict_1 = {'m': 'Monday', 'w': 'Wednesday', 'f': 'Friday'}
day_dict_2 = {'tu': 'Tuesday', 'th': 'Thursday', 'sa': 'saturday', 'su': 'Sunday'}
def func1():
while True:
# 先解决一个字母的
one = input("请输入第一个字母:").strip()
one = one.lower() # 将字母化为小写的形式
for i in day_dict_1:
if one == i:
print(day_dict_1[i])
return None
else:
if one.lower() in 'ts':
two = input("请输入第二个字母:")
two = two.lower() # 将字母化为小写的形式
for i in day_dict_2:
if one + two == i:
print(day_dict_2[i])
return None
else:
print("第二次输入有误")
continue
print('第一次输入有误')
if input('"1"键退出,否则继续') == '1':
return None
# 方法二
list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'saturday', 'Sunday']
list_head1 = ['m', 'tu', 'w', 'th', 'f', 'sa', 'su']
def func2():
while True:
first = input('请输入第一个字母:').strip()
for i in list_head1:
if first.lower() in i:
if first.lower() == i:
print(list[list_head1.index(i)])
return None
second = input('请输入第二个字母:').strip()
if second.lower() in 'uhau':
print(list[list_head1.index(first.lower() + second.lower())])
return None
else:
print('输入有误!')
break
if input('输入有误!\n"1"键退出,否则继续\n--->').strip() == '1':
break
# 48-57 65-90 97-122
if __name__ == '__main__':
func1()
func2()
案例5: 电子钱包
# 电子钱包功能
def login():
print('执行登录功能')
def scan():
print('执行扫描功能')
def transfer():
print('执行转账功能')
def query():
print('执行余额查询功能')
func_dic = \
{
'0': (None, '退出'),
'po': (login, '登录'),
'2': (scan, '扫描'),
'3': (transfer, '转账'),
'4': (query, '余额查询')
}
while True:
# 显示功能界面
for line in func_dic:
print(line, func_dic[line][1])
# 获取功能号
num = input('请输入功能号>>>')
# 判断并执行功能
if num == '0':
break
if num not in func_dic:
print('此功能不存在,小傻瓜!')
continue
func_dic[num][0]()
案例6: 随机分配办公室
import random
name ='ABCDEF'# 分组
elist =[[],[],[]]for i in name:
elist[random.randint(0,2)].append(i)for i in elist:# 打印print(f"第{
elist.index(i)+1}组:{
i}")