本文最后更新于:1 个月前

Python 语言程序设计(嵩天) 习题答案

第二章 Python语言基本语法元素 习题二

  1. 获得用户输入的一个整数N,计算冰输出N的32次方。

    N = int(input('please input word: '))
    print(N**32)
  2. 获得用户输入的一段文字,将这段文字进行垂直输出。

    s = input('please input word: ')
    for i in range(len(s)):
        print(s[i])
  3. 获得用户输入的一个合法算式,例如:1.2+3.4,输出运算结果。

    N = input('please input word: ')
    print(eval(N))
  4. 获得用户输入的一个小数,提取并输出其整数部分。

    N = float(input('please input word: '))
    print(int(N))
  5. 下面这段代码能够获得用户输入的一个整数N,计算并输出1N相加的和,然而这段代码存在多处错误,请指出错误所在并纠正。

    n = input('请输入整数N: ')
    sum = 0
    for i in range(n)
        sum +=i + 1
    print('1到N求和结果:'.format(sum))

    改正后:

    n = input('请输入整数N: ')
    sum = 0
    for i in range(int(n)):
        sum +=i + 1
    print('1到N求和结果:{}'.format(sum))

第三章 基本数据类型 习题三

  1. 获得用户输出的一个整数,输出该整数数百位及以上的数字。

    n = input('please input number: ')
    print(int(int(n)/100))
  2. 获得用户输入的一个字符串,将字符串按照空格分割,然后逐行打印出来。

    n = input('please input word: ')
    print(n.split(' '))
  3. 程序读入一个表示星期几的数字(1-7),输出对应的星期字符串名称。例如:输入3,返回“星期三”。

    n = input('please input number(1-7): ')
    if n == '1':
        print('Monday')
    elif n == '2':
        print('Tuesday')
    elif n == '3':
        print('Wednesday')
    elif n == '4':
        print('Thursday')
    elif n == '5':
        print('Friday')
    elif n == '6':
        print('Saturday')
    elif n == '7':
        print('Sunday')
  4. n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判断这个数字是不是回文数。

    n = input('please input number: ')
    if n[::-1] == n:
        print('{} is palindrome number'.format(n))
    else:
        print('{} is not palindrome number'.format(n))
  5. 输入一个十进制整数,分别输出其二进制、八进制、十六进制字符串。

    n = input('please input number: ')
    print('BIN is {}'.format(bin(int(n))))
    print('OCT is {}'.format(oct(int(n))))
    print('HEX is {}'.format(hex(int(n))))

第四章 程序的控制结构 习题四

  1. 输入一个年份,输出是否为闰年。闰年条件:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。

    year = eval(input('please input year: '))
    if (year % 4 == 0 and year % 100 != 0) or year % 400 ==0:
        print('{} is leap year'.format(year))
    else:
        print('{} is not leap year')
  1. 最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。最大公约数的计算一般使用辗转相除法,最小公倍数则使用两个数的乘积除以最大公约数。

    a = eval(input('please input number1: '))
    b = eval(input('please input number2: '))
    num1 = a
    num2 = b
    if b > a:
        (a, b) = (b, a)  # 交换a,b
    while a % b:
        c = a % b
        a = b
        b = c
    print("{}和{}的最大公约数是:{},最小公倍数为:{}".format(num1, num2, b, num1 * num2 / b))
  1. 统计不同字符的个数。用户从键盘输入一行字符,编写一个程序,统计并输出其中英文字符、数字、空格和其他字符的个数。

    n = input('please input: ')
    number = 0
    letter = 0
    space = 0
    other = 0
    for i in n:
        if i.upper() >= 'A' and i.upper() <= 'Z':
            letter += 1
        elif i >= '0' and i <= '9':
            number += 1
        elif i == ' ':
            space += 1
        else:
            other += 1
    print("{}中数字个数:{},字母个数:{},空格个数:{},其他:{}".format(n, number, letter, space, other))
  1. 猜数游戏续。当用户输入的不是整数(如字母、浮点数的等)时,程序会终止执行退出。改编题目1中的程序,当用户输入出错时给出“输入内容必须为整数!”的提示,并让用户重新输入。

    import random
    
    answer = random.randint(1, 1000)
    count = 0
    
    while True:
        try:
            num = eval(input('please input number: '))
            count += 1
            if num > answer:
                print("猜大了!")
            elif num < answer:
                print("猜小了!")
            else:
                print("猜对了!")
                break
        except:
            print("输入有误!请重新输入一个整数!")
    print("此轮猜测次数为:", count)
  1. 羊车门问题。有三扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道眉山门后面是什么。参赛者可以选择一扇门,再开启它之前,主持人会开启另一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。请问:参赛者更换选择后能否增加猜中汽车的机会?——这是一个经典问题。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率。

    import random
    
    x = 100000
    change = 0
    nochange = 0
    for i in range(1, x + 1):
        guess = random.randrange(1, 4)
        real = random.randrange(1, 4)
        if guess == real:
            nochange = nochange + 1
        else:
            change = change + 1
    
    print("不更改选择得到汽车的概率为{}".format(nochange / x))
    print("更改选择得到汽车的概率为{}".format(change / x))

