学习Python3:201701030

第一步首先是开发环境的搭建

参考:anconda
参考:类库问题

IDE:pycharm,去官网下载即可,内容前两篇也有提到

学习目标与计划

第一周的计划是自学python,之后周一到周五每天都有作业.

第一天的作业主要是考考基本流程语句,以大一学弟学妹的水平,应该能在限时内做完,但是实现方式会比较差,我给出的答案基本是启发性的,我带的七个人都是我亲自面试的,悟性还可以,我预估的主要问题是他们能不能开窍.具体内容会在下面提到.

作业讲解

问题一,编程语言+逻辑问题

本问题实现的点就三个(循环语句,数组(1,2,3,4),逻辑性问题(数字组合)),没什么好讲的,前两个点是基本功,最后一个问题是逻辑问题,哪里出错补哪里.

print("1. 屏幕输出:1,2,3,4可以组成的互不相同且无重复数组的三位数\n")
# 关键
# 循环控制;逻辑思考,这个题目比较简单,不做过多讲解

for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            if (i != k) and (i != j) and (j != k):
                print(i * 100 + j * 10 + k)

问题二,编程语言+领域知识

question2 = "2.一只理财产品投入一万元,第一年利率为0.1,第二年为0.2,第三年为0.3,第三年为0.4,\n以此类推最多十年,编写程序,输入数字可求n年后收益与投入总价,\n(1)复利时(2)非复利时"

print(question2)

# 这个题目的实现方式十分简单,可以说是简单至极,仅仅写最简单的代码一个一个添加就可以实现
# 但是,在python中该问题的实现方式却不仅仅局限于一般性的流程控制语句
# 我给出的答案是 基于lambda 的,这是python与C++与java8之前语法的不同之处
# 扩展: 函数式编程 与 面向对象编程

base_money = 10000

years = int(input("请输入要计算的年份"))
print(base_money * (1 + sum(range(1, years)) / 10))
all_money_list = [10000 * (1 + i / 10) for i in range(1, years)] # 列表解析,函数式编程的一大亮点
print(sum(all_money_list) - years * 10000 + 2 * 10000)

def ShowAll():  # 展示所有年份
    for i in range(1, 11):
        years = i
        print(base_money * (1 + sum(range(1, years)) / 10))
        all_money_list = [10000 * (1 + i / 10) for i in range(1, years)]
        print(sum(all_money_list) - years * 10000 + 2 * 10000)
        # 注意观察输出数据的类型变化

# lambda
all_money_list2 = [j for j in [(1 + i / 10) for i in range(0, years)]]


def GetResult(money):
    return lambda y: money * y


getResult = GetResult(base_money)
final_money = 0
for i in all_money_list2: final_money = getResult(i)

print("非复利,使用lambda表达式", final_money)

for i in all_money_list2: base_money = base_money * i
print("复利:", base_money)

money_rate = 1
for i in all_money_list2: money_rate = money_rate * i
print(money_rate)
print("复利:,使用lambda表达式", GetResult(10000)(money_rate))

关键点:输入数字,计算,专业名词(复利).
前两个点属于基本功范畴,本处的专业名词比较简单,但是算是一个开始,因为我们的学科特殊性,领域知识几乎是我们面对的问题.

本处不太一样的地方就是,我给出的参考答案是以lambda表达式实现的,学弟学妹们还没有接触这个.
我给出了扩展提示,这也是很重要的一个内容.

问题三,编程语言

print("3. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(求1-100000内数字)\n")

# 基本语法考核,基本功

import math

for i in range(100000):
    x = int(math.sqrt(i + 100))
    y = int(math.sqrt(i + 268))
    if (x * x == i + 100) and (y * y == i + 268):
        print(i)

问题四,编程语言+领域知识+逻辑问题

question4 = \
    "\
    4.\
    题目:输入某年某月某日,判断这一天是这一年的第几天?\
    1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊\
          情况,闰年且输入月份大于3时需考虑多加一天。\
    2.程序源代码:\
    "
print(question4)

# 该问题的算法实现存在多样性,我想看看大家写的.

year = int(input('year:\n'))
month = int(input('month:\n'))
day = int(input('day:\n'))

months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)  # 这只是实现方式中的一种
if 0 <= month <= 12:
    sum = months[month - 1]
else:
    print('data error')
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):  # 检查是否闰年
    leap = 1
if (leap == 1) and (month > 2):
    sum += 1
print('it is the %dth day.' % sum)

第四个题比较特别的地方就在于实现方式的多样性,这是一个可表现的亮点.

划重点的部分

如何学习

学习最重要的是发挥主动性,同时也会有很多技巧性的东西.下面我所写的东西,希望能培养的主要是分析问题的能力,至于其他想要表达的,(学会了分析问题之后,你可以自己去分析)

学快点,学多点.

可以感觉出我对时间安排的比较近,从发布计划,到第一次作业仅仅只有一天的间隔.果不其然…萌新学弟学妹们基本上没什么准备.这次是给大家敲个钟.希望大家以后能够发挥主动,讲究效率.

对作业关键词进行统计分析

编程语言 = 4
逻辑问题 = 领域知识 = 2

这就是前三天的作业重点,每次作业外加一份,可发挥亮点的问题一个

知识点列表

循环语句
range(),数组生成
input(),屏幕输入
基本符号若干
math.sqrt() 数学类库,开平方


扩展

def XXXX(): 定义类
%d  占位符
lambda表达式

对于代码的自由思考

  1. 字符串变量question2 与question4 的不同之处,使用”\”进行换行.
  2. lanbda表达式和循环语句的对应关系,是不是要自己再用不同的写法把问题再写一遍.自己能不能给出更好的写法.
  3. 第四题的不同写法很多,直接定义月份天数,或者定义[1,3,5,7,8,10,12]列表,然后进行判断是不是可行的,有什么优势或者劣势?其他的实现算法呢?
  4. 等等
posted @ 2017-10-31 11:00  FontTian  阅读(139)  评论(0编辑  收藏  举报