Python基础教程——60个基础练习(三)

news2024/11/27 20:24:21

41-字符串格式化

"%s is %s years old" % ('bob', 23)  # 常用   
"%s is %d years old" % ('bob', 23)  # 常用   
"%s is %d years old" % ('bob', 23.5)  # %d 是整数 常用   
"%s is %f years old" % ('bob', 23.5)   
"%s is %5.2f years old" % ('bob', 23.5)  # %5.2f 是宽度为 5,2 位小数   
"97 is %c" % 97   
"11 is %#o" % 11  # %#o 表示有前缀的 8 进制   
"11 is %#x" % 11   "%10s%5s" % ('name', 'age')  # %10s 表示总宽度为 10,右对齐,常用   
"%10s%5s" % ('bob', 25)   
"%10s%5s" % ('alice', 23)   
"%-10s%-5s" % ('name', 'age')  # %-10s 表示左对齐,常用   
"%-10s%-5s" % ('bob', 25)   
"%10d" % 123   "%010d" % 123    
     
"{} is {} years old".format('bob', 25)   
"{1} is {0} years old".format(25, 'bob')   
"{:<10}{:<8}".format('name', 'age')   

42-shutil 模块常用方法

import shutil         

with open('/etc/passwd', 'rb') as sfobj:      
 with open('/tmp/mima.txt', 'wb') as dfobj:           
   shutil.copyfileobj(sfobj, dfobj) # 拷贝文件对象         
   
shutil.copyfile('/etc/passwd', '/tmp/mima2.txt')   
shutil.copy('/etc/shadow', '/tmp/')  # cp /etc/shadow /tmp/   
shutil.copy2('/etc/shadow', '/tmp/')  # cp -p /etc/shadow /tmp/   
shutil.move('/tmp/mima.txt', '/var/tmp/')  # mv /tmp/mima.txt /var/tmp/   
shutil.copytree('/etc/security', '/tmp/anquan') # cp -r /etc/security /tmp/anquan   
shutil.rmtree('/tmp/anquan')  # rm -rf /tmp/anquan   # 将 mima2.txt 的权限设置成与/etc/shadow 一样   
shutil.copymode('/etc/shadow', '/tmp/mima2.txt')   
# 将 mima2.txt 的元数据设置成与/etc/shadow 一样   
# 元数据使用 stat /etc/shadow 查看   
shutil.copystat('/etc/shadow', '/tmp/mima2.txt')   
shutil.chown('/tmp/mima2.txt', user='zhangsan', group='zhangsan')   

43-练习:生成文本文件

import os         
def get_fname():       
while True:           
fname = input('filename: ')           
if not os.path.exists(fname):               
break           
print('%s already exists. Try again' % fname)             
return fname        
def get_content():       
content = []       
print('输入数据,输入 end 结束')       
while True:           
line = input('> ')           
if line == 'end':               
break           
content.append(line)             
return content         
def wfile(fname, content):       
with open(fname, 'w') as fobj:           
fobj.writelines(content)         
if __name__ == '__main__':       
fname = get_fname()       
content = get_content()       
content = ['%s\n' % line for line in content]       
wfile(fname, content)   

44-列表方法

alist = [1, 2, 3, 'bob', 'alice']   
alist[0] = 10   
alist[1:3] = [20, 30]   
alist[2:2] = [22, 24, 26, 28]   
alist.append(100)   
alist.remove(24)  # 删除第一个 24   
alist.index('bob')  # 返回下标   
blist = alist.copy()  # 相当于 blist = alist[:]   
alist.insert(1, 15)  # 向下标为 1 的位置插入数字 15   
alist.pop()  # 默认弹出最后一项   
alist.pop(2) # 弹出下标为 2 的项目   
alist.pop(alist.index('bob'))   
alist.sort()   
alist.reverse()   
alist.count(20)  # 统计 20 在列表中出现的次数   
alist.clear()  # 清空   
alist.append('new')   
alist.extend('new')   
alist.extend(['hello', 'world', 'hehe'])   

45-检查合法标识符

import sys   
import keyword   
import string         

