2023年3月

1、read file

1 filename='D:\VS2019代码\pi_digits.txt'
2 with open(filename) as file_object:3     for line infile_object:4         print(line.rstrip())

filename is the address where the file stored

2、write to file

1 filename='programming.txt'
2 with open(filename,'w')as file_object:3     file_object.write("I love programming\n")4     file_object.write("I love C\n")5     file_object.write(str('125688'))#if we want to input number,we must use str() to convert it

through second line code ,we can find there are two parameter in brackets,second parameter is 'w' that means this file can be writed,if the parameter is 'r',that means the file could only be read. 'a' means you can write new value into file,the the new inputed value will behind the old one.if we use 'w',;the file will be create again! if  the filename has already been created,the new file will cover the old one.'r+' means write and read.

and when we want to write to file,someone maybe have one problem that they can't find the file which has been writed some information already.they even have already find the original file(the place programming file stored).if they created several item,they need set this item as startup item.like this.

1、这个python包首先和自己电脑里面是否之前安装过别的python包没关系,只要我们的vs2019中安装的时候安装了python。

首先这时我的一个小案例的页面,在页面内右边我们会发现一个python环境的点。

点开它,会显示这样子。

在python环境中右键,显示添加环境,然后显示中间的那个弹窗,弹窗的左边有一个Conda环境,点击它,下面我页面中点击按钮的那个地方,右边有一个小包裹样子的东西。这个时候,我们点击进去,然后就可以选择自己需要的包进行添加了。

注意,如果我们直接从之前下载好 的别的python库文件添加进这个项目,其实运行出来是会出问题的,虽然看起来你加了很多包,但是实际上没有什么用

1、感知机是什么?

感知机可以简单地认为是一个转换器,它可以接受多个信号,输出一个信号。就如同我们初中物理课程里面常常提到的与门,这就是一个很简单的感知机。

2、感知机的相关概念。

A、阈值:输入的值通过相关函数进行计算,然后将计算出来的值输入感知机,如果满足感知机的设置值,就会激活出相应的输出。我们把这个设置值称为“阈值”。

B、偏置和权重;我们用一个例子进行说明:

上图这个感知机中,w1,w2是权重,b是偏置。w1,w2反应的是输入信号的重要程度。偏置是调整神经院被激活的容易程度。

从上面看出来了,感知机也就是一个很简单的类似于我们不断输入信号,给予每个输入信号的权重不一样,得出输出信号的一个东西。

我们应该知道:感知机中的那些权重,实际上是我们人工设定的。我们目前的机器学习这些,实际上就是自己设定参数,把数据输入给计算机,让计算机进行计算,我们进行感知机模型修正的过程。

3、感知机的局限性:

感知机实际上只能表示一条直线分割的空间(线性空间),对于非线性空间(由曲线分割而成的空间)实际上它是无能为力的。

但是我们也不需要为此而悲观,因为感知机实际上是可以叠加的。这样通过叠加了多层的感知机也就是多层感知机。

一、引子

在进行我们这个话题之前,我们首先想一个问题,就是我们之前在scanf中用运算符&。这个运算符是用于获取变量的地址,他的操作数必须是变量,并且这个变量必须得有一个地址,我们才能进行取地址。

然后,我们这个时候自然而然地想到一个问题,既然我们能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量?

二、指针是什么?

指针就是一个保存地址的变量。这一点和普通变量区分开来,
普通变量的值就是实际的值,指针变量的值是具有实际值的变量的地址。

作为参数的指针。在被调用的时候得到了某个变量的地址,在函数里面可以通过指针访问外面的变量。如下:

void f(int* p);int i = 0;f(&i);

三、如何定义指针

首先我们得记得一个前提,指针就是一个变量,它是一个变量的话,那他就有一个变量类型。我们定义一个指针变量需要对他的类型进行说明:

int* ptr;
int nurse;
ptr = &nurse;

