• Python小课题练习作业


    作业一:                                                                                                                        

    利用*字典*输出目录,可以选择目录进入,可以回退、退出!

    #conding:utf8


    menu = {'北京':{'昌平':{'沙河':{'昌平妇幼',}},'海淀':{'海淀一区':{'海淀二区'},}},} #字典嵌套

    current_layer = menu #利用此变量来记录当前的层的位置
    pre_menu = [] #用【】来记录每一层

    while True:
    for k in current_layer:
    print (k)
    choice = input('>>>>>>>:').strip() #去除输入选项连边的空格
    if len(choice) == 0: #通过len的长度来判断用户是否输入了
    continue

    if choice in current_layer:
    pre_menu.append(current_layer)
    current_layer = current_layer[choice]
    elif choice == 'b':
    if len(pre_menu) > 0: #通过大于0 来判断,还有目录可退
    current_layer = pre_menu.pop() #利用pop来弹出上面的一层。
    elif choice == 'q':
    exit()

    作业二                                                                                                              

    list的小练习:实现购物车功能

    product_list = [['iphone',6500],['Mobli',5000],['huawei',4000],['oppo',300],['vivo',100]]


    money = int(input('please input your money:'))
    got_list = []

    while True:
    for i,v in enumerate(product_list): #显示二维的数列,0 ... 1.... 2....
    print (i,v)
    choice_goods = input('which good do you want to get :')

    if choice_goods.isdigit(): #判断是否是输入的数字
    choice_goods = int(choice_goods)
    if choice_goods < len(product_list) and choice_goods >=0: #条件判断,看是否超出范围
    if money > product_list[choice_goods][1]: #如果钱大于物品的价格
    money -= product_list[choice_goods][1] #计算余额
    got_list.append(product_list[choice_goods][0]) #把买到的商品添加到列表中
    print ('you good is %s' %(got_list))
    print ('you left money is: %s' %(money))
    print ('')
    print ('')

    else:
    print ('you do not have enough money to bu anything!')
    print (' ')

    else:
    print ('we do not have this good')
    print (' ')

    作业三                                                                                                        

    冒泡算法小练习

    a_list = [9,8,7,6,5,4,3,2,1]

    for j in range(len(a_list) -1): #第二步,每次循环排好一个数,则需要len(a_list) -1 次,才能全部的排好
    #第一步,初级算法不减j,每次循环都是从头到尾比较一遍,减去j,后面排好的则不用比较

    for i in range(len(a_list)-1 - j):
    if a_list[i] > a_list[i+1]: #最大数排到最后面去
    a_list[i],a_list[i+1] = a_list[i+1],a_list[i] #利用a,b = b,a 对调

    print(a_list)

    作业四                                                                                                    

    插入算法小练习

    实现方法一

    a_list = [3 ,66 ,3 ,41 ,34 ,6 ,7 ,845 ,234 ,31]
    b_list = [a_list.pop()] #pop会在列表的最后面弹出一个数,并显示

    for num in a_list:
    pos = -1 #去查看是通过比较后插入的位置
    for i in range(len(b_list)): #用i去获取下坠
    if num <= b_list[i]: #循环比较,去寻找合适的位置
    pos = i
    b_list.insert(i ,num)
    break
    if pos == -1:
    b_list.append(num)

    print (b_list)

    实现方法二

    arr1 = [10,9,8,7,6,5,4,3,2,1]

    for i in range(1, len(arr1)): #从第二个数开始拿来作比较
    j = i - 1 #通过j来判断需要插入的这个数前面有多少个数
    while j >= 0: #j最小为0 ,表示只有两个数做比较
    if arr1[j + 1] < arr1[j]:#新那的这个数用j+1表示,
    arr1[j],arr1[j + 1] = arr1[j + 1],arr1[j]
    j -= 1

    print (arr1)

    做业五                                                                                                          

    打印99乘法表

    #! /usr/bin/python
    # Filename : table_9x9.py
     
    print ' 9x9 Table '
     
    for i in range(1, 10) :
        for j in range(1, i+1) :
            print j, 'x', i, '=', j*i, ' ',
            # print '%d x %d = %d ' %(j, i, j*i),
        print ' '
    print ' Done!'
     
     
    关于该程序的说明:
    1. 第一行是特殊注释行,称为组织行,用来告诉GNU/Linux系统应该使用哪个解释器来执行该程序。
    2. 第二行至第四行都是一般的注释行,用来说明一些信息的(如文件名,作者,时间等)。
    3. 第六行打印一个字符串。
    4. 第八行i取值范围为1, 2, 3, 4, 5, 6, 7, 8, 9
    5. 第九行j取值范围为1, 2, ..., i
    6. 第十行和第十一行效果一样,最后的逗号都是用来取消自动换行的。
    7. 第十二行作用是在每个内层for循环结束后换行,即在输出完九九乘法表一行后换行。
    8. 第十四行打印一个字符串。
     
     
    小结:通过这个程序熟悉print的用法,for循环的用法,以及range函数的特点。

    课堂中提到的方法:

    for i in range(1,10):
        output = ''
        for j in range(1,i+1):
            output+= "%s*%s=%2s "%(i,j,i*j)
        print output

    ---------------------------------------------------

    作业六:                                                                                                       

    取一个列表中前两位大的数字

    
    
    #!/usr/bin/python

    NumList = [1,2,3,2,12,3,1,3,21,2,2,3,4111,22,3333,444,111,4,5,777,4222,46,33,45,65555]

    max_num = 0
    sec_num = 0

    for n in NumList:
    if max_num < n:
    sec_num=max_num
    #获取最大数之前的比较的哪个数肯定是在这之前第二大的
    max_num = n
    #但是后面如果再出现比最大的大,比之前比较出料的第二大
    #小的数时需要再比较下。
    if n < max_num and n > sec_num:
    sec_num = n


    print ('The bigest NUM is : %s' %(max_num))
    print ('The second one is : %s' %(sec_num))
     

    利用单循环来同事去除两个两个数。

    作业七                                                                                                      

    二分查找法(利用递归函数)

    num_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22]


    def erfen(find_num,num):
    mid = int(len(num)/2)
    if mid ==0: #此处已经到了最后一个数,需要判断下,返回结果
    if num[mid] == find_num:
    print("we find it finally",find_num)
    else:
    print( "we can not find this num in list",find_num)
    return #表示此递归的结束

    if num[mid] == find_num:
    print( "We find it",find_num)
    elif num[mid] > find_num:
    print ("we are going to search in left",num[mid],num[0:mid])
    erfen(find_num,num[0:mid])
    else:
    print ("we are going to serch in right",num[mid],num[mid+1:])
    erfen(find_num,num[mid+1:])

    erfen(19,num_list)

    作业八                                                                                                           

    利用函数完成用户的注册登录功能

    #!/usr/bin/python
    #encoding: utf-8

    import getpass

    user_list = {}

    def new_user():
    username = raw_input('please input your new name:')
    if username in user_list:
    print '%s is already exits!!' %username
    else:
    passwd = getpass.getpass() #已密码不显示的方式输入。
    user_list[username] = passwd

    def old_user():
    username = raw_input('please input your name:')
    passwd = raw_input('please input your passwd:')
    if username in user_list:
    if user_list[username] == passwd:
    print 'login successfull!!'
    else:
    print 'login fail!!'
    else:
    print 'login fail!!!'

    CMD = {'n' : new_user , 'o' : old_user}

    def main_menu():
    ppp = '''
    新用户注册:n
    老用户登录:o
    推出:q

    '''
    while True:
    try:
    choice = raw_input(ppp)
    except (KeyboardInterrupt, EOFError): #捕捉ctrl+ D 的错误输出。
    choice = 'q'

    if choice not in 'noq':
    print 'please input again'
    continue
    if choice == 'q':
    break
    CMD[choice]() #通过取字典的key,选择来执行函数

    if __name__ == '__main__':
    main_menu()

    作业九

    log日志前十排序,其中包括重复的。利用函数简单的html输出

    #!/usr/bin/python
    #coding:utf8

    def openFile(log):
    with open(log) as f:
    content = f.readlines()
    return content

    def countLine(fn):
    content = fn
    count_dict = {}
    for line in content:
    line = line.split(' ') # string 通过split 转换为list
    local_ip,uri,code = line[0],line[6],line[8]
            #利用元组来作为key,然后统计数量
            count_dict[(local_ip,uri,code)] = count_dict.get((local_ip,uri,code),0) + 1 
        #这个排序的功能网上copy的,不了解原理
        count_dict = sorted(count_dict.items() ,key=lambda item:item[1],reverse=True)        
    return count_dict

    def detailLine(fn):
    count_dict = fn
    #下面进行重复行计数为一行。
    n = 1 #取行计数
    num = 0 #用于判断'统计数量'是否出现一样的
    # print ('-----IP------------------URI----------CODE---count---')
    # for i in count_dict:
    # if n <= 10: # 取前十
    # if i[1] != num:
    # print('%-10s%20s%5s%10s ---->no%s' % (i[0][0], i[0][1], i[0][2], i[1], n))
    # num = i[1]
    # n += 1
    # elif i[1] == num:
    # print('%-10s%20s%5s%10s' % (i[0][0], i[0][1], i[0][2], i[1]))

    with open('count.html','w') as f:
    res = "<table border='1'>"
    res += '<tr><td>IP</td><td>URI</td><td>CODE</td><td>COUNT</td></tr>'
    for i in count_dict:
    if n <= 10:
    if i[1] != num:
    res += '<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'% (i[0][0],
    i[0][1], i[0][2], i[1])
    num = i[1]
    n += 1
    elif i[1] == num:
    res += '<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' % (i[0][0],
    i[0][1], i[0][2], i[1])
    res +='</table>'
    f.write(res)
    def main():
    first = openFile('access.log')
    second = countLine(first)
    detailLine(second)

    if __name__ == '__main__':
    main()

    作业十,

     生成随机验证码:

    方法一:
    import string,random

    source = string.digits + string.ascio_lowercase
    print ("".join(random.sample(source,6)))

    方法二:
    checkcode = ''
    for i in range(6):
    current = random.randrange(0,6)
    if current != i:
    temp = chr(random.randint(65,90))
    else:
    temp = random.randint(0-9)
    checkcode += str(temp)
    print(checkcode)
    作业十一

    利用快排,来对列表数字进行排序。

    a = [ 65,2,1,3,6,1,3,4,1,3,6,7,8243,3]

    def kuaipai(arr):
        if len(arr) <= 1:
            return arr
        num = arr.pop() #在列表中pop弹出一个对象来,作为比较的对象,然后列表中就少了这个对象
        left = []
        right = []
        for i in arr: #因为里面已经没有了需要比较的对象,所以可以直接循环列表来比较。
            if num > i:
                left.append(i)
            else:
                right.append(i)
        return kuaipai(left) + [num] + kuaipai(right) #用到了函数的递归

    print kuaipai(a)


    运行结果:
    [1, 1, 1, 2, 3, 3, 3, 3, 4, 6, 6, 7, 65, 8243]
     
     
  • 相关阅读:
    公司技术的确定
    数据结构
    如何利用百度ocr实现验证码自动识别
    redis 主从复制
    redis哨兵机制
    redis集群搭建
    webmagic自定义存储(mysql、redis存储)
    redis安装与使用
    maven插件mybatis-generator自动生成代码
    python 中的“集合”(list、tuple、set、dict)
  • 原文地址:https://www.cnblogs.com/nopnog/p/6927870.html
Copyright © 2020-2023  润新知