Python语言程序设计基础(第二版)嵩天等课后习题答案

第一次博文 Time:2018年04月28日 星期六 11:37
二次补充 2018年05月02日
第一章 程序设计基本方法 P29

# 1.1字符串的拼接
str1 = input("请输入一个人的名字:")
str2 = input("请输入一个地点:")
print("世界这么大,{}想去{}看看。".format(str1,str2))
# 1.2整数序列求和
n = input("请输入一个整数N:")
sum = 0
for i in range(int(n)):#或者调和函数eval(n)
   print(i,end = ' ')
   sum = sum + i+1
print("1到N求和结果为:",sum)
# 1.3 9*9乘法表
# 版本一
for i in range(1,10):
   for m in range(1,i+1):
       sum = i*m
       if m < i:
           if sum < 10:
               print(m,'*',i,"= {}".format(sum),end = '  ')
           else:
               print(m,'*',i,'=',sum,end = ' ')
       else:
           print(m,'*',i,'=',sum)
# 版本二
for i in range(1,10):
   for j in range(1,i+1):
       print("{} * {} = {:2}".format(j,i,i*j),end = ' ')
   print('')
# ---------1.4 计算1+2!+3!+4!+...+10!------------#
sum,tmp = 0,1
for i in range(1,11):
   tmp *= i
   sum += tmp
print("1+2!+3!+4!+...+10!=",sum)
# ---------1.5 猴子吃桃问题 ----------------------#
# list(range(5,0,-1)) -----  [5, 4, 3, 2, 1]
n = 1
for i in range(5,0,-1):
   n = (n+1)*2  #n = (n+1)<<1 左移一位乘以2
print(n)
# --------1.6 健康食谱输出 ------------------------#
diet = ['西红柿','土豆','鸡蛋','黄瓜','青菜']
for i in range(5):
   for j in range(5):
       if (i != j):
           print(diet[i],diet[j],sep = '炒')
# --------1.7 绘制五角星 --------------------------#
from turtle import *
##fillcolor("red")
color('red','yellow') #color('线条颜色','填充颜色')
begin_fill()
while True:
   forward(200)
   right(144)
   if abs(pos()) < 1:
       break
end_fill()
# ------1.8 太阳花的绘制 --------------------------#
from turtle import *
color('red','yellow')
begin_fill()
while True:
   forward(200)
   left(170)
   if abs(pos()) <1:
       break
end_fill()
done()

第二章 Python程序实例解析

# ---------------温度转换程序1.1 P35-------------------------#
TempStr = input("请输入带有符号的温度值:")
if TempStr[-1] in ['F','f']:
   C = (eval(TempStr[0:-1]) - 32) / 1.8
   print("华氏温度{}转换为摄氏度温度是:{:.2f}C".format(TempStr,C))
elif TempStr[-1] in ['C','c']:
   F = eval(TempStr[0:-1])*1.8 + 32
   print("摄氏温度{}转换为华氏温度是:{:.2f}F".format(TempStr,F))
else:
   print("输入格式错误")
# -----------------循环输入----------------------------------#
TempStr = input("请输入带有符号的温度值:")
while TempStr[-1] not in ['N','n']:
   if TempStr[-1] in ['F','f']:
       C = (eval(TempStr[0:-1]) - 32) / 1.8
       print("华氏温度{}转换为摄氏度温度是:{:.2f}C".format(TempStr,C))
   elif TempStr[-1] in ['C','c']:
       F = eval(TempStr[0:-1])*1.8 + 32
       print("摄氏温度{}转换为华氏温度是:{:.2f}F".format(TempStr,F))
   else:
       print("输入格式错误")
   TempStr = input("请输入带有符号的温度值:")
# --------------------------正方形的绘制---------------------------------#im
import turtle as t
t.pensize(3)
for i in range(1,5):
   t.fd(100)
   t.setheading(90*i)
t.done()
# --------------------------六边形的绘制---------------------------------#im
import turtle as  t
t.pensize(3)
for i  in range(6):
   t.fd(100)
   t.seth(60+60*i)
t.done()
# --------------------------叠边形的绘制---------------------------------#im
import turtle as  t
t.pensize(3)
for i  in range(9):
   t.fd(150)
   t.seth(80+80*i)
t.done()
# --------------------------同切圆的绘制---------------------------------#im
import turtle as  t
t.pensize(3)
for i in range(4):
   t.circle(50+i*10)
