zoukankan      html  css  js  c++  java
  • 学习Python3:201701030

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

    参考:anconda
    参考:类库问题

    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表达式

    对于代码的自由思考

    1. 字符串变量question2 与question4 的不同之处,使用””进行换行.
    2. lanbda表达式和循环语句的对应关系,是不是要自己再用不同的写法把问题再写一遍.自己能不能给出更好的写法.
    3. 第四题的不同写法很多,直接定义月份天数,或者定义[1,3,5,7,8,10,12]列表,然后进行判断是不是可行的,有什么优势或者劣势?其他的实现算法呢?
    4. 等等
  • 相关阅读:
    从狄利克雷卷积到莫比乌斯函数
    Codeforces Round #613 (Div. 2)
    Codeforces Round #612 (Div. 2)
    CTF:第五题
    CTF:第四题
    CTF:第三题
    CTF,第二题
    CTF,第一题
    我也要做CTF了,哎,人老了,脑子需要动一动了,第一节,配置本地环境
    websocket JS使用方式
  • 原文地址:https://www.cnblogs.com/fonttian/p/8480721.html
Copyright © 2011-2022 走看看