CS50 2021 pset9 finance题解

cs50 pset9 solution

Posted by Lxsy on January 31, 2022

这里写几个关键点,具体的代码可以去我的github上查看

自动向数据库插入当地时间

  • 说明书中,要求我们设计一个table,来记录交易的完整信息,其中就有交易时间

  • 获取时间,然后手动插入显然是一个比较麻烦的做法,故而我们希望能让数据库直接在插入数据条的时候自动插入时间

  • 方法如下

    • 1
      
      CREATE TABLE time(time TimeStamp NOT NULL DEFAULT (datetime('now','localtime')));
      
      • 这里意思是,创建一个叫time的表,然后里面的列叫time,它的属性是Timestamp,在没有指定的情况下,自动为当地时间

向已经建好的table增加column

  • 写代码的时候,写到最后history模块,才发现还要记录交易时的股价

    • (当然啦,那不咋知道自己亏没亏
  • 重新建表显然是非常麻烦的方法,直接增加列是一个比较方便的处理方式

  • 方法如下

    • 1
      
      ALTER TABLE buy ADD COLUMN price NUMERIC;
      
      • 这里,是在buy表里增加一列price的意思

Python

函数可以嵌套定义

  • 不同于c,在Python中函数能够嵌套定义
  • 譬如说在函数A中定义函数a
    • 那么a只能在A中被调用

判断变量类型的一个函数

1
isinstance(arg1,arg2)
  • arg1:被判断的变量
  • arg2:类型名称
  • 返回值
    • True:arg1是arg2类型的
    • False:返之
  • 譬如
1
2
if isinstance(a,int):
    print "a is int"

判断string类型的变量是否表达了一个整数

  • 我submit的时候被卡了这个点,不能简单的归结为是否为int,而应当去考虑111.00这种情况

  • 我处理的想法是这样的

    • step1:先确认他是一个数
    • step2:把string转成float
      • 这一步非常重要11.2这种string用int()转会报错
    • step3:比较int()和没有转int,如果相等,则认为是整数
  • 模块代码如下

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      sharess = request.form.get("shares")
          
      for i in sharess:
          if i not in ['0','1','2','3','4','5','6','7','8','9','.']:
              return apology("invalid shares",400)
          
      if float(sharess) != int(float(sharess)):
          return apology("invalid shares",400)
          
      sharess = int(float(sharess))