t.done()
# ----------------------------长度转换------------------#
# 1米 = 39.37英寸
le = input()
if le[-1] in ['M','m']:
   temp = eval(le[0:-1]) * 39.37
   print("{:.3f}in".format(temp))
elif le[-2:] in ['in','IN']:
   temp = eval(le[0:-2]) / 39.37
   print("{:.3f}m".format(temp))
else:
   print("输入格式错误")
# ------------------------多彩蟒蛇的绘制---------------------------------#
import turtle as t
week = ['black','grey','darkgreen','gold','violet','purple','green','red']
def drawSnake(r,angle,length):
   t.seth(-40)
   for i in range(length):
       t.pencolor(week[i%8])
       t.circle(r,angle)
       t.pencolor(week[(i+1)%8])
       t.circle(-r,angle)
   t.circle(r,angle/2)
   t.fd(40)
   t.circle(16,180)
   t.fd(40*2/3)
t.setup(650,350)
t.penup()
t.fd(-250)
t.pendown()
t.pensize(25)
drawSnake(40,80,9)
t.done()

第三章 基本数据类型
天天向上的力量
在一年中,如果每天进步》》,那么一年下来会进步到多少呢?
在一年中,如果每天退步》》,那么一年下来会倒退到多少呢?

  • 一年中每天提升0.001:1.44,一年中每天能力下降0.001:0.69
  • 一年中每天提升0.005:6.17,一年中每天能力下降0.005:0.16
  • 一年中每天提升0.01:37.78,一年中每天能力下降0.01:0.03
  • 向上5天向下2天的力量:4.63。
  • 工作日多努力每天的努力应达到:0.019
# 1.1 每天的改变在千分之一 P74
import math
dayup = math.pow((1+0.001),365)
daydown = math.pow((1-0.001),365)
print("一年中每天提升0.001:{:.2f},一年中每天能力下降0.001:{:.2f}".format(dayup,daydown))
import math
dayup = math.pow((1+0.005),365)
daydown = math.pow((1-0.005),365)
print("一年中每天提升0.005:{:.2f},一年中每天能力下降0.005:{:.2f}".format(dayup,daydown))
#1.3 每天的改变在百分之一
import math
dayfactor = 0.01
dayup = math.pow((1+dayfactor),365)
daydown = math.pow((1-dayfactor),365)
print("一年中每天提升0.01:{:.2f},一年中每天能力下降0.01:{:.2f}".format(dayup,daydown))
#1.4 在每年的365天中,每周工作5个工作日,工作日每天提升0.01,
#休息两天,休息时每天下降0.01
dayup,dayfactor = 1.0,0.01
for i in range(365):
   if i%7 in [6,0]:
       dayup *= (1 - dayfactor)
   else:
       dayup *= (1 + dayfactor)
print("向上5天向下2天的力量:{:.2f}。".format(dayup))
#1.5 问工作日多努力才能达到365天每天都工作的成绩
def daydayUp(df):
   dayup = 1.0
   for i in range(365):
       if i%7 in [6,0]:
           dayup *= (1 - 0.01)
       else:
           dayup *= (1 + df)
   return dayup
dayfactor = 0.01
while(daydayUp(dayfactor) < 37.78):
   dayfactor += 0.001
print("每天的努力应达到:{:.3f}".format(dayfactor))

第四章 程序的控制结构 P121

# 4.1 猜数字游戏
k = 5
x = eval(input("请输入0~9之间的整数"))
tem = 0
while x != k:
    tem += 1
    if(x > k):
        print("遗憾,太大了")
    else:
        print("遗憾,太小了")
    x = eval(input("请输入0~9之间的整数"))
print("预测{}次,你猜中了".format(tem))
# 4.2 统计不同字符个数
c,n,b,o = 0,0,0,0 # c代表字符个数 n代表数字个数 b代表空格个数 o代表其他字符个数
strs = input("请随意输入一行字符,包含字母,数字,空格或其他字符:")
for s in strs:
    if ord('a') <= ord(s) <= ord('z') or ord('A') <= ord(s) <= ord('Z'):
        c += 1
    elif ord('0') <= ord(s) <= ord('9'):
        n += 1
    elif ord(' ') == ord(s):
        b += 1
    else:
        o += 1
