zoukankan      html  css  js  c++  java
  • 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]
     
     
  • 相关阅读:
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第一题
    fiddler模拟发送post请求
  • 原文地址:https://www.cnblogs.com/nopnog/p/6927870.html
Copyright © 2011-2022 走看看