上面是定义了一个int类型的指针,让这个指针指向了nurse的地址。如果我们运行一下代码,会发现ptr和nurse的位置是相同的,它们的值也是相同的(注意这里我没有给nurse一个初始值,系统会自动分配发给他一个乱七八糟的值,这个是不推荐的。)

四、和指针相关的应用。

(一)空指针,也就是NULL

int* ptr = NULL;
printf("ptr的地址是%p\n", ptr);

(二)指针的算术运算(常用的就是++,--,-,+,还有大小)

    int i = 100;int* ptr = &i;
printf(
"ptr的地址是%p\n", ptr);int* ptradd,*ptrdec,*ptrdadd,*ptrddec;
ptradd
= ptr + 1;
printf(
"address of ptradd=%p\n", ptradd);
ptrdec
= ptr - 1;
printf(
"address of ptrdec=%p\n", ptrdec);
ptrdadd
= ptr++;
printf(
"address of ptrdadd=%p\n", ptrdadd);
ptrddec
= ptr--;
printf(
"address of ptrddec=%p\n", ptrddec
if (ptrdec > ptr)
    {
        printf("ptrdec is great than ptr,they differ %d\n", ptrdec - ptr);
    }
    else
    {
        printf("ptrdec is less than ptr,they differ %d\n", ptr - ptrdec);
    }

(三)指针数组

实际上指针数组没有什么,主要是记得数组名是该数组首元素的地址。然后将指针指向数组中的某一个元素,然后像操作数组一样操作就好了。下面这个例子:

    int* ptr;
    int arr[10] = { 12,15,16,8 };
    ptr = &arr[5];
    int s = *ptr + 2;
    printf("the address of arr array is:%p\n", &arr);//result is 001BFDBC
    printf("the address of arr[5] array is:%p\n", &arr[5]);//result is 001BFDD0
    printf("the address of point ptr is:%p\n", ptr);//result is 001BFDD0
    //the difference between *(ptr+2) and *ptr+2
    printf("the address of ptr+2 is:%p and the result is %d\n", ptr + 2, *(ptr + 2));//RESULT IS 001BFDD8 0
    printf("the address of s is:%p and the result is %d\n", &s, *ptr + 2);//result is 001BFDBO 2
    return 0;

上面这个例子中指出了一个很容易混淆的地方,就是*ptr+2和*(ptr+2)的区别。注意*(ptr+2)是将ptr往后面移动了2位后的位置上面值,但是*ptr+2是将原本的ptr的值加了2.但是我们操作的时候,需要注意一个问题,就是*(ptr+n),这个n,加上n之后,不能超过数组大小,不然的话,系统会给你安排一个地址(类推),但是值会是一个任意值。

指针与多维数组的操作:

int zippo[4][2] = { {2,4},{6,8},{1,3},{5,7} };
printf(
"zippo=%p\n", zippo);
printf(
"zippo+2=%p\n", (zippo + 2));
printf(
"*(zippo+2)=%p\n", *(zippo + 2));
printf(
"*(zippo+2)+1=%p\n", *(zippo + 2) + 1);
printf(
"*(*(zippo+2)+1)=%p\n",&( *((*zippo + 2) + 1)));
printf(
"*(*(zippo+2)+1)=%d\n", *(*(zippo + 2) + 1));
printf(
"*(*zippo+2)+1)=%d\n", *(*zippo + 2) + 1);

The result is:
zippo=010FFB94
zippo
+2=010FFBA4*(zippo+2)=010FFBA4*(zippo+2)+1=010FFBA8*(*(zippo+2)+1)=010FFBA0*(*(zippo+2)+1)=3 *(*zippo+2)+1)=7

(四)指针与函数的关系

如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址称为这个函数的指针。

#include <stdio.h>
void interchange(int* u, int*v);intmain()
{
int x = 5, y = 10;
printf(
"originally x=%d and y=%d\n", x, y);
interchange(
&x, &y);
printf(
"now x=%d and y=%d.\n", x, y);return 0;
}
void interchange(int* u, int*v)
{
inttemp;
temp
= *u;*u = *v;*v =temp;
}