first_chs = string.ascii_letters + '_'   
all_chs = first_chs + string.digits         

def check_id(idt):       
if keyword.iskeyword(idt):           
return "%s is keyword" % idt             

if idt[0] not in first_chs:           
return "1st invalid"             

for ind, ch in enumerate(idt[1:]):           
if ch not in all_chs:               
return "char in postion #%s invalid" % (ind + 2)             
return "%s is valid" % idt         
if __name__ == '__main__':       
print(check_id(sys.argv[1]))  # python3 checkid.py abc@123   

46-创建用户,设置随机密码

randpass 模块参见《37-生成密码/验证码》         
import subprocess   
import sys   
from randpass import gen_pass         

def adduser(username, password, fname):       
data = """user information:   
%s: %s   
"""       
subprocess.call('useradd %s' % username, shell=True)       
subprocess.call(           
'echo %s | passwd --stdin %s' % (password, username),           
shell=True       )       
with open(fname, 'a') as fobj:           
fobj.write(data % (username, password))         

if __name__ == '__main__':       
username = sys.argv[1]       
password = gen_pass()       
adduser(username, password, '/tmp/user.txt')  
 # python3 adduser.py john   

47-列表练习:模拟栈操作

stack = []         
def push_it():       
item = input('item to push: ')       
stack.append(item)         
def pop_it():       
if stack:          
print("from stack popped %s" % stack.pop())         
def view_it():       
print(stack)         
def show_menu():       
cmds = {'0': push_it, '1': pop_it, '2': view_it}  # 将函数存入字典       
prompt = """(0) push it   
(1) pop it   
(2) view it   
(3) exit   
Please input your choice(0/1/2/3): """             

while True:           
# input() 得到字符串,用 strip() 去除两端空白,再取下标为 0 的字符           
choice = input(prompt).strip()[0]           
if choice not in '0123':               
print('Invalid input. Try again.')               
continue                 

if choice == '3':               
break                 

cmds[choice]()    
          
if __name__ == '__main__':       
show_menu()   

48-实现 Linux 系统中 unix2dos 功能

import sys         

def unix2dos(fname):       
dst_fname = fname + '.txt'             

with open(fname) as src_fobj:           
with open(dst_fname, 'w') as dst_fobj:               
for line in src_fobj:                   
line = line.rstrip() + '\r\n'                   
dst_fobj.write(line)         

if __name__ == '__main__':       
unix2dos(sys.argv[1])   

49-动画程序:@从一行#中穿过

#\r 是回车不换行         
import time   
      
length = 19   
count = 0        
 
while True:       
print('\r%s@%s' % ('#' * count, '#' * (length - count)), end='')       
try:           
time.sleep(0.3)       
except KeyboardInterrupt:           
print('\nBye-bye')           
break       
if count == length:           
count = 0       
count += 1   

50-字典基础用法

adict = dict()  # {}   
dict(['ab', 'cd'])   
bdict = dict([('name', 'bob'),('age', 25)])   
{}.fromkeys(['zhangsan', 'lisi', 'wangwu'], 11)         

for key in bdict:       
print('%s: %s' % (key, bdict[key]))         

print("%(name)s: %(age)s" % bdict)         

bdict['name'] = 'tom'   
bdict['email'] = 'tom@tedu.cn'         

del bdict['email']   
bdict.pop('age')   
bdict.clear()   

51-字典常用方法

adict = dict([('name', 'bob'),('age', 25)])   
len(adict)   
hash(10)  # 判断给定的数据是不是不可变的,不可变数据才能作为 key   
adict.keys()   
adict.values()   
adict.items()   # get 方法常用,重要   
adict.get('name')  # 取出字典中 name 对应的 value,如果没有返回 None   
print(adict.get('qq'))  # None   
print(adict.get('qq', 'not found'))  # 没有 qq,返回指定内容   
print(adict.get('age', 'not found'))   
adict.update({'phone': '13455667788'})   

52-集合常用方法

# 集合相当于是无值的字典,所以也用{}表示   
myset = set('hello')   
len(myset)   
for ch in myset:       
print(ch)        