print("包含字母{0}个,数字{1}个,空格{2}个,其他字符{3}个".format(c,n,b,o))
# 4.3 最大公约数的计算
m,n = eval(input("请输入连个整数,中间以逗号隔开"))
x,y = m,n
r = m % n
while r != 0:
    m,n = n,r
    r = m % n

print("{}和{}的最大公约数:{};最小公倍数:{:.0f}".format(x,y,n,x*y/n))
# 4.4 猜数游戏续
import random
k = random.randint(0,100)
x = eval(input("请输入0~100之间的整数"))
tem = 0
while x != k:
    tem += 1
    if(x > k):
        print("遗憾,太大了")
    else:
        print("遗憾,太小了")
    x = eval(input("请输入0~100之间的整数"))
print("预测{}次,你猜中了".format(tem))
# 4.5 猜数字续
import random
while True:
    try:
        k = random.randint(0, 100)
        x = int(input("请输入0~100之间的整数"))
        tem = 0
        while x != k:
            tem += 1
            if (x > k):
                print("遗憾,太大了")
            else:
                print("遗憾,太小了")
            x = eval(input("请输入0~100之间的整数"))

    except:
        print("输入内容必须为整数!")
    else:
        print("预测{}次,你猜中了".format(tem))
        break
# 4.5 羊车门问题 思想:大量样本以频率代替概率
import random
a = ['羊1', '羊2', '汽车']
times = 1000*1000  # 尝试次数
first, change = 0, 0
for i in range(times):
    x = random.choice(a)  # 正确答案
    y = random.choice(a)  # 参赛者选择答案
    if x == y:   # 坚持最初的选择
        first += 1
    else:         # 改变选择
        change += 1
print("坚持初心获得胜利的概率:{:.2f}%".format(first/times*100))
print("改变初心获得胜利的概率:{:.2f}%".format(change/times*100))

第六章 组合数据类型 P180
6.1要求
编写程序,在16个字符大小写和9个数字组成的列表中随机生成10个8为密码。

#first 1 随机密码生成

# 导入random库,后续生成0~61之间的随机整数
import random
# 新建列表类型存储字符串和数字
strs = []
# 添加字符
for i in (65,97):
    for j in range(26):
        strs += chr(i+j)
# 添加数字
for i in range(10):
    strs += str(i)
# 输出10个8位的密码
for i in range(10):
    print("密码", i+1, ":",end= '')
    for j in range(8):
        print(strs[random.randint(0,61)], end= '')
    print()

6.2重复元素判定
编写一个函数,接受列表作为参数,如果一个元素在列表中出现了不知一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和测试结果的程序。

思路:利用集合的无重复性实现

#second 2 重复元素判定
def testReEle(lis):
    tem = set(lis)
    if len(tem) == len(lis):
        print('True')
    else:
        print('False')
def getList():
    lis = []
    ch = input("请输入判定元素,回车表示结束:")
    while ch != '':
        lis.append(ch)
        ch = input("请输入判定元素,回车表示结束:")
    testReEle(lis)
getList()

6.3文本字符分析
编写程序接收字符串,按照字符出现频率的降序打印字母。

# 文本字符分析
str = input("请输入要分析的字符串,回车表示结束:")
while str != '':
    # 创建字典类型保存结果
    counts = {}
    # 扫描字符串,统计出现频率
    for ch in str:
        counts[ch] = counts.get(ch,0) + 1
    # 改变类型为列表类型,按照出现频率降序排列
    items = list(counts.items())
    # 利用sort函数排序
    items.sort(key= lambda x : x[1],reverse= True)
    # 打印输出
    for i in range(len(items)):
        word, count = items[i]
        print("{0:<10}{1:>5}".format(word, count))
    str = input("请输入要分析的字符串,回车表示结束:")

6.5 生日悖论分析

# 生日驳论分析 样本太大时,运行时间会相应延长
# 思路:利用随机函数随机生成1~365中随机数字,以列表存储生成的23个数字,利用集合判断是否重复
#       大样本分析中,出现重复count+1,最后统计出现重复的数据所占的比例
import random
# 大样本次数
times = 1000*1000
# 统计生日相同的次数
count = 0
for i in range(times):
    # 创建列表类型,存储23个人的生日在当年的某一天
    lis = []
    for j in range(23):
        lis.append(random.randint(1,365))
    # 利用集合的无重复性,转换为集合类型存储
    items = set(lis)
    if len(items) != len(lis):
        count += 1
