python练习——小程序
1、打印0-10(while/for)
count = 0
while count < 11:
print(count)
count += 1
for i in range(11):
print(i)
2、求1-100所有数的和
a = 1
sum = 0
while a < 101:
sum += a
# print(sum)
a += 1
print(sum)
3、打印1-100之间的偶数
for n in range(1,101):
if n % 2 == 0:
print(n)
4、打印1-100之间的奇数
for n in range(1,101):
if n % 2 == 1:
print(n)
5、求1-2+3-4+5......+99的和
count = 1
s1 = 0
s2 = 0
while count < 100:
if count % 2 == 0:
s1 += -count
else:
s2 += count
count += 1
s = s1 + s2
print(s)
6、用户登录(三次机会重试)
# 任意用户输入错误三次即退出程序
Name = 'shj'
Pwd = '123'
count = 0
while count < 3:
name = input("please input your name:")
pwd = input("please input your password:")
if name == Name and pwd == Pwd:
print("\033[32mlogin successful..\033[0m")
break
else:
print("Invalid username and password..")
count += 1
# 同一用户输入错误三次即退出程序
info = {
'shj':'123',
'xxn':'456',
'xka':'aaa'
}
l = []
while True:
name = input("please input your name:")
pwd = input("please input your password:")
if name not in info:
print("\033[31m您输入的用户不存在。\033[0m")
l.append(name)
if l.count(name)>2:
print("\033[31m您已尝试太多次,程序退出\033[0m")
break
else:
if pwd == info[name]:
print("\033[32mlogin successful..\033[0m")
break
else:
l.append(name)
if l.count(name) > 2:
print("\033[31m密码输入次数过多,程序退出。。\033[0m")
break
7、猜年龄游戏
要求:
允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
age_of_shj = 23
count = 0
while count < 3:
guess_age = int(input("输入你猜的数:"))
if guess_age == age_of_shj:
print("\033[32m恭喜你猜对了!\033[0m")
break
elif guess_age < age_of_shj:
print("太小了,往大了猜。")
else:
print("太大了,往小了猜。")
count += 1
else:
print("\033[31m你尝试太多次了,程序退出!\033[0m")
8、猜年龄游戏升级版
要求:
允许用户最多尝试3次
每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
如何猜对了,就直接退出
age_of_shj = 23
count = 0
while count < 3:
guess_age = int(input("输入你猜的数:"))
if guess_age == age_of_shj:
print("\033[32m恭喜你猜对了!\033[0m")
break
elif guess_age < age_of_shj:
print("太小了,往大了猜。")
else:
print("太大了,往小了猜。")
count += 1
if count == 3:
ask = input("Do you want to continue?(y/n)")
if ask in ['Y','y']:
count = 0
elif ask in ['N','n']:
break
else:
print("您的输入有误,请重新输入")
9、打印九九乘法表
for i in range(1,10):
for j in range(i):
j += 1
print("%s * %s = %s"%(i,j,i*j),end="\t")
print()
10、打印金字塔
'''
* 空格=4,*=1
*** 空格=3,*=3
***** 空格=2,*=5
******* 空格=1,*=7
********* 空格=0,*=9
'''
level = int(input('请输入金字塔高度:'))
for num in range(level):
print(" "*(level-num-1),end="")
print("*"*(num*2-1))
第二种方法:
用字符串的center方法
level = int(input('请输入金字塔高度:'))
for i in range(1,level+1):
print(('*'*(2*i-1)).center((2*level-1),' '))
11、统计元组中所有数据属于字符串的个数
# 数据:t1 = (1, 2, '3', '4', 5, '6')
# 结果:3
t1 = (1, 2, '3', '4', 5, '6')
count = []
for t in t1:
if isinstance(t,str):
count.append(t)
print(len(count))
12、将以下数据存储为字典类型
数据:info = "name:Owen|age:18|gender:男"
结果:{'name': 'Owen', 'age': 18, 'gender': '男'}
注:年龄存储为数字类型
info = "name:Owen|age:18|gender:男"
l = info.split("|")
l1 = []
for l2 in l:
s = l2.split(":")
l1.append(s)
dic = dict(l1)
dic['age']=18
print(dic)
13、完成数据的去重
数据:t3 = (1, 2, 1, 2, 3, 5, 9)
结果:t3 = (1, 2, 3, 5, 9)
注:从不考虑顺序、考虑顺序两方面完成
t3 = (1, 2, 1, 2, 3, 5, 9)
# 不考虑顺序
t3 = set(t3)
t3 = tuple(t3)
print(t3)
# 考虑顺序
l = []
for t in t3:
if t not in l:
l.append(t)
l.sort()
print(tuple(l))
14、计算元组中所有可以转换为数字的数据的总和
数据:t4 = (10, 'abc', '100', '3')
运算结果:113
t4 = (10, 'abc', '100', '3')
s = 0
for t in t4:
if isinstance(t,int):
s += t
elif t.isdigit():
s += int(t)
print(s)
15、计算元组中所有可以转换为数字的数据的总和
数据:t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,))
运算结果:11118
提示:
-- 利用字符串isnumeric()判断汉字
-- 利用字典{'壹': 1 ...}将汉字转换为数字
-- 利用isinstance()将list和tuple中数据取出来
-- 先将所有转化为数字的数据存放在一个单列集合中,在做运算
t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,))
change = str.maketrans('壹肆','14')
s = 0
for t in t4:
if isinstance(t,int):
s += t
elif isinstance(t,list):
s += t[0]
elif isinstance(t,tuple):
s += t[0]
elif t.isdigit():
s += int(t)
elif t in ['壹','肆']:
s += int(t.translate(change))
print(s)
16、完成录入电话本
需求:
-- 从键盘中录入姓名(不区分大小写):
-- 姓名必须是全英文组成,不是则重新录入姓名,如果是q,代表退出 #str.isalpha():True if 只包含字母
-- 从键盘中再录入电话:
-- 电话必须为数字且长度必须是11位(不能转换为数字) #str.isdigit(): True if 只包含数字
-- 如果出现姓名相同,则保留最后一次电话号码
-- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成
-- {
'O': {
'Owen': '13355667788'
}
}
最终数据,分组名一定大写:
{
'E': {
'egon': '17788990000',
'engo': '16633445566'
},
'O': {
'Owen': '13355667788'
}
}
# 电话本
phone_map = {}
# 是否退出系统
is_over = False
while not is_over:
# 姓名初始制空,完成只有姓名输入正确才录入电话
name = ''
while True:
# 姓名必须录入正确
if not name:
name = input("name:")
if name == 'q':
# 退出系统
is_over = True
break
elif not name.isalpha():
# 录入错误,置空名字
print('name error')
name = ''
continue
# 录入电话,保证是11位的数字字符串
phone = input("phone:")
if not (phone.isdigit() and len(phone) == 11):
continue
# 取组名
group = name[0:1].upper()
# 对于组名的操作:无组名,添加分组 | 有组名,不操作
phone_map.setdefault(group, {})
phone_map[group][name] = phone
# 一条信息添加完毕,重置信息
name = ''
phone = ''
print('录入成功')
print(phone_map)
17、完成登录注册系统(从空文件开始做)
需求:
1.可以循环登录注册,输入1代表选择登录功能,输入2代表注册功能,输入0代表退出其他,其他输入代表输入有误,重输
2.用户的账号密码信息存放在usr.txt文件中,保证用户注册成功后,重启系统,用户信息仍然保存
3.登录在账号验证通过才输入密码验证登录,账号验证三次失败自动进入注册功能,登录三次验证失败自动退出系统
4.第一次注册,文件写入 账号:密码 信息,再次注册追加写入 |账号:密码 信息
c = 0
f = open('usr.txt','r+',encoding='utf-8')
data = f.read()
dic = {}
if data != '':
data1 = data.split('|')
for msg in data1:
k,v = msg.split(':')
dic[k] = v
tag = True
while tag:
print('''
0 退出
1 登录
2 注册
''')
choice = input("请输入您要进行的操作:").strip()
if choice == '0':
tag = False
elif choice == '1':
while tag:
name = input("username:").strip()
if name not in dic :
if c==2:
print("此用户不存在,请注册")
while tag:
name = input("请设置账户名:").strip()
pwd = input("请设置密码:").strip()
if data == '':
f.write(name + ':' + pwd)
else:
f.write('|'+name+':'+pwd)
print("注册成功")
tag = False
else:
print('未注册!')
c += 1
else:
count = 0
while count < 3:
pwd = input("password:").strip()
if pwd == dic[k]:
print("登录成功")
break
else:
print("密码错误")
count += 1
if count == 2:
tag = False
tag =False
elif choice == '2':
while tag:
name = input("请设置账户名:").strip()
pwd = input("请设置密码:").strip()
if name in dic:
print("用户名已存在,注册失败")
continue
else:
if data == '':
f.write(name+':'+pwd)
else:
f.write('|'+name+':'+pwd)
print("注册成功")
tag = False
else:
print("输入有误,请重新输入")
f.close()
18、用函数改造上题的代码
# 获取文件中用户信息
def get_usr_map():
global dic,data,f,k
with open('user.txt','r+',encoding='utf-8') as f:
data = f.read()
dic = {}
if data != '':
data1 = data.split('|')
for msg in data1:
k,v = msg.split(':')
dic[k] = v
# 注册
def register():
print('注册页面')
get_usr_map()
while True:
name = input("请设置账户名:").strip()
pwd = input("请设置密码:").strip()
if name in dic:
print("用户名已存在,注册失败")
continue
else:
f = open('user.txt','a+',encoding='utf-8')
if data == '':
f.write(name + ':' + pwd)
else:
f.write('|' + name + ':' + pwd)
print("注册成功")
f.close()
break
# 登录
def login():
print('登录页面')
get_usr_map()
c = 0
while True:
name = input("username:").strip()
if name not in dic:
if c == 2:
print("此用户不存在,请注册!")
register()
break
else:
print("当前用户未注册!")
c += 1
else:
count = 0
while count < 3:
pwd = input("password:").strip()
if pwd == dic[k]:
print("登录成功")
break
else:
print("密码错误")
if count == 2:
break
count += 1
break
# 启动系统
def start():
print("系统启动!")
while True:
tag = input("""请输入操作指令:
0:退出
1:登录
2:注册
>>>: """)
if tag.isdigit():
tag = int(tag)
if tag == 0:
break
elif tag == 1:
login()
break
elif tag == 2:
register()
break
else:
print("输入有误,请重新输入")
# 启动系统(入口)
start()
19、装饰器的题目
'''
拓展题:
1.原功能:entry_grade
* ) 可以完成『成绩录入功能』
-- 可以重复录入成绩,默认所有输入都是合法的(1~100之间的数)
-- 当录入成绩为0时,结束成绩的录入
-- 将录入的成绩保存在列表中并返回给外界,eg:[90, 80, 50, 70]
2.选择课程装饰器:choose_course
*) 为『成绩录入功能』新增选择课程的拓展功能,达到可以录入不同学科的成绩
-- 可以重复输入要录制的学科名,然后就可以进入该门学科的『成绩录入功能』,
录入结束后,可以进入下一门学科成绩录入
- - 当输入学科名为q时,结束所有录入工作
- - 将学科成绩保存在字典中并返回给外界,
eg:{'math': [90, 80, 50, 70], 'english': [70, 50, 55, 90]}
3.处理成绩装饰器: deal_fail
*) 可以将所有录入的成绩按60分为分水岭,转换为"通过" | "不通过"进行存储
- - 如果只对原功能装饰,结果还为list返回给外界,eg:["通过", "通过", "不通过", "通过"]
- - 如果对已被选择课程装饰器装饰了的原功能再装饰,结果就为dict返回给外界,
eg:{'math': ["通过", "通过", "不通过", "通过"], 'english': ["通过", "不通过", "不通过", "通过"]}
'''
def deal_fail(fn):
def inner(*args,**kwargs):
res = fn() #{'math': [80, 70, 60], 'chinese': [90, 99, 98]}
for k in res:
l = []
for v in res[k]:
if int(v) >= 60:
l.append('通过')
else:
l.append('不通过')
res[k] = l
print(res)
return res
return inner
def choose_course(fn):
def inner(*args,**kwargs):
stu_dic = {}
while True:
choice = input("请输入要录入的学科(按q退出):")
if choice == 'q':
break
else:
score_lis = fn()
stu_dic[choice]=score_lis
print(stu_dic) # {'math': [80, 70, 60], 'chinese': [90, 99, 98]}
return stu_dic
return inner
@deal_fail
@choose_course
def entry_grade():
scorelist = []
while True:
score = int(input("请输入录入的成绩(按0退出):"))
if score == 0:
print(scorelist)
break
elif score in range(1,101):
scorelist.append(score)
else:
print("\033[31m非法输入!!!\033[0m")
return scorelist
entry_grade()
python练习——小程序的更多相关文章
- 一个python爬虫小程序
起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...
- python 购物车小程序
python 购物车小程序 功能要求:1.启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买商品3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. ...
- appium+python 微信小程序的自动化
sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q -p 8889 -s addons.py http: ...
- Python基本小程序
目录 Python基本小程序 一.筛选从1-100所有的奇数 二.筛选从0-100所有的偶数 三.求1-100之间所有的偶数和,奇数和 四.三个数由小到大输出 五.四个数字重复数字的三位数 Pytho ...
- 【python】——小程序之电话薄
初学python,写一个小程序练习一下.主要功能就是增删改查的一些功能.主要用到的技术:字典的使用,pickle的使用,io文件操作.代码如下: import pickle #studentinfo ...
- 适合新手的Python爬虫小程序
介绍:此程序是使用python做的一个爬虫小程序 爬取了python百度百科中的部分内容,因为这个demo是根据网站中的静态结构爬取的,所以如果百度百科词条的html结构发生变化 需要修改部分内容. ...
- Python UDP小程序
为了做UDP的测试,采用了nc和Python的服务器端. nc的安装和使用: yum install -y nc nc -vuz Python的UDP服务器端小程序: # -*- coding: UT ...
- 40个Python入门小程序
有不少同学学完Python后仍然很难将其灵活运用.我整理 37 个Python入门的小程序.在实践中应用Python会有事半功倍的效果. 分享 Github 项目,里面收集了 Python 学习资料 ...
- python获取小程序手机号并绑定
最近在做小程序开发,在其中也遇到了很多的坑,获取小程序的手机号并绑定就遇到了一个很傻的坑. 流程介绍 官方流程图 小程序使用方法 需要将 <button> 组件 open-type 的值设 ...
- python经典小程序集锦(一) 实现九九乘法表
本篇文章主要是收集整理一些小程序以供大家娱乐,或者是在面试的时候使用到.文章会持续更新,希望大家收藏关注哦. 1.代码实现过程 for i in range(1, 10): for j in rang ...
随机推荐
- UltraEdit的免费激活方法
本来前段时间用UE编辑器用的好好的,然后今天突然提示我使用到期,需要购买激活.一脸懵逼中,只好再次激活,谁知道按照原来的方法激活的时候一直提示您输入的许可证id或密码错误 请您检查注册邮件并且重试. ...
- python操作pymongo
import pymongo from bson import ObjectId mongo_client = pymongo.MongoClient(host="127.0.0.1&quo ...
- webkit滤镜
-webkit-filter: grayscale(1);/*灰度*/ -webkit-filter: sepia(1);/*褐色*/ -webkit-filter: saturate(1);/*饱和 ...
- python_13(前端—cs)
第1章 前端三大标准:1.1 三大标准介绍 1.2 html标签一览表 第2章 结构标准 html 2.1 html结构 2.2 html常用标签 2.2.1 h1-h6 2.2.2 span 2.2 ...
- gbk编码文件传输json实例
cline.php <?php $str='此地无银三百两'; $str = iconv('gbk', 'utf-8', $str); //Json只支持utf-8编码,如果不进行转码的话,服务 ...
- Java并发——ThreadPoolExecutor线程池解析及Executor创建线程常见四种方式
前言: 在刚学Java并发的时候基本上第一个demo都会写new Thread来创建线程.但是随着学的深入之后发现基本上都是使用线程池来直接获取线程.那么为什么会有这样的情况发生呢? new Thre ...
- 享元模式及php实现
享元模式: 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用.由于享元模式要求 ...
- 【学习笔记】深入理解js原型和闭包(3)——prototype原型
既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...
- new操作符具体干了什么
function Func(){ }; var newFunc=new Func (); new共经过了4个阶段 1.创建一个空对象 var obj=new Object(); 2.设置原型链 把 o ...
- redis安装(windows)
软件环境:由于redis只有linux版,而windows版是微软自己做的,最新版只到3.2.100(linux的版本已经到5.x) 1.1.1. redis安装 首先去官网下载安装包 得到的安装文 ...