Python语言程序设计基础(第二版)嵩天高等教育出版社第四章答案

4.1

from random import randint
x = randint(0,9)
print("猜数游戏,请输入0到9之间的整数".center(20,'*'))
n = eval(input("请输入:"))
i= 1
while n != x:
    if n > x:
        print("太大了!")
    elif n < x:
        print("太小了!")
    n = eval(input("请输入:"))
    i += 1

print("预测{}次,你猜中了!".format(i))

4.2

print("统计各个类型的字符数量".center(20,'*'))
Str = input("请输入一串字符:")

char, number, space, other = 0,0,0,0
for i in Str:
    if 'a' <= i <= 'z' or 'A' <= i <= 'Z':
        char += 1
    elif '0' <= i <= '9':
        number += 1
    elif i == ' ':
        space += 1
    else:
        other += 1
print("有{}个英文字母,{}个数字,{}个空格,{}个其他字符。".format(char, number, space, other))

4.3

2020-10-25    
Python语言程序设计基础(第二版)嵩天高等教育出版社第二章答案

2.2

TempStr = input("请输入带符号的金钱值(美元:$,人民币:¥):")
if TempStr[-1] == '$':
    dollor = eval(TempStr[0:-1])
    rmb = dollor*6
    print("{}美元等于{}人民币".format(dollor,rmb))
elif TempStr[-1] == '¥':
    rmb = eval(TempStr[0:-1])
    dollor = rmb / 6
    print("{}人民币等于{}美元".format(rmb, dollor))
else:
    print("格式错误")

2.3

from turtle import *
week = ['black', 'grey', 'gold','violet','purple', 'green', 'red']
setup(0.99,0.99,0,0)
pensize(25)
penup()
fd(-250)
pendown()
seth(-40)
for i in range(4):
    pencolor(week[i])
    circle(40,80)
    pencolor(week[i])
    circle(-40,80)
circle(40, 40)
fd(40)
circle(16, 180)
fd(40*2/3)
done()

2.4

2020-10-18    
读完《C 陷阱与缺陷》感

o1

书并不厚,一百多页。昨天终于抽出一下午的时间在图书馆把剩下的一半看完,虽只是第一遍,但还是有些感想。

02

C 强大的灵活性导致了任何一个 C 代码都可能隐藏着难以察觉的深层次的错误,而往往越难以发掘的错误所带来的后果往往更加严重,甚至是系统级别的灾难性后果!C 语言标准中的各种语法规则简短而简单,但是当它们放到一起,组成一句或一段代码的时候,情况就会变得很复杂。越是接近硬件、接近底层的操作,越容易引发错误。我们在设计程序之初就应该想到这个程序未来可能遇到的方方面面的问题,例如程序的可移植性、与旧 C 编译器的兼容性、代码的健壮性、程序的生命周期等等。表面上显而易见的东西,但当他们执行的时候可能就会在很大程度上偏离程序员对他们行为的预测。隐含的错误最为致命,最稳妥的办法就是在开始敲下第一个字符的时候,你就已经知道了自己的目的和所要面临的可以想到的问题,以及他们的解决方法。

int i;
char a[n];
for(i = 0; i <= n; i++){
    a[i] = 0;
}

很明显,在最后一个循环的时候,i超出了数组的边界。C 标准中对于这种情况的所导致的结果是未定义的,但在有些计算机上,它将是一个死循环。当进入最后一个超出数组边界的循环的时候,将 0赋值给了a[i],此时,内存中位于 &a[i]地址上的数据将被修改为0,如果此编译器按照内存地址递减的方式来给变量赋值,那么这个地址将是整型变量i的地址。如果将他修改为0,那么这个循环永远不会到达边界条件,将会无限循环下去。

03

宏使得许多简单的实现得以以一种便于观看和理解的方式呈现在代码当中,但是它的危险性同样存在。

#define f (x) (x + 1)

上述是定义了一个 f(x) (x +1),还是 f(x)(x + 1)。正确的答案是前者,注意宏定义当中的空格。

#define MAX(a,b) ((a) > (b)? (a):(b))

这段宏定义看起来没有问题,但是很遗憾,它会导致一个致命问题。在宏定义MAX(a,b)中,参数ab将会被各自求值两次,试想一下,如果传入宏中的参数带有副作用例如自增或自减符(–、++),那么就会导致程序的逻辑错误。

int a[n];
int max = a[0];
int i = 0
while(i < n){
    max = MAX(max, a[i++]);
}

如果 MAX 为宏,那么就会出错。将宏展开之后可以得到

2020-10-15    
开始Vim之旅《Vim 8文本实战》

Vim 简介

Vim是一个模式编辑器,起源于早期的命令操作系统时代。随着图形化(GUI)的愈发盛行,以至于图形化成为开发者选择操作逻辑的首选方案,模式编辑器的难度大、门槛高、反人类操作特点决定了它在民间消失的未来。

