首页
大事记
友情链接
留言板
关于
Search
1
解决SSH登录卡在"Last login"问题
1,477 阅读
2
无界拷贝文件在线传输系统开始公测
1,213 阅读
3
宝塔BT面板PHP防CC
1,065 阅读
4
高考作文论证方法之“广深高铁”
568 阅读
5
Linux环境安装Dlib——以Centos7为例
563 阅读
默认分类
新鲜科技
时事热点
学无止境
Python
Arduino
作文素材
C语言
踩坑记录
机器学习
资源分享
站长杂谈
登录
Search
标签搜索
机器学习
Datawhale
C语言
git
python
组队学习
物联网
esp8266
PHP
云顶书院
Linux
LLM
建站
网站
宝塔
开学
清明节
VPS
Arduino
开源硬件
MoyiTech
累计撰写
56
篇文章
累计收到
38
条评论
首页
栏目
默认分类
新鲜科技
时事热点
学无止境
Python
Arduino
作文素材
C语言
踩坑记录
机器学习
资源分享
站长杂谈
页面
大事记
友情链接
留言板
关于
搜索到
56
篇与
的结果
2022-11-11
人生苦短,我用Python
概述众所周知,Python是用C写的,虽然Python的运行速度被很多人所诟病,但它的开发速度是C无法比拟的:丰富的开源库 以及很多用C写的底层模块 如Dlib,OpenCV等,都在不断丰富着Python的生态。Python的特性优雅的操作append remove pop sorted这些丰富的内置函数给编程效率带来了极大的提升缩进语法Python的缩进语法简直就是强迫症的福音!之前在不同人写的C代码的时候,经常存在着不规范缩进的问题,导致看起来非常难受。现在到了Python,缩进不规范直接就不给运行。面向对象C语言是一个典型的面向过程的编程语言。在Python中,可以说是万物皆对象,如int、str是对象,甚至可以说类是对象、元类也是对象。 在Python中,一个变量即一个对象,在使用前可以无需定义,它可以是任何类型,同时也能随时变成任何类型,这样一来 它的操作也就灵活了许多。在合适的地方充分利用面向对象的思想可以让我们拥有更快的开发效率。对象的本质就是存放数据和功能的容器只要你造出来的东西能够存放数据和功能,那就能够成为一个对象总的来说面向对象是一种编程思想,而不是具体的某一项技术
2022年11月11日
195 阅读
0 评论
0 点赞
2022-11-05
「云顶书院」C语言复习笔记
前言说真的,在云顶书院的四周适应期简直太快太快了。就感觉好像还没开始学啥呢,但转头一看,之前对于C语言还是萌新的我已经学会了好多好多了......C语言的基本语法网上都有,在这就不再整理了,那就写点儿不一样的吧!作为强迫症 在这几周的编码过程中时时刻刻都想着优化自己的代码:怎么写更快、更美、更易读、更可续。甚至有的代码只写了1个小时,但优化它的时间甚至都接近了10个小时。在这儿主要是想梳理一些近期写过/遇到的比较有趣的代码Amazing codeLet's enjoy it!通过数组调用函数在完成本周作业时,需要一个随机生成+-*/的功能,但是对生成的数字都有一定的范围要求(1~100),那么在生成随机数后 首先想到的是先把四个运算生成器封装成函数,再返回是否答对,但是到了这里,使用连续的if-else就显得不够那么“优雅”。于是就想到了将四个函数放到一个数组里,由于函数名并不能通过整数型和字符型这些来表示,于是就想到了指针:将函数的地址储存到一个长度为4的数组中。调用时就可以先使用随机数作为数组索引进行调用。具体实现方式如下:int (*exam_container[4]) (int i) = {add_exam, sub_exam, mul_exam, div_exam};其中第一个int表示函数的返回值是int类型,*表示该数组储存的为指针,int i表示这四个函数的形参都是int i,后面大括号里面则是定义的四个函数的名称(注意不加括号)接着又发现了一个弊端,以加法生成器add_exam()为例//加法 int add_exam (int i) { //加法题目生成采用答案倒推法,避免使用while过多消耗系统资源 int input; int res = random (1, 100); int add2 = random (1, res - 1); //保证add1 > 0 int add1 = res - add2; printf ("%d + %d =", add1, add2); scanf ("%d", &input); exam_log[i][0] = add1; exam_log[i][1] = '+';//自动转化为ASCII码 exam_log[i][2] = add2; exam_log[i][3] = res; exam_log[i][4] = input; if (input == res) { return 10; } else { return 0; } }其中int类型exam_log负责储存本次考试每道题的详情,这段代码显然在四个函数里是重复的,scanf和input==res同样也是。这里就需要用函数返回一个数组,交由上层函数统一进行调用,于是就用到了指针函数: C 从函数返回数组 再经过一番修改,函数就变成这样了//加法 int *add_exam () { static int outcome[4]; //加法题目生成采用答案倒推法,避免使用while过多消耗系统资源 int res = random (1, 100); int add2 = random (1, res - 1); //保证add1 > 0 int add1 = res - add2; printf ("%d + %d =", add1, add2); outcome[0] = add1; outcome[1] = '+';//相当于返回的ASCII码 outcome[2] = add2; outcome[3] = res; return outcome; }由于函数变为了指针函数,且无需参数了,那么定义储存函数指针的数组就变成这样了int * (*exam_container[4]) () = {add_exam, sub_exam, mul_exam, div_exam};很恐怖对不对?完整代码待作业提交结束后奉上~//written by moyi //2022-11-04 #include<stdio.h> #include<time.h> #include<stdlib.h> #include<string.h> char data[100][3][20]; int count = 0; int exam_log[10][5]; char user_id[50]; int login(); void initialize(); void read_file(); void write_file (char *user_id, int mark, int time); int random (int start, int end); int random_except (int start, int end, int except_num); int print_info (char *user_id); void exam (char *user_id); void menu(); int *add_exam (); int *sub_exam (); int *mul_exam (); int *div_exam (); //把四种运算生成器放到数组里 //前面的*代表里面函数返回指针(这个试了好几分钟才发现的问题) //后面的星号代表函数的地址 int * (*exam_container[4]) () = {add_exam, sub_exam, mul_exam, div_exam}; int main() { initialize(); menu(); return 0; } void menu(){ while (1) { char input[50]; printf ("\nMenu:\n1.开始测试\n2.检查分数\n3.退出\n\n请输入指令(1/2/3):"); scanf ("%s", input); if (!strcmp (input, "1") ) { exam (user_id); } else if (!strcmp (input, "2") ) { if(!print_info (user_id)){ printf("你没考过试!\n"); } } else if (!strcmp (input, "3") ) { return; } else { system ("cls"); printf ("看看你写的啥!\n\n"); } } } //初始化 void initialize(){ srand ( (unsigned int) time (NULL) ); while(!login()){ printf("\n格式错误!请重新输入!\n"); } } //登录 int login(){ printf ("What is your ID:"); scanf ("%s", user_id); if (strlen (user_id) != 6) { return 0; } int i; for (i = 0; i < 6; i++) { if (i < 2) { if (user_id[i] > 'Z' || user_id[i] < 'A') { return 0; } } else { if (user_id[i] > '9' || user_id[i] < '0') { return 0; } } } system("cls"); printf ("Login success!\nHello:%s\n", user_id); return 1; } //读文件 void read_file() { //r:文件不存在会报错 //w+:文件被清空 //a:只写在最后面 //a+:读写,不会覆盖文件,没有文件也可以自动创建 FILE *fp = fopen ("record.txt", "a+"); char row[80]; char *token; int i = 0; count = 0;//读取前重置计数器 while (fgets (row, 80, fp) != NULL) { count++; token = strtok (row, ","); int j = 0; while (token != NULL) { if (j == 2) { token = strtok (token, "\n"); } strcpy (data[i][j], token); token = strtok (NULL, ","); j++; } i++; } fclose (fp); } //写入文件 void write_file (char *user_id, int mark, int time) { FILE *fp = fopen ("record.txt", "a"); //a:追加到文件结尾,节省IO资源 if (fp == NULL) { fprintf (stderr, "fopen() failed.\n"); exit (EXIT_FAILURE); } fprintf (fp, "%s,%d,%d\n", user_id, mark, time); fclose (fp); return; } int random (int start, int end) { return rand() % (end - start + 1) + start; } //生成随机数时不包含某数 int random_except (int start, int end, int except_num) { int tmp; do { tmp = random(start, end); } while (tmp == except_num); //注意是取等才循环 return tmp; } //加法 int *add_exam () { static int outcome[4]; //加法题目生成采用答案倒推法,避免使用while过多消耗系统资源 int res = random (1, 100); int add2 = random (1, res - 1); //保证add1 > 0 int add1 = res - add2; printf ("%d + %d =", add1, add2); outcome[0] = add1; outcome[1] = '+';//相当于返回的ASCII码 outcome[2] = add2; outcome[3] = res; return outcome; } //减法 int *sub_exam () { static int outcome[4]; int sum = random (1, 100); int x = random (1, sum - 1); //保证res > 0 int res = sum - x; printf ("%d - %d =", sum, x); outcome[0] = sum; outcome[1] = '-';//相当于返回的ASCII码 outcome[2] = x; outcome[3] = res; return outcome; } //乘法 int *mul_exam () { static int outcome[4]; //下面同样利用了100/a <= 100.0/a的限制,避免了使用while int res, a, b; a = random (1, 51); b = random (1, 100 / a); res = a * b; printf ("%d * %d =", a, b); outcome[0] = a; outcome[1] = '*';//相当于返回的ASCII码 outcome[2] = b; outcome[3] = res; return outcome; } //除法 int *div_exam () { static int outcome[4]; //除法跟乘法生成方式一样,换个参数就行 int res, Divisor, Dividend; res = random (1, 51); Divisor = random (1, 100 / res); Dividend = res * Divisor; printf ("%d / %d =", Dividend, Divisor); outcome[0] = Dividend; outcome[1] = '/';//相当于返回的ASCII码 outcome[2] = Divisor; outcome[3] = res; return outcome; } //考试函数 void exam (char *user_id) { int random_log[4];//已经出过的赋值1 int input; int *p; int i, tmp; int mark = 0;//初始分数 int start_time = time (0);//初始时间 tmp = random (0, 3);//确保random_expect函数正确执行 for (i = 0; i < 10; i++) { //用了个不太妙的方法 //对后3个题目进行操作,保证四中运算均出现 int flag=0; if(i > 6){ int j; for(j=0;j<4;j++){ if(!random_log[j]){ tmp = j; flag = 1; } } } if(!flag){ tmp = random_except (0, 3, tmp);//保证每次题目不同 } random_log[tmp] = 1; p = exam_container[tmp] ();//调用出题函数获取数组 scanf ("%d", &input); //判断答案是否正确 if (input == * (p + 3) ) { mark += 10; } //赋值到exam_log,便于考试结束后输出 exam_log[i][0] = *p; exam_log[i][1] = *++p; exam_log[i][2] = *++p; exam_log[i][3] = *++p; exam_log[i][4] = input; } int end_time = time (0); //写入数据 write_file (user_id, mark, end_time - start_time); //输出考试详情 printf ("\n\n 问题 | 正确答案 | 你的答案"); for (i = 0; i < 10; i++) { printf ("\n%3d%3c%3d=?|%10d|%d", exam_log[i][0], exam_log[i][1], exam_log[i][2], exam_log[i][3], exam_log[i][4]); } printf ("\n\n本次得分:%d\n时间:%d秒\n\n\n", mark, end_time - start_time); } //输出该ID的考试记录 int print_info (char *user_id) { system("cls"); printf ("你以前的记录是:"); read_file(); int res = 0; int i; for (i = 0; i < count; i++) { if (!strcmp (user_id, data[i][0]) ) { printf ("\n%s %3s %s秒", data[i][0], data[i][1], data[i][2]); res = 1; } } return res; } C语言随机数生成:rand和srand函数原文链接关于杨辉三角的一些思考原文链接超市老板那道题原文链接结语保持学习,保持热爱!
2022年11月05日
285 阅读
1 评论
0 点赞
2022-11-02
Linux编译安装Python3.9——以CentOS7为例
在CentOS中使用yum安装python3时,总是安装不到需要的版本,在一些特定的环境下又需要特定版本的Python。然而网上的各种教程又良莠不齐(在此特别diss某某DN),故本篇将详细整理一遍在CentOS7上编译安装Python3的过程。
2022年11月02日
381 阅读
0 评论
1 点赞
2022-10-29
《活法》读书随笔
第一章 实现理想一条人生法则:只有主动追求的东西才可能到手人如果只满足于现状,将很难取得进步。若要完成某件看似不可能的事,首先不要急于否定自己或是找借口,而是要想尽一切办法去“做到”。睡也想、醒也想,持续强烈的愿望最重要 无论是生活还是学习中,我们常常陷入一种被称为“三分钟热度”的状态:看到别人天天早起背书,也要早起背书、考试成绩不理想假装“发奋图强”学几天。 显然,在这种状态下是不大可能成功的。究其原因,很多情况下是因为受到了他人的影响,而不是你内心深处的想法。书中所谓“随便想想的愿望”大概就是类似“三分钟热度”的那种状态吧,要想摆脱这种不良状态,就需要由内心深处强烈的愿望。 在我看来,这种“强烈的愿望”往往与热爱相关,就像钢琴家必然热爱钢琴、企业家必然热爱他的事业、而我将永远热爱编程。所以,若要实现一件事,首先要接纳甚至去热爱它。如果你睡觉前背单词、睡醒还在背单词、就连做梦都在背单词,那么就不可能背不会单词。2022/11/05将要实现的状态以“彩色”在头脑中呈现 这节所说就像是建筑师在设计图纸前先在脑海中描绘轮廓,也像是每次在敲代码时事先想好的最终效果只要思考达到每个细节,目标就一定能实现 这一节我是真的深有体会,想起前几天云顶的一道作业题:小学数学,这道题乍一看真的是思路又乱又麻烦,每次一想到它就想去逃避。然而在几次做核酸排队的过程中思考了几次这道题的技术难点和逻辑思路,发现其实并不难。之后就花了两个小时把它给敲出来了。成功需要缜密的计划和精心的准备 保持理智、保持理性、做有准备的人生病领悟真理 我看不懂,但我大为震撼心态决定命运 心态决定命运本身是正确的,但我认为所举的示例是不合适的。 既然公司都发不出工资了为什么还要卖命干?不愧是赤裸裸的资本家,分享你刚编的职场PUA故事~2022/11/12锲而不舍干到底,结果只能是成功 这一小节然我不禁想到了中学时期非常 喜爱的一档节目——《挑战不可能》,很多事就像书里说的那样:开始时看似不可能的,但建立了信心后又积极迎接挑战,所谓的“不可能”最后就会变成“可能”。 人这一生不就是在一点点突破自己、一点点进步中度过的吗?回首我不堪的初中时代,我也不曾相信我会读完初中、考上一中并最后来到这里,但我现在不也时做到了吗?持续努力,变平凡为非凡 努力在于持续而非瞬间的爆发,同上文“三分钟热度”的例子天天钻研创新,孕育巨大飞跃 前两段的举例实在是无法认同,凭什么把跳槽说的那么不堪? 不过后面几段说得还是很有道理的,无论是代码还是策划案,都是通过一个粗糙的框架往后逐渐细化分支、不断优化,最后才能得到一中“近乎完美”的状态。人亦如此,只有你每天都有一点点进步,最后才会又卓越的飞跃。2022/11/19倾听工作现场的“神灵之声” pass人要实时“有意注意”时刻保持敏锐的洞察力是成功的必要条件。这所说的不仅仅是只看整体结果,而是在于各个地方的细节。 “但我还是想再试一次,回归初衷,重新审视现场,对薄膜形成过程中发生的现象和变化,我要用自己的眼睛仔细观察,一一确认,我相信在这个过程中一定能看出些名堂,听到些信息。”看到这段话真有一种似曾相识的感觉。每次在写代码时,都未曾“奢望”过一次成功,几乎在每一次对变量拿不准的操作中都会将其输出出来或者打个断点观察描绘梦想使人生飞跃“我喜欢代码,我想转计科!”想必很多人都听过我说这句话,确实如此,这是上大学以来的首个目标。 虽然对土木院转计科的难度有所耳闻,感觉对于我来说有很大的难度。 但我时刻坚信,上学期就三个月,只要不摆烂,哪怕拿出高三一半的努力程度。就算转不到计科,转到相关专业也是很有希望的。从原理原则出发考虑问题人生和经营的原理原则以单纯为好这段就好似从“面向过程”到“面向对象”的转变了。每一个程序都是由许许多多个函数、方法封装成的。从整体来看这个程序完成的功能很复杂,但只要把他拆分成一个个函数去理解,就简单了许多未完待续。。。
2022年10月29日
412 阅读
0 评论
6 点赞
2022-10-29
关于杨辉三角的一些思考
杨辉三角算是编程里比较经典的一道题目了,最近看到群友在发这个,就想试着做一下。 但是想着还是挺简单,做起来还是有些吃力 大致由两种思路,其一就是高中学过的二项式公式;其二就是利用数组+循环嵌套做 首先是二项式公式法,需要定义A和C两个函数
2022年10月29日
252 阅读
0 评论
3 点赞
1
...
5
6
7
...
12