第五章 函数和代码复用 习题五

  1. 实现isNum()函数,参数为一个字符串,如果这个字符串属于整数、浮点数或复数的表示,则返回True,否则返回False

    def isnum(n):
        try:
            if isinstance(n, int) or isinstance(n, float) or isinstance(n, complex):
                return True
        except:
            return False
    
    
    n = eval(input('请输入一个字符串:'))
    print(isnum(n))
  1. 实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False

    def isprime(n):
        for i in range(2, int(n / 2)):
            if n % i == 0:
                return False
        return True
    
    
    try:
        n = eval(input('请输入一个整数:'))
        print(isprime(n))
    except:
        print('请输入一个整数!')
  1. 编写一个函数计算传入字符串中数组、字符、空格以及其他字符的个数。

    def isprime(n):
        for i in range(2, n):
            if n % i == 0:
                return False
        return True
    
    
    try:
        n = eval(input('请输入一个整数:'))
        print(isprime(n))
    except:
        print('请输入一个整数!')
  1. 编写一个函数,打印200以内的所有素数,以空格分隔。

    def getprime():
        for num in range(1, 201):
            for i in range(2, num):
                if num % i == 0:
                    break
            else:
                print(num, end=' ')
    
    
    getprime()
  1. 编写一个函数,参数为一个整数n。利用递归获取斐波那契数列中的第n个数并返回。

    def Fibonacci(n):
        if n <= 2:
            return 1
        else:
            return Fibonacci(n - 1) + Fibonacci(n - 2)
    
    
    n = eval(input('please input number: '))
    print(Fibonacci(n))

