简介

本次作业继承于上一次的交互问题(用户屏幕输入输出),额外内容为文件在硬盘上的读取与存储.是为了之后的简易版本的自然语言处理任务做铺垫.

题目

"""
本次的问题很简单,文件读取,与,简单的人机交互,以及异常处理答题程序特殊要求,问题一共十个,问题和回答都需要存储到硬盘中(最起码保留一次),并可以计算分数.提示:open操作 + 自定义解析器,或者使用numpy,或者pandas的保存功能.交卷时间:2017/10/31/ 10:50问题分析:我们可以问题分解将原问题简单化首先是原问题可分解为硬盘读入内存,程序人机交互,内存写入硬盘.那么问题也就分解为了  人机交互部分  与 硬盘读取写入操作
"""

问题分解

这次与之前的内容不同之处就在于,我们这一次将开发一个完整的程序.相信对于大一的萌新的这恐怕是第一次.

那么在这个问题中,你们首先会面对什么问题呢?首先是问题的复杂性,第一眼看上去这确实是一个复杂的程序.那么面对复杂的程序我们应该怎么办呢?

我们应该做的就是将复杂问题简单化,复杂问题简单化一般有两种常用措施:第一,问题分解,将复杂性问题分解为数个简单问题,第二,问题转化,将复杂问题转化为简单问题.对于这个工程而言,第二种方法是难以实现的,很难从问题转化的角度进行复杂问题简单化.我们首先应该考虑的是第一个方案,问题拆分.

分解问题

这个问题如何分解,首先从技术角度来看,我们之前已经使用过简单的人机交互x = input("请在屏幕上输入文字"),在昨天的试卷答案中,我们已经给出了该语法,将屏幕输入的文字存储为字符串变量.

那么也就是说,我们已经可以获取用户输入的字符串变量,并存储在内存中.然后这个时候我们可以考虑其他我们没有编写过得部分,第一计算分数,第二存储到硬盘.

第一个计算分数,我们要做的是用户的回答是否与我们的答案一致,那么在我们常接触的试卷中?有什么问题是可以利用我们已有的知识直接进行处理的呢?那肯定是有标准答案的判断题,选择题,以及答案唯一的填空题.此处我选择填空题两个,选择题一个编写示例程序

第二个是硬盘存储,提示关键词是 open() ,既然给了关键词只需要直接百度 python open 即可,很多教程写的非常清楚.亦或者是登陆我之前给说的python网站去查找相应api.对应部分为python3 file文件操作.

编程

获取用户输入,并将其存储到list中,当然用十个变量也可以

# # 首先是最简单的人机交互
# # 问题既可以使用十个变量进行存储也可以使用list进行存储.
question = ["问题一", "问题二"]
answer = input(question[0] + '\n')
# # 同样,我们也可以使用list存储答案answer_list = []answer_list.append(answer)

不过还有更好的实现方式for循环,顺便以同样的方式打印出来,检查一下

# 更好的代码实现方式for i in question: answer_list.append(input(i + "\n"))# 打印问题与答案,进行人工检查
for i in range(len(question)): print(question[i], '\n', answer_list[i], '\n')

计算分数的问题

# 计算分数的问题,需要问题与答案有一定的格式# 比如
question = ["1+1 = ?", "2+2 =?", "下列最大的水果是:1,西瓜,2,苹果"]
key1 = ["2", "4", "1"]
key1_test = [2, "4", "1"]
key2 = [2, 4, "1"]# 要注意链表中每个元素的数据类型,不同的数据类型除了布尔类型判断时可以进行自动转换外,其他变量并没有该功能
#所以对于计算题而言,必须将input方法返回的str变量转化为与答案一致的变量类型才行.
#当然反之依然,我们需要的仅仅是让他们的类型一致,以便进行判断.# 转化代码如下:
for i in question: answer_list.append(int(input(i + "\n")))# 此时我们就可以改卷子了,使用for循环进行判断,顺便封装以便调用
def GetScore(key, answer):Score = 0for i in range(len(key)):if int(key[i]) == int(answer[i]):  # 注意此处判断条件,int?str?或者赋予回答与答案一样的数据类型.Score += 1return Scoreprint(GetScore(key1, key1_test)) # 在屏幕输出成绩

第三个问题,python中的文件操作

本出我们使用的是python中的文件操作,open方法.
因为之前我们存储问题,用户回答,以及答案的变量都市list,而list在open操作中的行写入或者行读取,存在一定问题,我们这里直接使用list==>str,与str===>list的方式进行硬盘到内存的读写与转换.

方法如下:

# 存储
file = open(file="/home/fonttian/Data/17_DS_AI/open_file.txt", mode="w")file.write(" ".join(key1))
# file.write(str(key1))
file.close()# 读取
file = open(file="/home/fonttian/Data/17_DS_AI/open_file.txt", mode="r")
key_str = file.read()
file.close()
key_list = key_str.split(" ")
print(key_list)  # 输出

但是以上的代码存在两个明显的不足之处,第一list与str转化过程中使用的分个符号是” “,空格,而空格可能存在于我们的问题或者用户答案中,所以我们需要使用更难被使用的分隔符号,比如六个星号"******"
同时为了避免用户在答案中使用六个星号,我们在读取数据后,可以在增加一个过滤字符串的操作,(除去六个星号).(过滤字符串请参考正则表达式部分)

第二个问题是,python中用更好的文件操作的方式,with,利用with我们可以自动关闭文件IO流,增加了安全性,减少了代码量,同时也让代码更加结构化.

如同之前的提示:使用其他类库也是可以的:

