《Python核心编程习题》---chapter8

来源:互联网 发布:淘宝客推广联盟被骗 编辑:程序博客网 时间:2024/06/05 07:47
#8-6"""素因子分解. 以刚才练习中的 isprime()  getfactors() 函数为基础编写一个函, 它接受一个整数作为参数, 返回该整数所有素数因子的列表. 这个过程叫做求素因子分解, 输出的所有因子之积应该是原来的数字. 注意列表里可能有重复的元素. 例如输入 20 , 返回结果应该是 [2, 2, 5] ."""def isprime(number):    for i in range(2, number/2):        if number % i == 0:            return False    return Truedef getfactors(number):    nlist = []    for i in range(1, number+1):        if number % i == 0:            nlist.append(i)    return nlistdef prime_fac(number):    prime_facs = []    tmp = 0    new_number = number    if isprime(new_number):  #如果该数为素数,直接返回其约数        return getfactors(new_number)    while(tmp != -1):        if (isprime(new_number) == False):            factors = getfactors(new_number)#求约数列表            #print factors            for i in range(1, len(factors)):#从下标1开始,忽略列表里面的1                if(isprime(factors[i])):#判断该数是否为素数                    #print factors[i]                    prime_facs.append(factors[i])#是就添加该数到素因子列表                    new_number = new_number / factors[i] #求余,并将余数重复前面操作                    #print 'number',(new_number, prime_facs)                    break        else:            prime_facs.append(new_number)#最后一个余数为素数,直接添加到素因子列表            tmp = -1    return prime_facsif __name__ == '__main__':    print prime_fac(120)
#8-11'''文本处理. 要求输入一个姓名列表,输入格式是“Last Name, First Name,” 即 姓,逗号, . 编写程序处理输入, 如果用户输入错误, 比如“First Name Last Name,” , 请纠正这些错误, 并通知用户. 同时你还需要记录输入错误次数. 当用户输入结束后, 给列表排序, 然后以" , " 的顺序显示.'''#判断姓名格式是否正确def name_judge(name):    if name.find(',') == -1:        return False    else:        string = name.split(',')        if string[0].isalpha() & string[1].isalpha():            return True        else:            return Falsedef name_list(number):    name_list = []    count = 1    while (count < int(number)+1):        print 'Please enter name %d:'%count        name = raw_input()        # 判断如果名字格式符合标准,就计数+1,并把名字添加到列表        if (name_judge(name)):            count = count+1            name_list.append(name)        else:            print 'Wrong format... should be Last, First.'            print 'You have done this %d time(s) already. Fixing input...'%(count)    print 'The sorted list (by last name) is:'    for i in name_list:        print idef main():    number = raw_input('Enter total number of names:')    name_list(number)if __name__ == '__main__':    main()

#8-12''' (整数)位操作. 编写一个程序, 用户给出起始和结束数字后给出一个下面这样的表格,分别显示出两个数字间所有整数的十进制, 二进制, 八进制和十六进制表示. 如果字符是可打印的ASCII 字符, 也要把它打印出来, 如果没有一个是可打印字符, 就省略掉 ASCII 那一栏的表头.'''def main():    count = 1    while (count):        print 'SAMPLE OUTPUT %d'%count        print '-'*15        begin_value = int(raw_input('Enter begin value: '))        end_value = int(raw_input('Enter end value: '))        if end_value < 31 or begin_value > 127:            print 'DEC      BIN        OCT    HEX'            print '-' * 40            for i in range(begin_value, end_value):                print'%3d    %6s      %3o     %3x' % (i, bin(i).replace('0b', ''), i, i)        else:            print 'DEC      BIN        OCT    HEX      ASCII'            print '-' * 40            for i in range(begin_value, end_value):                if 31 < i < 127:                    print'%3d    %6s      %3o     %3x    %5c'%(i,bin(i).replace('0b',''),i,i,ord(chr(i)))                else:                    print'%3d    %6s      %3o     %3x' % (i, bin(i).replace('0b', ''), i, i)if __name__ == '__main__':    main()

原创粉丝点击