C语言中使用了很多的语句,然后有一些语句我们首先得知道C语言有五种常用的语句,包括了:

(一)、表达式语句

就是很简单的12;,a=12;printf("oppose");这样子。

(二)、流程控制语句:包括结构化语句和非结构化语句

结构化语句包括条件语句和循环语句:

1、条件语句:

A——单个bool表达式

#include <stdio.h>
int main(void)
{
int i = 12;if (i > 11)//如果i>11,执行下面一条语句 {
printf(
"Yes");
}
return 0;
}

B——if-else结构

#include <stdio.h>
int main(void)
{
int i = 12;if (i > 11)//如果i>11,执行下面一条语句 {
printf(
"Yes");
}
else{
printf(
"No");//否则,执行这条语句 }return 0;
}

C——嵌套if语句

#include <stdio.h>
int main(void)
{
double i = 12.6;if (i > 13)//如果i>11,执行下面一条语句 {
printf(
"Yes");
}
else if (i < 12)
{
printf(
"middle");
}
else{
printf(
"No");
}
return 0;
}

D——switch语句

#include <stdio.h>
int main(void)
{
int i = 2;switch(i)
{
case 0:printf("0");break;case 1:printf("1");break;case 2:printf("2");break;default:printf("error");
}
return 0;
}

E——嵌套switch

#include<stdio.h>
int main(void)
{
charsex;intage;
printf(
"please enter your gender abbreviation\n");
scanf_s(
"%c", &sex);switch(sex)
{
case 'M':case 'm':
printf(
"you are man \n");
printf(
"please input your length of service!\n");
scanf_s(
"%2d", &age);switch(age)
{
case 4:
printf(
"reward you a iphone!!\n");break;case 6:
printf(
"reward you a car!\n");break;case 8:
printf(
"reward you a apartment!\n");break;default:
printf(
"sorry,you do not up theb length of service!\n");break;
}
break;case 'F':case 'f':
printf(
"you are woman!\n");
printf(
"please enter your length of service!\n");
scanf_s(
"%2d", &age);switch(age)
{
case 4:
printf(
"reward you a iphone!!\n");break;case 6:
printf(
"reward you a car!\n");break;case 8:
printf(
"reward you a apartment!\n");break;default:
printf(
"sorry,you do not up theb length of service!\n");break;
}
break;
}
return 0;
}

此案例参考:

https://www.runoob.com/cprogramming/c-nested-switch.html

F——
Exp1
?
Exp2
:
Exp3
;这个是把判断语句放在前面,如果这个语句为镇,执行第一条语句,否则执行第二条语句

#include<stdio.h>
int main(void)
{
int i = 3, j = 2;
i
> j ? printf("2<3") : printf("2>3");return 0;
}

2、循环语句

G——while循环(就是当需要判断的值满足判断条件时,执行语句)

#include<stdio.h>
int main(void)
{
int i = 1;while (i < 5)
{
printf(
"%d\n", i);
i
++;
}
return 0;
}

H——do---while语句(这个循环无论如何都会执行一次do中的语句)

#include<stdio.h>
int main(void)
{
int i = 1;do{
printf(
"Hello\n");
i
++;
}
while (i < 1);return 0;
}

I——for循环语句(满足约束条件下执行循环体内的操作)

#include<stdio.h>
int main(void)
{
inti;for (i = 1; i < 3; i++)
{
printf(
"hello\n");
}
return 0;
}

非结构化语句包括限定向语句和非限定转向语句

A——限制定向语句包括break语句、continue语句和return语句

B——非限定向语句包括goto语句

(三)、函数调用语句

这一点,可以放到函数中具体进行讲解。

(四)、空语句

也就是简单的;。这个语句是说它并不执行任何东西。

(五)、复合语句

就是用花括号括起来的一条或多条语句,复合语句也称为块。像我们上面的for循环的例子就是一个复合语句。我们现在可以总结一下,C语言的语句就是分为简单语句和复合语句,简单语句如赋值表达式语句、函数表达式语句、空语句这样。