整理-01python的应用领域

Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
7月20日,IEEE发布2017年编程语言排行榜:Python高居首位

下面是python应用得到的几个领域

1. WEB开发

最火的Python web框架Django, 支持异步高并发的Tornado框架,短小精悍的flask,bottle

1.1 Django

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。

要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善、市场占有率最高、招聘职位最多估计大家都没什么意见。Django为人所称道的地方主要有:
1. 完美的文档,Django的成功,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Django book)。
2. 全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stack framework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网 站应手的工具Django基本都给你做好了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。
3. 强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本可以跟丑陋的GET参数说拜拜。
4. 自助管理后台,admin interface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。

参考:

1.2 Tornado

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。

1.3 Flask

Flask 是一个 Python 实现的 Web 开发微框架。本身不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

参考:
从零开始用 Flask 搭建一个网站  https://www.jianshu.com/p/cc90a14856c5

参考:
Python 有哪些好的 Web 框架?  https://www.zhihu.com/question/20706333
浅谈五大Python Web框架  https://www.cnblogs.com/suzhigang/p/6208244.html

2. 人工智能

互联网产生了数据,云计算和大数据成就了人工智能,人工智能是未来科技的主流,强人工智能时代是我们共同的期待。 
人工智能的主要研究领域,主要有机器学习、神经网络、模式识别、人脸识别、定理证明等,大数据领域,主要有数据采集、数据挖掘、数据分析等,人工智能和大数据的主要研究领域,都是Python的专属。 
Python拥有强大的AI库,海量的模块,开发效率高,简单高效。python有很多库很方便做人工智能,比如numpy, scipy做数值计算的,sklearn做机器学习的,pybrain做神经网络的,matplotlib将数据可视化的。

参考:
为什么人工智能用Python? https://www.zhihu.com/question/56055999

3. 云计算

目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分也是因为云计算

参考:
十个与云计算关系密切的编程语言  http://www.kokojia.com/article/9708.html

4. 金融量化分析

在量化投资(证券和比特币)开源项目里,全球star数排名前10位里面,有7个是Python实现的。从数据获取到策略回测再到交易,覆盖了整个业务链。

参考:
金融量化—为什么我选的是Python?  https://baijiahao.baidu.com/s?id=1560923439987591
量化分析师的Python日记  https://xueqiu.com/4105947155/69228213

5. 爬虫

效率高,开发快,支持的数据类型丰富。

参考
为什么写爬虫都喜欢用python?  https://segmentfault.com/q/1010000006914497
为什么python适合写爬虫?  https://www.cnblogs.com/benzone/p/5854084.html
你是如何开始能写 Python 爬虫?  https://www.zhihu.com/question/21358581
Python爬虫学习系列教程  https://cuiqingcai.com/1052.html

6. 自动化运维

参考:
Python 在 Linux 系统运维中都有哪些应用?  https://www.zhihu.com/question/21311557
运维自动化核心_Python的重要性  https://jingyan.baidu.com/article/95c9d20d694f05ec4e756127.html

7. 科学运算

随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛,有更多的程序库的支持。虽然Matlab中的许多高级功能和toolbox目前还是无法替代的,不过在日常的科研开发之中仍然有很多的工作是可以用Python代劳的。

参考:

8. 游戏开发

感觉游戏开发中更多会使用C,C++一类编译型语言,因为更加数据传输效率更高,速度更快。
参考
Python 能写游戏吗?有没有什么开源项目?  https://www.zhihu.com/question/25960850

