第一步首先是开发环境的搭建
IDE:pycharm,去官网下载即可,内容前两篇也有提到
学习目标与计划
第一周的计划是自学python,之后周一到周五每天都有作业.
第一天的作业主要是考考基本流程语句,以大一学弟学妹的水平,应该能在限时内做完,但是实现方式会比较差,我给出的答案基本是启发性的,我带的七个人都是我亲自面试的,悟性还可以,我预估的主要问题是他们能不能开窍.具体内容会在下面提到.
作业讲解
问题一,编程语言+逻辑问题
本问题实现的点就三个(循环语句,数组(1,2,3,4),逻辑性问题(数字组合)),没什么好讲的,前两个点是基本功,最后一个问题是逻辑问题,哪里出错补哪里.
print("1. 屏幕输出:1,2,3,4可以组成的互不相同且无重复数组的三位数
")
# 关键
# 循环控制;逻辑思考,这个题目比较简单,不做过多讲解
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年后收益与投入总价,
(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内数字)
")
# 基本语法考核,基本功
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:
'))
month = int(input('month:
'))
day = int(input('day:
'))
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表达式
对于代码的自由思考
- 字符串变量question2 与question4 的不同之处,使用””进行换行.
- lanbda表达式和循环语句的对应关系,是不是要自己再用不同的写法把问题再写一遍.自己能不能给出更好的写法.
- 第四题的不同写法很多,直接定义月份天数,或者定义[1,3,5,7,8,10,12]列表,然后进行判断是不是可行的,有什么优势或者劣势?其他的实现算法呢?
- 等等