但是!Vim 作为一款模式编辑器相比于无模式编辑器来说,有着无与伦比的优越性。

  1. Vim 是自由的、可控的、开源的,我们可以根据自己的需求打造出一个属于自己的编辑器,这完全凭借自己的爱好。
  2. Vim 是快速的,只要掌握了 Vim 的高级编辑技巧,就能够手不离键盘,快速的定位、插入、修改。
  3. Vim 是可拓展的,它拥有众多强大的插件,让 Vim 更加的强大和不可超越!

模式介绍

Vim 有四种模式:

  1. 普通模式(Normal mode)
    • 当你使用 Vim 打开一个文件的时候,就进入了 Normal Mode(普通模式)。这时候,键盘上的每一个按键都对应着一个具体或者隐含的命令和功能。
  2. 插入模式(Insert mode)
    • 当按下 i键时,就进入了 Insert Mode(插入模式),这时的操作和普通的无模式编辑器的操作无异。
  3. 视觉模式(Visual mode)
    • 当按下 v键时,就进入了 Visual Mode(视觉模式),这时候 Vim 会把选中的字符高亮,方便用户观察。
  4. 命令模式(Command mode)
    • 当按下 :键时,就进入了 Command Mode(命令模式),Vim 拥有众多从复杂到简单的命令,例如打开、保存、关闭文件;设置主题等等。

配置文件的修改

一般位于 $HOME/.vimrc,就是用户目录下的 .vimrc文件,Windows 下是用户目录下的 _vimrc文件。

syntax on " 支持语法高亮显示
filetype plugin indent on "启用根据文件类型自动缩进

set autoindent "开始新行时处理缩进
set expandtab "将制表符Tab展开为空格,这对于Python尤其有用
set tabstop=4 "要计算的空格数
set shiftwidth=4 "用于自动缩进的空格数

set backspace=2 "在多数终端上修正退格键Backspace的行为

colorscheme murphy "修改配色主题

set directory=$HOME/.vim/swap/ "统一交换文件的存放目录

" set noswapfile 禁用交换文件

set undofile "启动持久性的撤销记录
"设置统一的记录文件存放目录
if !isdirectory("$HOME/.vim/undodir")
    call mkdir("$HOME/.vim/undodir", "p")
endif
set undodir="$HOME/.vim/undodir"

Vim 的基本操作

打开/新建一个文件

vim hello.c

如果 hello.c存在,则打开它,否则新建【new】。终端的左下方会显示当前的文件或者编辑器的状态,包括文本的单词数目、行数等。

2020-10-03    
和树莓派的初次见面

前言

刚买了一个 4G RAM 版的树莓派 4B(Raspberry Pi),心疼我的钱啊,真的月底要吃泡面了吗?呜呜呜~~~

搞了一下树莓派的官方 little 系统,目前还用不到图形界面,就省点内存空间吧。想装 Centos Arm 版的系统,不过不知道为什么,ssh 连不上,我怀疑是初始的安装没有完成,但是我这边有没有显示器,就只能先用 Debian 系的系统了。还是觉得 Centos 最亲切,之后再研究吧。

后记

最近太忙了,课特别的多。除了进一步的学习 C 和一些我想学习的技术(例如 vim 和 Windows 编程)之外,陪陪我爱的人也是必不可少的。我相信过完这艰难的几年之后,我能够成熟自信地站在通往未来大殿的红毯之上。加油吧,少年。

后面我会详细的介绍树莓派的配置和使用方法,还有一些陷阱的提醒,这样即能够使知识系统化,也能为后来者提供一些帮助。

谢谢。

2020-09-27    
利用阿里云服务器免费体验wordpress博客个人网站

​## 前言

目前市面上有许许多多的虚拟云服务器 ECS,例如阿里云、华为云、又拍云等等,他们提供很多的云服务,但 ECS 是个很重要的项目。它就相当于一台远程的电脑,我们可以在上面搭建自己需要的各种服务。使用厂商提供的的 ECS 的最大的好处就是其稳定性,不用担心故障或者数据丢失又或者是停电。

本例就以阿里云 ECS,加上久负盛名的 word press 这个强大的软件来进行演示,搭建一个属于自己的一片小天地,开始自己的创作之旅。

云服务器

然后,我们需要一台云服务器,可以使用阿里云的学生机,每月 9.9 非常的便宜。也可以注册体验阿里云的免费限时的云服务器基于 ECS 搭建云上博客 - 云起实验室-在线实验-上云实践-阿里云开发者社区-阿里云官方实验平台-阿里云

注册登录就可以看到自己服务器的公网 IP 和相关信息。

再点击创建资源,等待创建完成,在这里,我们不适用阿里云官方的教程,我们用宝塔面板将会更加的便捷和简单。

安装宝塔面板

使用 shell 软件进行登录,见我之前的文章 如何申请 XShell 和 XFtp 的免费家庭学生版本

输入刚才的 IP 地址,名称随意,端口为 22,

输入用户名为 root,

输入刚才得到的密码,点击确定。

之后进行连接,即可成功连接。

在 shell 中输入 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh,耐心等待安装完成。

输入 y

