Python核心编程第二版第八章序列:条件与循环(课后习题)----我的答案

8-1条件语句。

#statement A
if x > 0:
    #statement B
    pass
elif x < 0:
    #statement C
    pass
else:
    #statement D
    pass
#statement E

(a).如果x<0,上面哪个语句被执行

C

(b).如果x==0,哪个语句被执行

D

(c).如果x>0,哪个语句被执行

B

8-2.循环。编写一个程序。

Form = int(raw_input('Input start number: '))
To = int(raw_input('Input end number: '))
Inc = int(raw_input('Input range number: '))

for i in range(Form, To+1, Inc):
    print(i)

8-3.range()。如果我们需要生成下面这些列表,分别需要在range()内建函数中提供哪些参数

(a).

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

(b).

>>> range(3, 19, 3)
[3, 6, 9, 12, 15, 18]

(c).

>>> range(-20, 861, 220)
[-20, 200, 420, 640, 860]

8-4.素数。编写一个函数来判定一个数是否是素数,是则返回True,不是则返回False。

def isprime(num):
    for i in range(2, num):
        if num % i == 0:
            print('False')
            break
    else:
        print('True')

if __name__ == '__main__':
    num = int(raw_input('Input a number: '))
    isprime(num)

8-5.约数。完成一个名为getfactors()的函数。它接受一个整型为参数,返回它所有约数的列表,包括1和它本身。

 
 
def getfactors(num):
    aList = []
    for i in range(1, num+1):
        if num % i == 0:
            aList.append(i)

    return aList


if __name__ == '__main__':
    num = int(raw_input('Input a number: '))
    print(getfactors(num))

8-6.素因子分解。以前两题的函数作为基础,编写一个函数,它接受一个整型作为参数,返回该整型所有素数因子的列表。

def isprime(num):
    for i in range(2,num):
        if num % i==0:
            return False
    else:
        return True

def getfactors(num):
    aList = []
    while not isprime(num):
        for i in range(2, num+1):
            if num % i == 0:
                if isprime(i):
                    aList.append(i)
                    num = num/i
                    break
    else:
        aList.append(num)
    return aList

if __name__ == '__main__':
    num = int(raw_input('Input a number: '))
    print(getfactors(num))

素因子就是这个数约数中为素数的数。

8-7.完全数。完全数被定义为这样的数字:它的约数之和为它本身。编写一个名为isperfect()的函数。它接受一个整型作为参数,如果这个数字是完全数,返回1,else返回0

def isperfect(num):
    aList = []
    for i in range(1, num):
        if num % i == 0:
            aList.append(i)

    Sum = 0
    for eachNum in aList:
        Sum += eachNum
    if Sum == num:
        return 1
    else:
        return 0

if __name__ == '__main__':
    num = int(raw_input('input a number: '))
    print(isperfect(num))

8-8.阶乘。一个数的阶乘被定义为从1到该数字所有数字的乘积。写一个函数,指定N,返回N!的值。

def factorial(N):
    while True:
        if N == 1:
            return 1
        else:
            return N * factorial(N-1)

if __name__ == '__main__':
    N = int(raw_input('input a number: '))
    print(factorial(N))

8-9.斐波那契数列。写一个函数,给定N,返回第N个斐波那契数字。

def fib(num):
    a = 1
    b = 1
    c = 2
    if num == 1 or num == 2 :
        return 1
    else:
        for i in range(3,num):
            a = b + c
            (a,c)=(c,a)
            (b,a)=(a,b)
        return c

if __name__ == '__main__':
    num = int(raw_input('input a number:'))
    print(fib(num))

8-10.文本处理。统计一句话的元音,辅音和单词个数。

def count(word):
    vowel = 0
    cons = 0
    words = 0
    for i in word:
        if i == 'a' or i == 'e' or i == 'i' or i == 'o' or i == 'u':
            vowel += 1
        else:
            cons += 1
    words = len(word.split())
    return [vowel, cons, words]

if __name__ == '__main__':
    print(count('i love you'))

8-11.文本处理

def nameList():
    total = int(raw_input('Enter total number of names: '))
    aList = []
    for i in range(total):
        prompt = 'Please enter name %d: ' % i
        inp = raw_input(prompt)
        count = 0
        while inp.count(',') == 0:
            inp = raw_input('Wrong format... should be Last, First.')
            count += 1
            print 'You have done this %d time(s) already. Fixing input...' % count
        aList.append(inp.split(','))

    aList.sort(lambda x, y:cmp(x[0], y[0]))
    print('The sorted list (by last name) is: ')
    for name in aList:
        print('%s, %s' % (name[0], name[1]))

if __name__ == '__main__':
    nameList()

8-12.转

start = int(raw_input('start: '))
end = int(raw_input('end: '))

title = 'DEC\tBIN\tOCT\tHEX'
for i in xrange(start, end + 1):
    if 0x20 <= i <= 0x7e:
        title += '\tASCII'
        break
print title

for i in xrange(start, end + 1):
    if 0x20 <= i <= 0x7e:
        print '%d\t%s\t%s\t%s\t%s' % (i, bin(i)[2:], oct(i)[1:], hex(i)[2:], chr(i))
    else:
        print '%d\t%s\t%s\t%s' % (i, bin(i)[2:], oct(i)[1:], hex(i)[2:])
自己想了很久各种进制转换方法,看了别人代码感觉自己很迷。

8-13.程序执行性能。在8.5.2节里,我们介绍了两种基本的迭代序列方法:(1)通过序列项,以及(2)通过序列索引遍历。该小节的末尾我们指出后一种方法在序列很长的时候性能不佳,你认为它的原因是什么?


猜你喜欢

转载自blog.csdn.net/qq_41805514/article/details/80314357
今日推荐