python基础练习题4

题目:
现有一个数据库记录文件(0005.txt)保证了学生课程签到的数据记录
('2017-03-13 11:50:09',271,131),
('2017-03-14 11:52:19',273,131),
('2017-03-13 11:50:09',271,126),

每一行记录保存了学生的一次签到信息
每一次签到信息的记录,分成三个部分,分别是签到的时间,签到的课程id,签到学生的ID
要求大家实现下面的函数,其中参数fileName为数据记录文件路径,输出结果是将数据库记录文件中,的学生签到信息保存到一个字典中,并作为返回值返回
def PUtInfo(fileName):
要求返回的字典对象的格式是这样的:
key是各个学生的id,value是该学生的签到信息
其中value,里面保存着该学生所有的签到信息
其中每个签到的信息是字典对象,有两个元素;key是lessiod的课程id,key是checkintime的记录签到时间,
如对上面的示例中的3条记录,响应的返回结果如下:
{
131:[
{'lessonid':271,'checkintime':'2017-03-17 11:50:09'}
{'lessonid':273,'checkintime':'2017-03-14 10:52:09'}
],
126:[
{'lessonid':271,'checkintime':'2017-03-13 11:50:19'}
]
}
需求:
1-要求是函数 def putInfoDic(fileName):
形参
返回值
2-返回是字典--格式
{
学生id:[
{'',''},
{}
]
}

示例:('2017-03-13 11:50:09',271,131),
思路:
1-获取相应数据:每一个:学生ID 课程ID 签到时间
1-读取文件--txt ’r‘ with open('路径') as fo
2-获取文件内容:
fo.read().splitlines()--返回是list
3-对每一个元素进行遍历--for
for line inlines:
4-提取每一个元素响应的内容
1-先处理掉无关字符
2-在切割--取值
2-按照格式组合

'''
fileDir = r'E:\0005.txt'
def putInfoToDict(fileName):
        resDict = {}
       #1-打开文件
        with open(fileName)as fo:
            lines = fo.read().splitlines()
            for line in lines:
                line=line.replace('(','').replace(')','').replace('\t','').replace(';',',')
                temp = line.split(',')
                checkTime = temp[0].strip()
                lessonid = int(temp[1].strip())
                userid = int(temp[2].strip())
                infoDict = {'lessonid':lessonid,'checkintime':checkTime}
                #统计
                if userid not in resDict:#增加--键值对
                    resDict[userid]=[]
                    resDict[userid].append(infoDict)#增加信息

                # if userid not in resDict:
                #     resDict[userid]=[infoDict]
                # else:
                #     resDict[userid].append(infoDict)


            return resDict

res = putInfoToDict(fileDir)
print(res)
#完美打印
import pprint
pprint.pprint(res)

 02:判断101-200之间有多少个素数,并输出所有的素数


l=[]
for i in range(101,200):
    for j in range(2,i-1):
        if i%j==0:
            break
    else:
        l.append(i)
print(l)
print('总数为:%d'%len(l))
#第二种解法(百度查询)
from math import sqrt
h=0
for m in range(101,201):
leap=1
k = int(sqrt(m)) #返回数字的平方根
for i in range(2,k+1):#K+1,表示从2循环到K(包含k)
if m % i==0:
leap=0
break
if leap==1:
print('%-4d'%m)
h+=1
if h % 10==0:
print('')
print('The total is %d'%h)

03:打印出所有水仙花,所谓’水仙花数‘就是一个三位数,其余个位数立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方

利用for循环控制100-999个数,每个数分解出个位,十位,百

python 求一个三位数的个位十位百位的值

定义一个数
a=12323343434
百位数:a//100%10
十位数:a//10%10
个位数:a//1%10
----以此类推--
取倒数第几位,就是a//位数%10

e=0
for a in range(100,1000):
    b = a%10 #个位数
    c=a//10%10#十位数
    d=a//100 #百位数
    if b**3+c**3+d**3==a:
        e+=1
print(e)

 

04:将一个正整数分解质因数,例如输入90:打印出90=2*3*3*5

while 1:
    n = int(input('请输入一个数:'))
    print('%d='%n,end='')
    while n>1:
        for i in range(2,n+1):
            if n%i==0:
                n=int(n/i)
                if n==1:
                    print('%d'%i,end='')
                else:
                    print('%d**'%i,end='')
                break
    print()



posted @ 2019-11-08 17:53  kelly-凯莉  阅读(382)  评论(0编辑  收藏  举报