第六章 组合数据类型 习题六

  1. 英文字符频率统计。编写一个程序,对给定字符串中出现的a~z字母频率进行分析,忽略大小写,采用降序方式输出。

    n = 'i love tree thousand times'
    n = n.lower()
    count = {}
    for i in n:
        count[i] = count.get(i, 0) + 1
    items = list(count.items())
    items.sort(key=lambda x: x[1], reverse=True)
    for i in items:
        word, count = i
        print('{0:<10} {1:>5}'.format(word, count))
  1. 中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出。

    n = '我爱你三千次'
    count = {}
    for i in n:
        count[i] = count.get(i, 0) + 1
    items = list(count.items())
    items.sort(key=lambda x: x[1], reverse=True)
    for i in items:
        word, count = i
        print('{0:<10} {1:>5}'.format(word, count))
  1. 随机密码生成。编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位数的密码。

    import random
    
    password_demo = [chr(i) for i in range(97, 123)] + [chr(i) for i in range(65, 91)] + [chr(i) for i in range(49, 58)]
    for i in range(10):
        password = ""
        # 8位数
        for j in range(8):
            password = password + random.choice(password_demo)
        # 打印该组随机密码
        print(password)
  1. 重复元素判定。编写一个函数,接收列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和输出测试结果的程序。

     def find_repeat(n):
        for i in n:
            if n.count(i) > 1:
                return True
        return False
    
    
    n = input("请输入一个列表")
    n = list(n)
    print(n)
    print(find_repeat(n))
  1. 重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的程序。

    def find_repeat(n):
        new_n = set(n)  # 集合会自动去重
        if n != new_n:
            return True
        return False
    
    
    n = input("请输入一个列表")
    n = list(n)
    print(n)
    print(find_repeat(n))

    第七章 文件和数据格式化 习题七

  2. 输入一个文件和一个字符,统计该字符在文件中出现的次数。

    def find_count(filename, n):
        with open(filename, 'r', encoding='utf-8') as f:
            txt = f.read()
        count = txt.count(n)
        return count
    
    
    if __name__ == '__main__':
        filename = input('请输入需要统计的文件: ')
        n = input('输入需要统计的字符: ')
        count = find_count(filename, n)
        print('{} 在 {} 出现中的次数为:{}'.format(n, filename, count))
  1. 假设有一个英文文本文件,编写一个程序读取器内容并将里面的大写字母变成小写字母,小写字母变成大写字母。

    def transfer(filename):
        with open(filename, 'r', encoding='utf-8') as f:
            txt = f.readlines()
        new_txt = []
        for lines in txt:
            for i in lines:
                if i >= 'A' and i <= 'Z':
                    new_txt.append(i.lower())
                elif i >= 'a' and i <= 'z':
                    new_txt.append(i.upper())
                else:
                    new_txt.append(i)
        with open(filename, 'w+', encoding='utf-8') as f:
            f.writelines(new_txt)
        print('{} 已经修改成功:\n {}'.format(filename, new_txt))
    
    
    if __name__ == '__main__':
        filename = input('请输入文件名称:')
        transfer(filename)
  1. 编写一个程序,生成一个10x10的随机矩阵并保存为文件(空格分隔行向量,换行分隔列向量),再写程序将刚才保存的矩阵文件另存为CSV格式,用Excel或文本编辑器打开看看结果对不对。

    import random
    
    
    def save_txt(low, high, filename):
        with open("{}.txt".format(filename), "w") as f:
            for line in range(10):
                num = ""
                for row in range(10):
                    num = num + str(random.randint(low, high)) + " "
                f.write(num + "\n")
    
    
    def save_csv(filename, csvname):
        with open("{}.txt".format(filename), "r") as f1:
            with open("{}.csv".format(csvname), "w") as f2:
                for line in f1:
                    after = line.replace(" ", ",")
                    f2.write(after)
    
    
    if __name__ == '__main__':
        low, high = eval(input("请输入随机数下限low、上限high,并用逗号隔开:"))
        filename = input("请输入txt文件名:")
        save_txt(low, high, filename)
        csvname = input("请输入csv文件名:")
        save_csv(filename, csvname)
  1. 编写一个程序,读取一个Python源代码文件,将文件中虽有除保留字外的小写字母换成大写字母,生成后的文件要能够被Python解释器正确执行。
    有一些难点,只能等我水平提高之后再来解决:

    • 引入第三方库的时候,不好做判断来互换大小写。
    • 除了保留字外,还有一些内置函数要判断是否呼唤大小写。
  1. 编写一个程序,要求能够将元素为任意Python支持的类型(包括含有半角逗号的字符串)的列表转储为CSV,并能够重新正确解析为列表。
    也有一些难点:

    • 因为要求能够列表转储存为CSV,CSV亦能够重新解析为列表,而CSV是由半角逗号,分隔元素的,进行转储的时候难免会产生元素之间的冲突,有待解决。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

Python中的链表 上一篇