# 利用第三方类库
import numpy as npnp_key1 = np.array([int(i) for i in key1])
print(np_key1)
np.savetxt("/home/fonttian/Data/17_DS_AI/np_key1.txt", np_key1)
np_key1 = np.loadtxt("/home/fonttian/Data/17_DS_AI/np_key1.txt")
print(np_key1)  # 格式转化为 np.float

封装代码

# 封装def GetScore_Examples(key, answer):Score = 0for i in range(len(key)):if int(key[i]) == int(answer[i]):  # 注意此处判断条件,int?str?或者赋予回答与答案一样的数据类型.Score += 1return Scoredef FileIO_Examples(filename, list=None, save=False):if save == False:with open(file=filename, mode="r") as file:return file.read().split("******")else:with open(file=filename, mode="w") as file:file.write("******".join(list))def Main_Examples():question = FileIO_Examples("/home/fonttian/Data/17_DS_AI/question.txt", save=False)key1 = FileIO_Examples("/home/fonttian/Data/17_DS_AI/key1.txt", save=False)answer_list = []for i in question: answer_list.append(input(i + "\n"))score = GetScore_Examples(key1, answer_list)print("your score :", score)FileIO_Examples(filename="/home/fonttian/Data/17_DS_AI/answer_list.txt", list=answer_list, save=True)Main_Examples()

学习Python3:20171031相关推荐

  1. 从零开始学习PYTHON3讲义(一)认识Python

    课程名称 从零开始PYTHON3 课程长度 15讲 适用年龄 15-20岁(初三-大一) 本讲名称 认识Python 时长 90分钟 教学内容分析 Python是时下最流行的计算机编程语言之一.本课程 ...

  2. python3入门书籍-学习python3入门书籍选哪些?

    网上搜一下,有许多现成的 python 入门资源推荐列表(包括书籍).但我没有拷贝别人的回答,而是试着认真回答本问题.我刚刚经过 python3 入门阶段,想把对新手有用的.最少必要入门资源分享给你. ...

  3. python -- 计算 平方、乘方、平方根_从零开始学习PYTHON3讲义(二)把Python当做计算器...

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

  4. python3 for循环_从零开始学习PYTHON3讲义(六)for循环跟斐波那契数列

    <从零开始PYTHON3>第六讲 几乎但凡接触过一点编程的人都知道for循环,在大多数语言的学习中,这也是第一个要学习的循环模式. 但是在Python中,我们把for循环放到了while循 ...

  5. 从零开始学习PYTHON3讲义(二)把Python当做计算器

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

  6. python3从零开始学习_从零开始学习PYTHON3讲义(十五)让画面动起来

    <从零开始PYTHON3>第十五讲 虽然看起来绘图和音乐并不相关,但是听过了上一讲的内容你一定知道,这是游戏编程中四个需要处理内容的两部分,这两部分必须同时.并行的处理,不能因为某一项计算 ...

  7. kali创建python脚本_kali下编译学习python3

    工欲善其事,必先利其器.接下里我们先来一起下载py3.0版本搭建我们的开发环境. 1.下载源tar包 wget https://www.python.org/ftp/python/3.3.0/Pyth ...

  8. 自学python3 最好的入门书籍-学习python3入门书籍选哪些?

    网上搜一下,有许多现成的 python 入门资源推荐列表(包括书籍).但我没有拷贝别人的回答,而是试着认真回答本问题.我刚刚经过 python3 入门阶段,想把对新手有用的.最少必要入门资源分享给你. ...

  9. python象棋棋盘麦粒问题_从零开始学习PYTHON3讲义(五)while循环和棋盘麦粒问题...

    <从零开始PYTHON3>第五讲 ​上一节课重点学习了字符串,并且传递了一个重要的理念,就是程序要对开发人员自己和用户都足够友好.在这个过程中,利用字符串给出充分.完整.准确的提示是非常重 ...

最新文章

  1. Codeforces Round #331 (Div. 2) A. Wilbur and Swimming Pool 水题
  2. [导入]第 3 章 Enterprise Library 的设计
  3. java怎么访问视图_springmvc-直接访问视图文件
  4. MySQL8.0 版本的安装
  5. mysql 备份 php_PHP备份/还原MySQL数据库的代码
  6. STM32 - 定时器的设定 - 基础 01 - Timer Base - Prescaler description - Upcounting mode
  7. SQL Prompt快捷键
  8. 三星android驱动程序错误,android系统的三星手机插入电脑无法识别
  9. windows下 PHP 安装
  10. 【IoT】智能硬件 | 基于电力线的视频监控系统
  11. Photoshop实用的快捷键大全
  12. 什么是零点漂移,怎么抑制零点漂移?(硬件每日一题)
  13. 数风流人物,俱在今朝!|2019年度CSDN博客之星TOP10榜单揭晓
  14. 使用Guava-retrying优雅地解决异常重试场景
  15. 重新学习Python的第二天_列表及字符串的学习与练习
  16. 洛谷-5149 会议座位
  17. vb.net 教程 3-4 窗体编程 公共控件2 radiobutton ComboBox
  18. 趣图:程序员先发现下雨了
  19. 局域网如何共享文件?计算机1通过ip访问计算机2,拿取共享文件。
  20. 用python随机获取中文名字

热门文章

  1. PHP开发一个简单的成绩录入系统
  2. 概述nodejs核心机制
  3. 有多少种方法能把足球移出边界 Out of Boundary Paths
  4. strong、copy和mutableCopy详解
  5. 记录密码的asp代码
  6. 如何建立拨号上网连接
  7. android 自定义正方形 绕中心点旋转
  8. 写的很好!细数 Java 线程池的原理
  9. Spring官网阅读(三)自动注入
  10. 微服务架构如何保证安全性?