Python练习
1.。while,for循环小习题
#1、使用while循环输入 1 2 3 4 5 6 8 9 10
'''
count = 0
while count < 10:
count += 1 # count = count + 1
if count == 7:
print(' ')
else:
print(count)
count = 0
while count < 10:
count += 1 # count = count + 1
if count == 7:
continue
print(count)
'''
#2、输出 1-100 内的所有奇数
#方法一:
# count = 1
# while count < 101:
# print(count)
# count += 2
#方法二:
# count = 1
# while count < 101:
# if count % 2 == 1:
# print(count)
# count += 1
#3、求1-2+3-4+5 ... 99的所有数的和
# sum = 0
# count = 1
# while count < 100:
# if count % 2 == 0:
# sum = sum - count
# else:
# sum = sum + count
# count += 1
# print(sum)
#4、用户登陆(三次机会重试)
#input 心中有账号,密码 while
i = 0
while i < 3:
username = input('请输入账号:')
password = int(input('请输入密码:'))
if username == '咸鱼哥' and password == 123:
print('登录成功')
else:
print('登录失败请重新登录')
i += 1
#5、计算 1 - 2 + 3 ... + 99 中除了88以外所有数的总和
方法1:
i=1
sum=0
while i <100:
if i==88:
i += 1
continue
if i%2!=0:
sum=sum+i
else:
sum=sum-i
i += 1
print(sum)
-----------------------------------
方法2:
i=0
j=-1
sum=0
while i<99:
i=i+1
if i==88:
continue
else:
j = -j
sum=sum+i*j
print(sum)
#6、⽤户登陆(三次输错机会)且每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)
方式一:
i = 3
username = "yangxiaoer"
password = "123456"
while i>=0:
name = input("请输入你的用户名:")
if name == username:
passwd = input("请输入你的密码:")
if passwd == password:
print("登录成功。请稍后")
print('''
username: %s
password: %s
'''%(username,password))
break
else:
print("你的密码错误 请重新输入")
print("你还有%s次机会" % (i-1))
if i == 0:
print('您的机会已经用完,结束本次操作')
break
continue
else:
print("你的用户名错误!请重新输入")
print("你还有%s次机会"%(i-1))
i -= 1
----------------------------------------------------
方式2:
username = "yangxiaoer"
password = "123456"
i = 3
while i > 0:
zh = input("请输入你的账号:")
i -= 1
if zh == username:
mm = input("请输入你的密码:")
if mm == password:
print("验证成功.正在登陆......")
print('''恭喜你登陆成功!
欢迎用户进入
用户名 :%s
密码 :%s
'''%(zh,mm))
break
else:
if i == 0:
print("你的机会已经没了!game over 下次见!")
answer = input('再试试?Y or N')
if answer == 'Y':
i = 3
print("密码错误,请重新输入")
print("你还有"+str(i)+"次机会")
else:
print("请输入正确的用户名!")
if i == 0:
print("你的机会已经没了!")
answer = input('再试试?Y or N')
if answer == 'Y':
i = 3
print("你还有" + str(i) + "次机会")
else:
print('你TM要不要脸')
函数篇:
1.写函数,接受N个数字,求这些参数数字的和。
def sun_func(*args):
total = 0
for i in args:
total += i
return total
print(sun_func(1,2,3,9,34,543))
2.读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
a = 10
b = 20
def test(a, b):
print(a, b)
c = test(b, a)
print(c)
#(20, 10)
#None
3.读代码,回答:代码中,打印出来的值的a,b,c分别是什么?为什么?
a = 10
b = 20
def test2(a, b):
a = 3
b = 5
print(a, b)
c = test2(b, a)
print(c)
#(3, 5)
#None
1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func(lis):
return lis[1::2]
2.写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5.
def func(x):
return len(x) > 5
3.写函数,检查传入列表的长度,如果大于2,那么仅保存前两个长度的内容,并将新内容返回给调用者。
def func(lis):
if len(lis) > 2:
return lis[:2]
但是切片有一个特性,多了不报错,所以可以这样写
def func(lis):
return lis[:2]
4.写函数,计算传入字符串中【数字】、【字母】、【空格】以及【其他】的个数,并返回结果。
def func(s): # 'fsadsad432 edfd@#$'
num = 0 # 计算数字的个数
alpha = 0 # 字母
space = 0 # 空格
other = 0 # 其他
for i in s:
if i.isdigit():
num += 1
elif i.isalpha():
alpha += 1
elif i.isspace():
space += 1
else:
other += 1
return num,alpha,space,other
print(func('fsadsad432 edfd@#$'))
#结果
#(3, 11, 1, 3)
但是这样有个问题,就是没人知道你传回来的是什么,如果需要知道传回来的是什么,需要看源代码。所以最好要用字典。
def func(s): # 'fsadsad432 edfd@#$'
dic = {'num':0,'alpha':0,'space':0,'other':0}
for i in s:
if i.isdigit():
dic['num'] += 1
elif i.isalpha():
dic['alpha'] += 1
elif i.isspace():
dic['space'] += 1
else:
dic['other'] += 1
return dic
print(func('fsadsad432 edfd@#$'))
#结果
#{'alpha': 11, 'num': 3, 'other': 3, 'space': 1}
5.写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
# 'sdsad sad a' 对于字符串来说,元素为空内容表示为空格
# [1,2,3,4,'',[],()] 对于列表和元组来说,空内容表示''或[]或()
def func(x):
if type(x) is str and x: #参数是字符串,并且字符串不为空
for i in x:
if i==' ':
return True
elif x and type(x) is list or type(x) is tuple:
for i in x:
if not i:
return True
elif not x: #表示字符串或者列表元组本身就为空,也算空
return True
#这种情况下,不需要最后的else,因为内容中没有空内容的话,默认return None,相当于False
6.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {'k1':'v1v1','k2':[11,22,33,44]}
# PS:字典中的value只能是字符串或列表
def func(dic):
for k in dic.values():
pass
#一般不这么写,因为正常情况下,vlaue里面的值很大,有可能是嵌套的列表或者字典,如果直接取values,比较浪费内存。
def func(dic):
for k in dic:
if len(dic[k]) > 2:
dic[k] = dic[k][:2]
return dic
dic = {"k1":"v1v1","k2":[11,22,33,44]}
print(func(dic))
7.写函数,接受两个数字参数,返回比较大的那个数字。
三元运算
def func(a,b):
return a if a > b else b
8.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。
def func(filename, old, new):
with open(filename, encoding="utf-8") as f, open("%s.bak" % filename, "w", encoding="utf-8") as f2:
for line in f:
if old in line:
line = line.replace(old, new)
# 写文件
f2.write(line)
import os
os.remove(filename) # 删除文件
os.rename("%s.bak" % filename, filename) # 重命名文件
2.
1|0装饰器篇
装饰器篇:
1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。
def login(func):
def inner(*args, **kwargs):
"""登录程序
"""
username = input('username:')
password = input('password:')
if username == 'boss_gold' and password == '22222':
ret = func(*args, **kwargs) # func是被装饰的函数
return ret
else:
print('登录失败')
return inner
@login
def shoplist_add():
print('增加一件物品')
@login
def shoplist_del():
print('删除一件物品')
shoplist_add()
shoplist_del()
# 但是这样有一样不好,就是运行了shoplist_add()之后再运行shoplist_del()还是要输入 用户名和密码。
FLAG = False
def login(func):
def inner(*args, **kwargs):
global FLAG
"""登录程序
"""
if FLAG:
ret = func(*args, **kwargs) # func是被装饰的函数
return ret
else:
username = input('username:')
password = input('password:')
if username == 'boss_gold' and password == '22222':
FLAG = True
ret = func(*args, **kwargs) # func是被装饰的函数
return ret
else:
print('登录失败')
return inner
@login
def shoplist_add():
print('增加一件物品')
@login
def shoplist_del():
print('删除一件物品')
shoplist_add()
shoplist_del()
# 2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件。
def log(func):
def inner(*args, **kwargs):
with open('log', 'a', encoding='utf-8') as f:
f.write(func.__name__ + '\n')
ret = func(*args, **kwargs)
return ret
return inner
@log
def shoplist_add():
print('增加一件物品')
@log
def shoplist_del():
print('删除一件物品')
shoplist_add()
2|0生成器篇
3.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕
def check_file(filename,aim):
with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
for i in f:
if aim in i:
yield i
g = check_file('1.复习.py','生成器')
for i in g:
print(i.strip())
4.写生成器,从文件中读取内容,在每一次读取到的内容之前加上‘***’之后再返回给用户。
def check_file(filename):
with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
for i in f:
yield '***'+i
for i in check_file('1.复习.py'):
print(i.strip())
__EOF__

本文作者:😎
本文链接:https://www.cnblogs.com/dongye95/p/10159510.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/dongye95/p/10159510.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!