aset = set('abc')  
bset = set('cde')   
aset & bset  # 交集   
aset.intersection(bset)  # 交集   
aset | bset  # 并集   
aset.union(bset)  # 并集   
aset - bset  # 差补   
aset.difference(bset)  # 差补  
aset.add('new')   
aset.update(['aaa', 'bbb'])   
aset.remove('bbb')   
cset = set('abcde')   
dset = set('bcd')   
cset.issuperset(dset)  # cset 是 dset 的超集么?   
cset.issubset(dset)  # cset 是 dset 的子集么?   

53-集合实例:取出第二个文件有,第一个文件没有的行

# cp /etc/passwd .   
# cp /etc/passwd mima   
# vim mima  -> 修改,与 passwd 有些区别        
with open('passwd') as fobj:       
aset = set(fobj)         

with open('mima') as fobj:       
bset = set(fobj)         

with open('diff.txt', 'w') as fobj:       
fobj.writelines(bset - aset)   

54-字典练习:模拟注册/登陆

import getpass         

userdb = {}         

def register():       
username = input('username: ')       
if username in userdb:           
print('%s already exists.' % username)       
else:           
password = input('password: ')           
userdb[username] = password         

def login():       
username = input('username: ')       
password = getpass.getpass("password: ")       
if userdb.get(username) != password:           
print('login failed')      
else:           
print('login successful')         

def show_menu():       
cmds = {'0': register, '1': login}       
prompt = """(0) register   
(1) login   
(2) exit   
Please input your choice(0/1/2): """           

while True:              
choice = input(prompt).strip()[0]              
if choice not in '012':                  
print('Invalid inupt. Try again.')                  
continue              
if choice == '2':                  
break                    

cmds[choice]()       

if __name__ == '__main__':       
show_menu()   

55-计算千万次加法运算时间

import time         
result = 0   
start = time.time()  # 返回运算前时间戳   
for i in range(10000000):       
result += i   
end = time.time()   # 返回运算后时间戳   
print(result)   
print(end - start)   

56-时间相关模块常用方法

import time         
t = time.localtime()  # 返回当前时间的九元组   
time.gmtime()  # 返回格林威治 0 时区当前时间的九元组   
time.time()  # 常用,与 1970-1-1 8:00 之间的秒数,时间戳   
time.mktime(t)  # 把九元组时间转成时间戳   
time.sleep(1)   
time.asctime()  # 如果有参数,是九元组形式   
time.ctime()  # 返回当前时间,参数是时间戳,常用   
time.strftime("%Y-%m-%d") # 常用   
time.strptime('2018-07-20', "%Y-%m-%d")  # 返回九元组时间格式   
time.strftime('%H:%M:%S')         

###########################################   
from datetime import datetime   
from datetime import timedelta   datetime.today()  # 返回当前时间的 datetime 对象   
datetime.now()  # 同上,可以用时区作参数   
datetime.strptime('2018/06/30', '%Y/%m/%d')  # 返回 
datetime 对象   
dt = datetime.today()   
datetime.ctime(dt)   
datetime.strftime(dt, "%Y%m%d")    
     
days = timedelta(days=90, hours=3)  # 常用   
dt2 = dt + days   
dt2.year   
dt2.month   
dt2.day   
dt2.hour   

57-os 模块常用方法

import os         
os.getcwd()  # 显示当前路径   
os.listdir()  # ls -a   
os.listdir('/tmp')  # ls -a /tmp   
os.mkdir('/tmp/mydemo')  # mkdir /tmp/mydemo   
os.chdir('/tmp/mydemo')  # cd /tmp/mydemo   
os.listdir()   
os.mknod('test.txt')  # touch test.txt   
os.symlink('/etc/hosts', 'zhuji')  # ln -s /etc/hosts zhuji   
os.path.isfile('test.txt')  # 判断 test.txt 是不是文件   
os.path.islink('zhuji')  # 判断 zhuji 是不是软链接   
os.path.isdir('/etc')   
os.path.exists('/tmp')  # 判断是否存在   
os.path.basename('/tmp/abc/aaa.txt')   
os.path.dirname('/tmp/abc/aaa.txt')   
os.path.split('/tmp/abc/aaa.txt')   
os.path.join('/home/tom', 'xyz.txt')   
os.path.abspath('test.txt')  # 返回当前目录 test.txt 的绝对路径   