参考地址:
1.  你都用 Python 来做什么? https://www.zhihu.com/question/20799742
4. Python 主要应用场景、适用行业有哪些?  https://www.zhihu.com/question/19880548
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_STUDENTS 100 #define MAX_NAME_LEN 50 #define MAX_BOOK_LEN 100 // 定义借书证数据类型(结构体) typedef struct { char student_id[20]; // 学号 char name[MAX_NAME_LEN]; // 姓名 char book_title[MAX_BOOK_LEN]; // 所借书名 char borrow_date[20]; // 借书日期 char return_date[20]; // 应还日期 } LibraryCard; // 函数声明 void inputLibraryCards(LibraryCard cards[], int *count); void sortLibraryCards(LibraryCard cards[], int count); void searchByStudentId(LibraryCard cards[], int count, char *student_id); void searchByName(LibraryCard cards[], int count, char *name); void displayLibraryCard(LibraryCard card); void displayAllCards(LibraryCard cards[], int count); int main() { LibraryCard cards[MAX_STUDENTS]; // 创建结构体一维数组 int count = 0; int choice; char search_key[50]; printf("=== 学生借书证信息管理系统 ===\n"); do { printf("\n请选择操作:\n"); printf("1. 输入学生借书证信息\n"); printf("2. 显示所有借书证信息\n"); printf("3. 按学号排序\n"); printf("4. 按学号查找\n"); printf("5. 按姓名查找\n"); printf("0. 退出\n"); printf("请选择: "); scanf("%d", &choice); getchar(); // 清除输入缓冲区 switch(choice) { case 1: inputLibraryCards(cards, &count); break; case 2: displayAllCards(cards, count); break; case 3: sortLibraryCards(cards, count); printf("已按学号排序完成!\n"); displayAllCards(cards, count); break; case 4: printf("请输入要查找的学号: "); fgets(search_key, sizeof(search_key), stdin); search_key[strcspn(search_key, "\n")] = 0; // 去除换行符 searchByStudentId(cards, count, search_key); break; case 5: printf("请输入要查找的姓名: "); fgets(search_key, sizeof(search_key), stdin); search_key[strcspn(search_key, "\n")] = 0; // 去除换行符 searchByName(cards, count, search_key); break; case 0: printf("感谢使用,再见!\n"); break; default: printf("无效选择,请重新输入!\n"); } } while(choice != 0); return 0; } // 输入并存储学生借书证信息 void inputLibraryCards(LibraryCard cards[], int *count) { if(*count >= MAX_STUDENTS) { printf("借书证数量已达上限!\n"); return; } printf("\n请输入第%d个学生的借书证信息:\n", *count + 1); printf("学号: "); fgets(cards[*count].student_id, sizeof(cards[*count].student_id), stdin); cards[*count].student_id[strcspn(cards[*count].student_id, "\n")] = 0; printf("姓名: "); fgets(cards[*count].name, sizeof(cards[*count].name), stdin); cards[*count].name[strcspn(cards[*count].name, "\n")] = 0; printf("所借书名: "); fgets(cards[*count].book_title, sizeof(cards[*count].book_title), stdin); cards[*count].book_title[strcspn(cards[*count].book_title, "\n")] = 0; printf("借书日期(YYYY-MM-DD): "); fgets(cards[*count].borrow_date, sizeof(cards[*count].borrow_date), stdin); cards[*count].borrow_date[strcspn(cards[*count].borrow_date, "\n")] = 0; printf("应还日期(YYYY-MM-DD): "); fgets(cards[*count].return_date, sizeof(cards[*count].return_date), stdin); cards[*count].return_date[strcspn(cards[*count].return_date, "\n")] = 0; (*count)++; printf("信息录入成功!\n"); } // 按学号从小到大顺序排序(使用冒泡排序) void sortLibraryCards(LibraryCard cards[], int count) { int i, j; LibraryCard temp; for(i = 0; i < count - 1; i++) { for(j = 0; j < count - 1 - i; j++) { if(strcmp(cards[j].student_id, cards[j + 1].student_id) > 0) { // 交换两个结构体 temp = cards[j]; cards[j] = cards[j + 1]; cards[j + 1] = temp; } } } } // 按学号查找 void searchByStudentId(LibraryCard cards[], int count, char *student_id) { int found = 0; int i; for(i = 0; i < count; i++) { if(strcmp(cards[i].student_id, student_id) == 0) { printf("\n找到该学生的借书证信息:\n"); displayLibraryCard(cards[i]); found = 1; break; } } if(!found) { printf("未找到学号为 %s 的学生借书证信息!\n", student_id); } } // 按姓名查找 void searchByName(LibraryCard cards[], int count, char *name) { int found = 0; int i; for(i = 0; i < count; i++) { if(strcmp(cards[i].name, name) == 0) { printf("\n找到该学生的借书证信息:\n"); displayLibraryCard(cards[i]); found = 1; } } if(!found) { printf("未找到姓名为 %s 的学生借书证信息!\n", name); } } // 显示单个借书证信息 void displayLibraryCard(LibraryCard card) { printf("学号: %s\n", card.student_id); printf("姓名: %s\n", card.name); printf("所借书名: %s\n", card.book_title); printf("借书日期: %s\n", card.borrow_dat
10-16
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #define MAX_COUNT 100 typedef struct { char name[50]; int reaction_time; char record_time[20]; } ScoreRecord; // 从文件读取记录到结构体数组 int load_records(ScoreRecord records[], const char *filename, int max_count) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { return 0; } int count = 0; while (count < max_count && fscanf(fp, "%s %d %s", records[count].name, &records[count].reaction_time, records[count].record_time) == 3) { count++; } fclose(fp); return count; } // 按表格形式输出所有成绩记录 void show_records(ScoreRecord records[], int count) { printf("| 编号 | 姓名 | 反应时间(毫秒) | 记录时间 |\n"); printf("|------|------|----------------|-------------------|\n"); for (int i = 0; i < count; i++) { printf("| %d | %s | %d | %s |\n", i + 1, records[i].name, records[i].reaction_time, records[i].record_time); } } // 获取当前时间 void get_current_time(char *time_str) { time_t rawtime; struct tm * timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); strftime(time_str, 20, "%Y-%m-%d %H:%M:%S", timeinfo); } // 向结构体数组及文件末尾追加新成绩 void add_record(ScoreRecord records[], int *count, const char *filename, int ms) { if (*count >= MAX_COUNT) { printf("记录已达到最大数量!\n"); return; } FILE *fp = fopen(filename, "a"); if (fp == NULL) { printf("无法打开文件!\n"); return; } printf("请输入玩家姓名: "); scanf("%s", records[*count].name); records[*count].reaction_time = ms; get_current_time(records[*count].record_time); fprintf(fp, "%s %d %s\n", records[*count].name, records[*count].reaction_time, records[*count].record_time); (*count)++; fclose(fp); } // 模拟游戏,返回反应时间 int play_game() { // 模拟游戏开始提示 printf("游戏即将开始,请准备!\n"); // 模拟随机等待一段时间 srand(time(NULL)); int wait_time = rand() % 5 + 1; printf("等待 %d 秒后开始...\n", wait_time); sleep(wait_time); // 模拟游戏开始 printf("游戏开始!请尽快按下回车键!\n"); clock_t start = clock(); getchar(); // 消耗掉之前的换行符 getchar(); // 等待用户按下回车键 clock_t end = clock(); // 计算反应时间(毫秒) int reaction_time = (int)((end - start) * 1000 / CLOCKS_PER_SEC); printf("你的反应时间是: %d 毫秒\n", reaction_time); return reaction_time; } // 显示菜单 void show_menu() { printf("\n游戏菜单:\n"); printf("1. 开始游戏\n"); printf("2. 查看成绩\n"); printf("3. 退出游戏\n"); printf("请输入你的选择: "); } int main() { ScoreRecord records[MAX_COUNT]; int record_count = load_records(records, "score.txt", MAX_COUNT); int choice; do { show_menu(); scanf("%d", &choice); switch (choice) { case 1: { int ms = play_game(); add_record(records, &record_count, "score.txt", ms); break; } case 2: show_records(records, record_count); break; case 3: printf("退出游戏,再见!\n"); break; default: printf("无效的选择,请重新输入!\n"); } } while (choice != 3); return 0; }在这个代码的基础上,用到load_records show_records add_record这几个函数
最新发布
12-11
#include "stdio.h" #include "stdlib.h" #include "string.h" #define COUNT 30 void start(); //函数声明 void input(); void save(); void change(); void sort(); void dele(); void output(); void search(); struct information{ //定义结构体 char devno[30]; //编号 int devsort; //所属部门 char devmaster[30]; // 领用人 char devname[30]; //设备名字 int devprice; //设备价格 char devbuydate[30]; //购买日期 int devstate; // 设备状态 char devdonenumber[30]; //设备数量 }dev[COUNT]; //结构体变量 int count=0; FILE *fp; //文件指针 int main() //主函数 { while(1) start(); return 0; } void start() //启动菜单 { int chi; printf(" 设备管理系统\n"); printf(" ********************************************\n"); printf(" * 1.设备信息的录入: *\n"); printf(" * 2.设备信息的修改: *\n"); printf(" * 3.设备信息的分类统计: *\n"); printf(" * 4.删除某个设备: *\n"); printf(" * 5.查找某个设备: *\n"); printf(" * 6.退出系统: *\n"); printf(" ********************************************\n"); printf(" 》》*^_^*输入你的选择: "); scanf("%d",&chi); printf("\n"); if(chi==1) input(); else if(chi==2) change(); else if(chi==3) sort(); else if(chi==4) dele(); else if(chi==5) search(); else if(chi==6) { printf("谢谢使用,再见!*^_^*\n"); exit(0);} else { printf(" You Enter The Choice Is Not valid ! \n"); } } void input() //数据录入 { char flag[20]; do{ printf("*^_^*请输入你的设备信息:\n"); printf("设备编号:"); scanf("%s",dev[count].devno); printf("所属部门(1,A部门 2,B部门 3,C部门):"); scanf("%d",&dev[count].devsort); printf("领用人:"); scanf("%s",dev[count].devmaster); printf("设备名字:"); scanf("%s",dev[count].devname); printf("设备价格:"); scanf("%d",&dev[count].devprice); printf("设备购买日期:"); scanf("%s",dev[count].devbuydate); printf("设备状态(1未报废 0报废):"); scanf("%d",&dev[count].devstate); printf("设备数量:"); scanf("%s",dev[count].devdonenumber); count++; printf("是否继续输入数据 y是 n否 : "); scanf("%s",flag); }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0); output(); save(); } void save() //数据保存 { int i; FILE *fp; if((fp=fopen("shebei.txt","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<count;i++) if(fwrite(&dev[i],sizeof(struct information),1,fp)!=1) printf("file write error\n"); fclose(fp); printf("已保存设备信息到文件中*^_^*\n"); } void change() //数据修改 { char ch[20],a[20]; int i; printf("\nyou sure want change devInfor y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nenter you want change devName:"); scanf("%s",a); for(i=0;i<count;i++) { if(strcmp(dev[i].devname,a)==0) { printf("\nyou sure want change dev name(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nname:"); scanf("%s",dev[i].devname);} printf("\nyou sure want change dev master(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nmaster:"); scanf("%s",dev[i].devmaster);} printf("\nyou sure want change dev no(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nno"); scanf("%s",dev[i].devno);} printf("\nyou sure want change dev sort(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nsort"); scanf("%d",&dev[i].devsort);} printf("\nyou sure want dev price(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nprice"); scanf("%d",&dev[i].devprice);} printf("\nyou sure want dev done date(y/n): "); scanf("%s",ch); if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\ndone date"); scanf("%s",dev[i].devdonenumber);} } } } save(); } void sort() //数据分类显示 { int i,chi,sum=0,wei=0,da=0,sao=0; printf("输入你想要统计的信息: 1(报废的设备数目) 2(设备所属部门分类)"); scanf("%d",&chi); if(chi==1) { for(i=0;i<count;i++) { if(dev[i].devstate==0) sum++; } printf("报废的设备数目为 %d \n",sum); } else if(chi==2){ for(i=0;i<count;i++) { if(dev[i].devsort==1) wei++; else if(dev[i].devsort==2) da++; else if(dev[i].devsort==3) sao++; } printf("A部门数量为 %d B部门数量为 %d C部门数量和为 %d",wei,da,sao); }else { printf("你输入的选项不符合要求!\n");} } void dele() //数据删除 { int i,j; char c[20]; printf("\nenter you want delete name :\n"); printf("name:"); scanf("%s",c); for(i=0;i<count;i++) if(strcmp(c,dev[i].devname)==0) break; for(j=i;j<count-1;j++) dev[j]=dev[j+1]; printf("\t\t\tyou had delete %s\n",c); count--; save(); output(); } void output() //数据输出 { int i; printf("设备编号\t所属部门\t领用人\t设备名字\t设备价格\t购买日期\t设备状态\t设备数量\n"); for(i=0;i<count;i++) { printf("%s\t%d\t%s\t%s\t%d\t%s\t%d\t%s\n",dev[i].devno,dev[i].devsort,dev[i].devmaster,dev[i].devname,dev[i].devprice,dev[i].devbuydate,dev[i].devstate,dev[i].devdonenumber); } } void search() //数据查找 { int i; char a[20],ch[10]; printf("\nenter you want look name:"); scanf("%s",a); for(i=0;i<count;i++) if(strcmp(dev[i].devname,a)==0) printf("%s\t%d\t%s\t%s\t%d\t%s\t%d\t%s\n",dev[i].devno,dev[i].devsort,dev[i].devmaster,dev[i].devname,dev[i].devprice,dev[i].devbuydate,dev[i].devstate,dev[i].devdonenumber); } 帮我修正代码
06-20
#include <iostream> // 用来输入输出 using namespace std; // 函数声明:找字符,用指针记录位置 int findChar(char* str, char target, int* posArray); int main() { char inputStr[1000]; // 存用户输入的字符串 char findCh; // 要找的字符 int positions[1000]; // 用数组存位置(传指针进去) int count; // 记录找到几次 char choice; // 用户选择是否继续 // 使用 do-while 循环,保证至少执行一次 do { // 提示用户输入 cout << "\n请输入一个句子:"; cin.ignore(); // 清除之前可能残留的换行符 cin.getline(inputStr, 1000); // 安全读取一行 cout << "请输入要查找的字符:"; cin >> findCh; // 调用函数找字符 count = findChar(inputStr, findCh, positions); // 输出结果 if (count == 0) { cout << "没有找到这个字符。" << endl; } else { cout << "找到了 " << count << " 次,位置是:"; // 用指针遍历结果数组 int* p = positions; // p 指向第一个位置 for (int i = 0; i < count; i++) { cout << *(p + i); // 使用指针访问 if (i < count - 1) { cout << ", "; } } cout << endl; } // 询问是否继续 cout << "是否继续查找?(y/n): "; cin >> choice; } while (choice == 'y' || choice == 'Y'); // 用户输入 y 或 Y 就继续 cout << "程序已结束,再见!" << endl; return 0; } // 函数定义:统计字符出现次数并记录位置 int findChar(char* str, char target, int* posArray) { int count = 0; // 找到的次数 int index = 0; // 当前字符的位置 // 用指针方式遍历字符串 while (*(str + index) != '\0') { // 直到遇到字符串结尾 if (*(str + index) == target) { *(posArray + count) = index; // 用指针存位置 count++; } index++; } return count; // 返回总次数 } 是这个代码有问题,改一下
12-03
void showMenu() { printf("\n=== 学生管理系统 ===\n"); printf("0. 退出系统\n"); printf("1. 录入学生信息和成绩\n"); printf("2. 打印学生信息\n"); printf("3. 统计学生人数\n"); printf("4. 查找学生信息\n"); printf("5. 修改学生信息\n"); printf("6. 删除学生信息\n"); printf("7. 排序学生成绩\n"); printf("8. 生成学生信息文件\n"); printf("9. 读取文件学生信息\n"); printf("10. 输出各科成绩不及格学生信息\n"); printf("11. 输出各科成绩最高分学生信息\n"); printf("请选择操作(输入数字): "); } int main() { Student students[MAX_STUDENTS]; int count = 0; int choice; while (1) { showMenu(); scanf("%d", &choice); switch (choice) { case 0: printf("感谢使用本系统,再见!\n"); exit(0); case 1: count = addStudent(students, count); break; case 2: printStudents(students, count); break; case 3: printf("当前学生人数为:%d\n", count); break; case 4: { int subChoice; printf("按学号查询请按1,按姓名查询请按2: "); scanf("%d", &subChoice); if (subChoice == 1) searchStudentById(students, count); else if (subChoice == 2) searchStudentByName(students, count); else printf("无效选择。\n"); break; } case 5: modifyStudent(students, count); break; case 6: count = deleteStudent(students, count); break; case 7: sortStudentsByTotalScore(students, count); break; case 8: saveToFile(students, count); // 需要实现保存到文件的功能 break; case 9: count = loadFromFile(students); // 需要实现从文件加载数据的功能 break; case 10: listFailedStudents(students, count); break; case 11: listTopScorers(students, count); break; default: printf("无效选择,请重新输入。\n"); } } return 0; } 帮我加一下注释
07-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值