day66 评论功能的实现

第一种方法:把全部评论都一次列出来,需要用递归的方式实现:

class Node:
    @staticmethod
    def digui(ret, row):
        for rt in ret:
            if rt['id'] == row['parent_id']:
                row['children'] = []
                rt['children'].append(row)
                return
            else:
                Node.digui(rt['children'],row)

    @staticmethod
    def create_tree(comment_list):
        ret = []
        for row in comment_list:
            if not row['parent_id']: # None
                row['children'] = []
                ret.append(row)
            else:
                Node.digui(ret,row)
        return ret

第二种方法:循环实现评论数据结构

前提:python中字典列表是引用类型

举个栗子:因为列表li是引用类型,所以v和li引用同一个地址,v增加后li也同时增加,v删除后li也会删除


li = 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是基本的实现代码,你可以根据自己的需求进行修改和完善: ```c #include <msp430g2553.h> // 定义数码管引脚 #define SCLK BIT5 // 时钟线 #define RCLK BIT4 // 存储器锁存线 #define DIO BIT3 // 数据线 // 定义按键引脚 #define KEY1 BIT0 // 切换年月日和时分秒 #define KEY2 BIT1 // 调整时间 // 定义常量 #define YEAR 0 #define MONTH 1 #define DAY 2 #define HOUR 3 #define MINUTE 4 #define SECOND 5 // 定义初始时间 unsigned char time[6] = {21, 5, 29, 11, 59, 50}; // 定义数码管显示表 unsigned char code[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; // 定义变量 unsigned char displayType = HOUR; // 显示类型,默认为时分秒 unsigned char adjustType = HOUR; // 调整类型,默认为小时 unsigned char adjustValue = 0; // 调整值 // 延时函数 void delay(unsigned int time) { while (time--) { __delay_cycles(1000); } } // 点亮一个数码管 void light(unsigned char index, unsigned char value) { unsigned char i; for (i = 0; i < 8; i++) { P1OUT &= ~SCLK; if (i == index) { P1OUT &= ~DIO; } else { P1OUT |= DIO; } P1OUT |= SCLK; } for (i = 0; i < 8; i++) { P1OUT &= ~SCLK; if (i == 0) { P1OUT &= ~DIO; } else { P1OUT |= DIO; } P1OUT |= SCLK; } for (i = 0; i < 8; i++) { P1OUT &= ~SCLK; if (i == 0) { P1OUT &= ~DIO; } else { P1OUT |= DIO; } P1OUT |= SCLK; } P1OUT &= ~RCLK; P1OUT |= RCLK; P1OUT |= value; } // 显示当前时间 void displayTime() { switch (displayType) { case YEAR: light(0, code[time[YEAR] / 10]); light(1, code[time[YEAR] % 10]); light(2, 0x40); // 显示年的小数点 light(3, code[time[MONTH] / 10]); light(4, code[time[MONTH] % 10]); light(5, 0x40); // 显示月的小数点 light(6, code[time[DAY] / 10]); light(7, code[time[DAY] % 10]); break; case HOUR: light(0, code[time[HOUR] / 10]); light(1, code[time[HOUR] % 10]); light(2, 0x40); // 显示小时的小数点 light(3, code[time[MINUTE] / 10]); light(4, code[time[MINUTE] % 10]); light(5, 0x40); // 显示分钟的小数点 light(6, code[time[SECOND] / 10]); light(7, code[time[SECOND] % 10]); break; case MONTH: light(0, code[time[MONTH] / 10]); light(1, code[time[MONTH] % 10]); light(2, 0x40); // 显示月的小数点 light(3, code[time[DAY] / 10]); light(4, code[time[DAY] % 10]); light(5, 0x40); // 显示日的小数点 light(6, code[time[HOUR] / 10]); light(7, code[time[HOUR] % 10]); break; case DAY: light(0, code[time[DAY] / 10]); light(1, code[time[DAY] % 10]); light(2, 0x40); // 显示日的小数点 light(3, code[time[HOUR] / 10]); light(4, code[time[HOUR] % 10]); light(5, 0x40); // 显示小时的小数点 light(6, code[time[MINUTE] / 10]); light(7, code[time[MINUTE] % 10]); break; case MINUTE: light(0, code[time[MINUTE] / 10]); light(1, code[time[MINUTE] % 10]); light(2, 0x40); // 显示分钟的小数点 light(3, code[time[SECOND] / 10]); light(4, code[time[SECOND] % 10]); light(5, 0x40); // 显示秒的小数点 light(6, 0x00); light(7, 0x00); break; case SECOND: light(0, code[time[SECOND] / 10]); light(1, code[time[SECOND] % 10]); light(2, 0x40); // 显示秒的小数点 light(3, 0x00); light(4, 0x00); light(5, 0x00); light(6, 0x00); light(7, 0x00); break; } } // 调整时间 void adjustTime() { switch (adjustType) { case YEAR: time[YEAR] += adjustValue; if (time[YEAR] > 99) { time[YEAR] = 0; } break; case MONTH: time[MONTH] += adjustValue; if (time[MONTH] > 12) { time[MONTH] = 1; } break; case DAY: time[DAY] += adjustValue; if (time[DAY] > 31) { time[DAY] = 1; } break; case HOUR: time[HOUR] += adjustValue; if (time[HOUR] > 23) { time[HOUR] = 0; } break; case MINUTE: time[MINUTE] += adjustValue; if (time[MINUTE] > 59) { time[MINUTE] = 0; } break; case SECOND: time[SECOND] += adjustValue; if (time[SECOND] > 59) { time[SECOND] = 0; } break; } } void main() { // 初始化引脚 P1DIR |= SCLK | RCLK | DIO; P1OUT &= ~(SCLK | RCLK | DIO); // 初始化按键 P1DIR &= ~(KEY1 | KEY2); P1REN |= KEY1 | KEY2; P1OUT |= KEY1 | KEY2; // 初始化定时器 TACCR0 = 32767; // 1s TACTL = TASSEL_1 | MC_1 | ID_0; // 开启中断 __enable_interrupt(); // 显示初始时间 displayTime(); while (1) { // 切换显示类型 if (!(P1IN & KEY1)) { displayType++; if (displayType > SECOND) { displayType = YEAR; } delay(20); } // 调整时间 if (!(P1IN & KEY2)) { adjustValue++; if (adjustValue > 9) { adjustValue = 0; } delay(20); } else { if (adjustValue > 0) { adjustTime(); displayTime(); delay(500); } adjustValue = 0; } } } // 定时器中断函数,每秒钟更新一次时间 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer0_A0_ISR(void) { time[SECOND]++; if (time[SECOND] > 59) { time[SECOND] = 0; time[MINUTE]++; if (time[MINUTE] > 59) { time[MINUTE] = 0; time[HOUR]++; if (time[HOUR] > 23) { time[HOUR] = 0; time[DAY]++; if (time[DAY] > 31) { time[DAY] = 1; time[MONTH]++; if (time[MONTH] > 12) { time[MONTH] = 1; time[YEAR]++; if (time[YEAR] > 99) { time[YEAR] = 0; } } } } } } } ``` 注意,这段代码只是一个基本的实现,还有许多细节需要注意,比如按键消抖、闰年判断等等。如果你想要更加完善的功能,需要自己进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy393939

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值