58-pickle 存储器

import pickle   
"""以前的文件写入,只能写入字符串,如果希望把任意数据对象(数字、列表等)写入文件,   
取出来的时候数据类型不变,就用到 pickle 了   
"""         

# shop_list = ["eggs", "apple", "peach"]   
# with open('/tmp/shop.data', 'wb') as fobj:   
#     pickle.dump(shop_list, fobj)         

with open('/tmp/shop.data', 'rb') as fobj:       
mylist = pickle.load(fobj)         

print(mylist[0], mylist[1], mylist[2])   

59-异常处理基础

try:   # 把有可能发生异常的语句放到 try 里执行       
n = int(input("number: "))       
result = 100 / n       
print(result)   
except ValueError:       
print('invalid number')   
except ZeroDivisionError:       
print('0 not allowed')   
except KeyboardInterrupt:       
print('Bye-bye')   
except EOFError:       
print('Bye-bye')         
print('Done')   

60-异常处理完整语法

try:       
n = int(input("number: "))       
result = 100 / n   
except (ValueError, ZeroDivisionError):       
print('invalid number')   
except (KeyboardInterrupt, EOFError):       
print('\nBye-bye')   
else:       
print(result)  # 异常不发生时才执行 else 子句   
finally:      
print('Done')  # 不管异常是否发生都必须执行的语句         

# 常用形式有 try-except 和 try-finally

最后这里免费分享给大家一份Python学习资料,包含视频、源码。课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程,手机也能学习
历年互联网企业Python面试真题,复习时非常方便

- End -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ListBox基本用法

作用&#xff1a;列表框&#xff0c;用于以列表的形式展示数据。 常用属性&#xff1a; 允许多列显示数据 添加数据项集合 常用事件&#xff1a; 选择项变化时触发该事件 后台代码示范&#xff1a; //列表框项目选择变化时被触发private void listBox1_SelectedIndexChanged…

Flutter 跳转应用市场评分——超简洁实现

最近在做flutter跳转去应用市场评分的功能&#xff0c;虽然是一个很小的功能&#xff0c;但是要做的既简单又高效&#xff0c;同时又能把细节考虑到&#xff0c;还是有坑要走的&#xff0c;这边记录一下。 背景 做应用市场相关的运营&#xff0c;在app内增加评分引导&#xf…

经典目标检测R-CNN系列(1)开山之作R-CNN

经典目标检测R-CNN系列(1)开山之作R-CNN 2014年&#xff0c;大神RBG&#xff08;Ross Girshick&#xff09;等人将卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;应用于目标检测任务中&#xff0c;在PASCAL VOC 2012数据集上&#xff0c;能…

vue 如何发布并部署到服务器

一般情况npm run build即可 从而生成vue代码直接放到服务器即可 这里的具体情况要看package.json里面的配置从而使用命令 会生成dist就是该项目的发布包

软件测试项目经验重要吗?

目前从行业薪资排名看&#xff0c;IT行业是我们普通人能够接触到的高薪行业&#xff0c;像金融、银行和投行等高薪职位&#xff0c;张雪峰老师在他的视频中分析过&#xff0c;不是一般人可以拿捏的。IT行业的大部分岗位需要专业的技能&#xff0c;留给我们这些非计算机专业科班…

实现微信机器人开发,个微api

首先微信聊天机器人&#xff0c;是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上&#xff0c;如PC平台或者移动终端设备平台。 有兴趣的可以去进行测试&#xff08;E云管家&#xff09;&#xff0c;功能十分全面 文档测试过程中实现多项功能进行管理 …

数据结构--线性表的链式存储结构

这里写目录标题 链式存储结构链表简介格式分类头结点位置示意图与不带头结点的区别 链表的特点 单链表定义链表的代码实现简介实操 基本操作的实现初始化单链表销毁单链表清空单链表求单链表表长 二级目录二级目录二级目录二级目录二级目录二级目录 链式存储结构 链表 简介 格…