安装完成后进行后台登录,复制外网面板地址,使用用户名和密码进行登录。

2020-09-25    
NextCloud如何通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享的链接地址

前言

近日有一些已经分享过的文件需要修改或者调整,但是如果再次上传分享的话,之前的链接就会失效。有没有即不改变分享的链接地址,又能够替换已经分享过的文件的方法呢?

我在百度 Google 上搜索一番就发现,根本没有人有这样的经历或者需求,那我还真算是个奇葩······折腾一番之后无果,我开始思考:链接的地址会不会写入了数据库表中呢?能不能修改相关的数据库表的数据来达到重新指向新的分享文件,还不改变之前的分享链接呢?如果可行的话,甚至还可以自定义分享链接

方法

通过宝塔面板打开 next cloud 的数据库

01

打开自己 next cloud 的数据库表,搜索 share,找到 oc_share,点击浏览

02

之后就会发现,所有的分享数据都在这张表中!且是一一对应的关系。

03

包括文件的路径,和分享的后缀链接(这个就是一个固定的字符串token)。而我们要做的就很简单了,在自己希望替换文件的那个分享链接的那条数据中,将file_target指向新的文件就大功告成了!

同时,如果希望自定义链接地址,也可以修改表中的 token的那串字符。

04

结语

本文结合亲身经历分享给大家,希望能够帮助到他人。

2020-08-23    
如何申请XShell和XFtp的免费家庭学生版本

申明:本文不是违规破解文件发布或教程,本文所有程序均符合相关法律规定!

前言

XShell 和 XFtp 是非常好用的远程主机 ssh 管理软件,官网https://www.netsarang.com/zh/xshell/。有了它们,管理远程服务器就更加得心应手了。

XShell 和 Xftp 对于商业版是收费的,可是对于个人用户和学生们,它们是免费的。这一点真的很良心!本文教大家如何用邮箱申请免费的 XShell 和 XFtp。

打开官网申请界面

https://www.netsarang.com/zh/free-for-home-school/,填写姓名和邮箱,选择需要的产品,点击确定。之后,它们的下载链接就会发送到你刚才填入的链接中。

01

2020-08-21    
PicGo配合Typora怎么配置Chevereto图床,PicGo的Chevereto图床配置

前言

搭配我之前的文章观看哦~:

  1. 自建本地服务器,自建 Web 服务器——保姆级教程!
  2. Chevereto 免费图床搭建教程 | vps 搭建免费图床教程

搭建完 Chevereto 私有图床之后,我就开始就开始发愁。图片一个一个单独上传太麻烦了,能不能一键上传添加到文章中呢?答案当然是可以的。

我目前在使用的 MarkDown 编辑器是 Typora,干净简洁,即时渲染很方便,我一直在用。官网:https://typora.io/。Typora设置里面有专门的图床设置, 需要配合 PicGo 来实现。

实现前提

  • 获取 API v1 key(在 Chevereto 仪表盘 > 设置 > API 中查看)
  • 安装 PicGo
  • 安装 Typora

PicGo 的官网https://molunerfinn.com/PicGo/

Typora 的官网https://typora.io/

过程

配置 PicGo

安装web-uploader这个插件

01

配置你的自定义图床设置

将我的网址换成自己的,POST 参数名填入suorce,JSON 路径填入image.url,自定义 Body 填入{“key”:“自己的 API key”}。点击确定,设为默认图床。

Typora 配置

文件 > 偏好设置 > 图像中修改设置如下,

03

点击验证图片上传即可验证是否成功。

错误

错误一:Failed to fetch

这是 PicGo 的端口设置错误导致的。打开 PicGo设置 > 设置Service,将端口设置为 36677。

2020-08-21    
Ubuntu无法正常引导,进不去Ubuntu,安装Ubuntu20和Window10双系统后,

前言

前几天想安装 Ubuntu20,看看它能不能替代我的 Windows 成为日常主力系统。不过自己并没有闲置的笔记本或电脑,又不想安装虚拟机,就只能安装双系统试试水。

这一试不要紧,压根就没找到 Ubuntu 的启动项,安装 Ubuntu 的那块硬盘也没有正确引导。在查阅了多方资料之后,大多是没有用的。什么引导修复程序啊,使用 easyUEFI 添加引导啊之类的。easyUEFI 添加的时候,Ubuntu 系统文件根本就无法读取,还怎么添加引导。

解决方法

那就是在自定义分区的时候,一定要多加一个 BIOS 引导分区。为什么呢?

因为现在的笔记本和台式机都支持 UEFI 引导,而 EFI 引导仍是老式的引导方式,所以不能够正确的识别。

所以只要在安装的时候,把 BIOS 引导作为开头分区就 OK 了,系统就可以正确引导。

引导方式

开机按 F12 选择 UEFI 引导的硬件,或者进去 BIOS 修改第一启动项。

注意:Ubuntu 系统引导不会出现在 Windows 10 的开机引导界面。

结语

本文结合亲身经历分享给大家,希望能够帮助到他人。

2020-08-21