print("至少两人生日相同的概率:{:.2f}%".format(count/times*100))
随着国家大数据战略的深入实施,各行业智慧化建设急需数据分析人才和智能应用人才。智慧化简单来说是一个以机器替换人力的过程,而机器的“灵魂”是程序。Python已经成为公认的驱动大数据智能应用的主流编程语言Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要具备一定的计算思维能力,熟悉用程序进行数据分析的一般流程,因此程序设计教材要言不甚深、文不甚俗,既要覆盖相关技术,又不能面面俱到,注重对问题的分析和解释,用程序表达算法。鉴于此,我们编写了本书。 本书每一章的标题都以Python开头,凸显Python在各个部分都有其独特的编程理念和方法。与其他高级编程语言如C、C++和Java等相比,Python在数据的表示、处理和可视化方面都有绝对的优势。有编程基础的学习者在学习Python时最好能忘掉以往程序设计语言的语法,彻底转变观念,以全新的姿态融入到Python的编程特点和规律之中。如变量定义、数据类型、数据结构、控制结构、类和对象、文件访问、数据分析和可视化,每一部分都有其特别之处,都值得我们重新认识,重新使用,重新熟悉。每一章开始的思维导图都是对本章技术脉络的梳理,开门见山地给学习者展示本章的知识和技术体系,以便学习者在学习过程中始终能保持思路清晰和整体把握。每一章开头的本章导读都是编者多年来程序开发与设计教学经验的提炼与升华,都是对程序设计的理解和感悟,值得学习者深入领会。每一章开头的本章要点都是要求学习者深入理解的重要知识和熟练掌握的关键技术。每一章的小结都是对本章要点的具体解释,供学习者复习查询。 本书为河北省高等教育教学改革研究与实践项目“新工科背景下警务大数据应用专业人才培养模式与教学实践研究”(编号:2018GJJG450)的阶段性成果。 下面是本书的体系结构图。 第1章Python编程初步。学习本章,要了解Python作为一种计算机程序设计脚本语言,结合了解释性、编译性和互动性的特点;了解在Linux和Windows中安装Python的方法;了解IDLE、PyCharm和Jupyter三种常用Python程序编辑环境。工欲善其事,必先利其器,通过对本章的学习,学习者可拥有一个强大的编程工具,从此开启数据分析编程之旅。 第2章Python语言基础Python作为一门与计算机交流的编程语言,有着跟自然语言相似的特点:字、词、句、段落、篇章,以及相应的行文语法规则。学习本章,要理解程序行文的字词句,主要包括基本数据类型、常量和变量、运算符和表达式;理解程序的段落和篇章,主要包括常用内置函数、库函数和系统函数的使用;掌握程序的语法规则,主要包括常用的变量定义和标识符命名规则、语句组织成文编码规则等。这些都是程序设计基础,学习者只有对此熟练掌握后,才能在后续的学习中得心应手。 第3章Python组合数据类型。组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练掌握Python组合数据类型(列表、元组、字符串、字典、集合)的创建、访问和常见基本操作,以及序列解包功能。 第4章 Python控制结构。针对物质随时间由简单向复杂、由低级向高级发展的顺序,Python语言有相应的顺序结构语句;针对物质运动发展的条件性,Python语言有相应的选择结构语句;针对物质运动的波浪式前进螺旋式上升规律,Python语言有相应的循环结构语句。学习本章,要从马克思主义自然哲学视角理解Python语言在描述物质运动规律时的表达方式;掌握用Python语言描述常用算法,解决一些基本问题的方式。 第5章 Python函数与模块。有些经常用到的能实现特定功能的代码块,我们总是不希望每次用到时都重写一遍,甚至不希望复制一遍,但又想重复使用。Python里这些经常重用的代码块以函数(Function)的形式被定义,每一次复用被称为函数调用,计算机依然要执行重用的代码。学习本章,要理解函数的概念,掌握定义函数的方法,深刻理解函数调用中参数的传递(值传递、地址传递),理解变量的作用域(变量的作用范围或变量的生命周期),理解函数集合模块、包等概念,掌握模块和包的创建及使用方法。 第6章 Python面向对象程序设计。面向过程的程序设计方法难以保证程序的安全性和代码的可重用性,而面向对象的程序设计方法能够更好地提高大型程序的质量和开发效率,增强程序的安全性和提高代码的可重用性。学习本章,重在理解面向对象程序设计思想、类和对象的概念
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值