QML学习day1

QML学习day1 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.5Window {width: 640height: 480visible: truecolor:"blue"title: qsTr("Hello World")Button {//按钮id: btn1width: 50height: 50focus: true //聚焦…

P106-100组A卡(R5 240)指南

P106-100组A卡&#xff08;R5 240&#xff09;指南 不建议小白尝试 不建议小白尝试 不建议小白尝试文章目录 P106-100组A卡&#xff08;R5 240&#xff09;指南资料合集硬件软件基础卸载所有原驱动安装驱动修改注册表自动调用——只改一个注册表手动调用——改两个注册表 劝退…

软件设计原则

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放&#xff0c;对修改关闭。在程序…

Leecode402:移掉 K 位数字

这道题一看想的是可能用回溯或者什么别的方法&#xff0c;但是那样的话时间复杂度非常高&#xff0c;而且也不适用于动态规划&#xff0c;所以观察的话&#xff0c;可以知道从前往后判断的话肯定是前面越小越好&#xff0c;所以只需要前面最小&#xff0c;整体就最小。因此从前…

子网掩码详解

1 子网掩码 IP地址是以网络号和主机号来标示网络上的主机的&#xff0c;我们把网络号相同的主机称之为本地网络&#xff0c;网络号不相同的主机称之为远程网络主机&#xff0c;本地网络中的主机可以直接相互通信&#xff1b;远程网络中的主机要相互通信必须通过本地网关&#…

酸蚀刻对钛医药材料纳米形态表面特性及活化能的影响

引言 由于商业纯钛(CP Ti)具有抗腐蚀性&#xff0c;并且具有哦合适的机械性能以及生物相容性&#xff0c;因此&#xff0c;目前一直被用作牙科植入材料。为了在临床手术中获得高水平的成功&#xff0c;CP Ti的表面质量和形貌是影响植入手术结果的最关键因素之一&#xff0c;近…

GPT使用技巧

五大原则 想要让ChatGPT产出有效的回答&#xff0c;需要遵循以下五个原则&#xff1a; 提问清晰&#xff1a; 请尽可能清晰地描述您的问题 简明扼要&#xff1a; 请尽量使用简单的语言和简洁的句子来表达您的问题 确认问题&#xff1a; 请确认您的问题是清晰、明确和完整…

python接口自动化--token登录(详解)

简介 为了验证用户登录情况以及减轻服务器的压力&#xff0c;减少频繁的查询数据库&#xff0c;使服务器更加健壮。有些登录不是用 cookie 来验证的&#xff0c;是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里&#xff0c;本质上是跟 cookie 是一样的&…

攻不下dfs不参加比赛(十一)

标题 为什么练dfs题目为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有的东…

手把手教会你使用Markdown

目录 一、Markdown是什么 二、Markdown优点 三、Markdown的基本语法 一、Markdown是什么 Markdown 是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。 Markdown 允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成…

四川大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 四川大学&#xff08;B&#xff09;考研难度&#xff08;☆☆☆☆&#xff09; 四川大学计算机考研招生学院是计算机学院、网络空间安全学院和视觉合成图形图像技术国防重点学科实验室。目前均已出拟录取名单。 四川…

【Linux】多线程(三)

文章目录 线程池线程安全的单例模式什么是单例模式什么是设计模式单例模式的特点饿汉实现方式和懒汉实现方式饿汉方式实现单例模式懒汉方式实现单例模式懒汉方式实现单例模式(线程安全版本) STL,智能指针和线程安全STL中的容器是否是线程安全的?智能指针是否是线程安全的? 其…

一维数组、二维数组与指针的关系以及理解

一维数组、二维数组与指针的关系以及理解 C语言中&#xff0c;关于数组与指针&#xff0c;我们一般理解为&#xff1a;数组名即为该数组首元素地址&#xff0c;也是数组的首地址&#xff0c;但是关于数组名与指针的联系远不止于此。 文章目录 一维数组、二维数组与指针的关系以…