本文是python入门练习题,为大家总结了python入门的最基础知识同时也是最常用的知识以及相应的题目,大家可以用于练习python,也适合用于python期末复习哦!
实现代码:
n = eval(input("请输入行数:"))
for i in range(1,n+1):
print("{0:^{1}}".format("*"*(i*2-1),2*n-1))
涉及知识:
format方法控制格式:
{<要控制的参数序号>:<格式控制标记符》}
以实现代码为例:{0:^{1}} 0 对应的参数即为填充字符,只有一个参数时,可省略, ^为中间对齐,若 ^前无字符则不足宽度时默认用空格填充,{1}对应的就是宽度
base=1.0
factor=0.001
print("每天努力,你的能力值为: {:.2f}".format(pow(base+factor,365))+';'+"每天放任,你的能力值为:{:.2f}".format(pow(base-factor,365)))
base=1.0
for i in range(1,366):
if(i%7 in [0,6]):
base=base*(1+factor)
else:
base=base*(1-factor)
print('工作日努力,周末放任,一年后你的能力值为: {:.2f}'.format(base))
str=input("请输入原文: ")
n=len(str)
str1=''
for ch in str:
if('A'<=ch<='Z'):
str1+=chr((ord(ch)-ord('A')+3)%26+ord('A'))
else:
str1+=ch
print("加密后为: {}".format(str1))
知识点:ord函数将字符转换为数字,chr函数将数字转换为对应的字符
shouldPay=eval(input("请输入应发工资薪金所得:"))
fiveFund=eval(input("请输入五险一金:"))
taxExemption=eval(input("请输入个税免征额:"))
shouldPayTax=shouldPay-fiveFund-taxExemption
payTax = 0
if(shouldPay<=0 or fiveFund<=0 or taxExemption <= 0):
print("error")
else:
if shouldPayTax > 80000:
payTax = shouldPayTax * 0.45 - 15160
elif shouldPayTax > 55000:
payTax = shouldPayTax * 0.35 - 7160
elif shouldPayTax > 35000:
payTax = shouldPayTax * 0.3 - 4410
elif shouldPayTax > 25000:
payTax = shouldPayTax * 0.25 - 2660
elif shouldPayTax > 12000:
payTax = shouldPayTax * 0.20 - 1410
elif shouldPayTax > 3000:
payTax = shouldPayTax * 0.10 - 210
else:
payTax = shouldPayTax * 0.03
salary = shouldPay-payTax-fiveFund
print('应缴税款{0:.2f},实发工资{1:.2f}'.format(payTax,salary))
account=input("请输入用户名:")
password=input("请输入密码:")
if password=="666666" and (account=="admin" or account==administrator):
print("登录成功")
else:
print("登录失败")
for i in range(3):
account = input("请输入用户名:")
password = input("请输入密码:")
if password == "666666" and (account == "admin" or account == administrator):
print("登录成功")
break
else:
print("登录失败")
import random
list=[0,1,2,3,4,5,6,7,8,9]
try:
rand=eval(input("请输入随机数种子:"))
except NameError:
print("输入错误,请输入一个整数!")
else:
random.seed(rand)
for i in range(5) :
randStr=""
for j in range(10):
b = random.randint(0, 4)
if b == 0 :
randStr+=repr(list[random.randint(0, 9)])
elif b==1 or b==2 :
randStr+=chr(random.randint(ord("a"), ord("z"))-32)
elif b==3 or b==4:
randStr+=chr(random.randint(ord("a"), ord("z")))
print(randStr)
知识点:randint(a,b)生成一个[a,b]之间的整数
1.去掉一个最高分;(要求使用pop或者del)
2.去掉一个最低分;(要求使用pop或者del)
3.最终得分为剩下8个分数的平均值,保留小数点后两位输出。(要求使用sum)
实现代码如下:
import random
lst_score = []
for i in range(10):
randScore = random.uniform(80, 100)
lst_score.append(randScore)
del lst_score[lst_score.index(max(lst_score))]
del lst_score[(lst_score.index(min(lst_score)))]
print("最终得分为:{0:.2f}".format(sum(lst_score)/8))
知识点:uniform(a,b)生成一个[a,b]之间的随机小数
序列相关函数:
len(s)返回序列s的元素个数
min(s)序列s中最小的元素
max(s)序列s中最大的元素
s.index(X)返回该元素X在在序列中第一次出现的位置
成绩 等级 绩点
90-100 A 4.0
85-89 A- 3.7
82-84 B+ 3.3
78-81 B 3.0
75-77 B- 2.7
72-74 C+ 2.3
68-71 C 2.0
64-67 C- 1.5
60-63 D 1.3
补考60 D- 1.0
60以下 F 0
要求:平均绩点保留小数点后2位,注意处理用户的异常输入,提示“输入不合法!”。
示例:
ziDian = {"A":4.0,"A-":3.7,"B+":3.3,"B":3.0,"B-":2.7,"C+":2.3,"C":2.0,"C-":1.5,"D":1.3,
"D-":1.0,"F":0}
listScore=[]
listXue=[]
while(1):
grade = input("请输入课程成绩,-1结束! ")
if(grade == "-1"):
break;
try:
xueFen= eval(input("请输入课程学分,-1结束!"))
if(xueFen==-1):
break;
except NameError:
print("输入不合法!")
else:
if( not grade in ziDian):
print("输入不合法!")
continue
listScore.append(ziDian.get(grade)*xueFen)
listXue.append(xueFen)
print("你的平均绩点为:{0:.2f}".format(sum(listScore)/sum(listXue)))
print("请输入32位的二进制IP地址:")
ipStr = input()
convertSet = set(('0','1'))
if len(ipStr) != 32:
print('data error!')
elif set(ipStr) > convertSet:
print('data error!')
else :
convertList = [int(ipStr[i:i+8],2) for i in range(25) if(i%8==0)]
for i in range(4):
if not i==3:
print(convertList[i],end=".")
else:
print(convertList[i])
import random
def redPacket(total_money=100, count=10):
ls = []
if(total_money>200 or total_money/count<0.01):
return None
for i in range(count - 1):
m = random.uniform(0.01,min(total_money / (count - i) * 2,200))
if(total_money/(count-i)<=0.01):
m=0.01
m = round(m, 2)
ls.append(m)
total_money = total_money - m
ls.append(round(total_money, 2))
return ls
totalMoney,count=eval(input('输入红包金额和个数,以逗号隔开:'))
ans = redPacket(totalMoney,count)
if ans==None:
print("输入不合法")
else:
res=[str(i) for i in ans]
res=' '.join(res)
print("每个红包的金额为:\n",res)
知识点:
join函数就是连接列表中的多个字符串,并在相邻两个字符串之间插入指定字符,并返回新的字符串
实现代码:
f=open('C:\\Desktop\\data.txt',mode='a+',encoding='utf-8')
f.seek(0)
ls=[]
lines=[]
j=0;
for line in f:
if line.__contains__("身份证号"):
ls=list(line)
for i in range(12,19):
ls[i]="*"
line=''.join(ls)
if line.__contains__("手机号"):
ls=list(line)
for i in range(7,11):
ls[i]="*"
line=''.join(ls)
lines.append(line)
f.write('\n')
for i in lines:
f.write(i)
f.close()
知识点:f.seek(0)就是让读指针指向文件最开始的地方,避免有时读出来数据是空的,还有就是路径写自己的
现在有UTF-8格式编码的名为 “score1.csv”的文件,里面存放着某班学生的Python课程成绩,共有学号、平时成绩、阶段测试、实报报告,机考成绩五列。请根据平时成绩10%,阶段测试30%,实验报告20%,机考成绩占40%的比例计算考核成绩(取整数),并分学号、考核成绩两列,按照考核成绩由高到低的顺序写入另一文件“score2.txt”中。同时在屏幕上输出班级学生总人数,按考核成绩计90以上、80~89、70~79、60~69、60分以下各成绩档的人数和班级总平均分(取整数)。要求不能使用第三方库,自己划分功能由不同的函数来完成。
屏幕输出示例:
文件输出示例:
实现代码:
def readData():
f=open('C:\\Desktop\\score1.csv',mode='a+')
f.seek(0)
for line in f:
line=line.replace("\n","")
ls.append(line.split(","))
f.close()
def caculateScore():
for i in range(len(ls)):
score=0
for j in range(len(ls[i])):
if i!=0 and j!=0:
ls[i][j]=int(ls[i][j])
score=dictSocre.get(j)*ls[i][j]+score
dict[ls[i][0]]=int(score)
lsSocre.append(int(score))
def getResult():
for i in lsSocre:
if i>=90:
ls1.append(1)
elif i>=80:
ls2.append(1)
elif i>=70:
ls3.append(1)
elif i>=60:
ls4.append(1)
else:
ls5.append(1)
def outInFile():
f = open('C:\\Desktop\\score2.txt', mode='a+')
f.write("学号,"+" 课程成绩")
for i in range(len(dict)):
f.write('\n'+dict[i][0]+","+repr(dict[i][1]))
ls=[]
dict={}
lsSocre=[]
dictSocre={1:0.1,2:0.3,3:0.2,4:0.4}
ls1=[]
ls2=[]
ls3=[]
ls4=[]
ls5=[]
readData()
caculateScore()
dict.pop("学号")
lsSocre.pop(0)
dict=(sorted(dict.items(),key=lambda x:x[1],reverse=True))
outInFile()
getResult()
print("班级共有:{0},平均分:{1},其中90分以上:{2}人,80~89分:{3}人,70~79分:{4}人,60~69分:{5}人,60分以下:{6}人".format(len(dict),int(sum(lsSocre)/len(dict)),sum(ls1),sum(ls2),sum(ls3),sum(ls4),sum(ls5)))
知识点:
w+为覆盖写,a+为追加写
split()函数:用指定字符(必须是字符串中包含的,并且用于分割的字符将会出现)将字符串分割为多个字符串,并返回列表
sorted函数,第一个是将字典的键值对进行排序,key用于控制排序的依据,x:x[1]就是按字典的值进行排序,由于默认从小到大,所以revese之后就是从大到小,并且sorted之后再赋值给原来的字典,将变为元组。
repr()函数:将指定内容转换为字符串
注意遍历二维数组必须加range(len())
拓充:
二维csv的写入:
for i in ls1:
f.write(",".join(i)+'\n')
其中,ls1为二维数组,且数组中元数必须为字符串,因为无论是join函数还是写入文件时,都需要为字符串
jieba库的简单使用说明:
读入数据:
data=open(“C:\Desktop\天龙八部.txt”,‘r’,encoding=“gb18030”).read()
jieba.luct(data),返回一个列表