我突然想到输出爱心是否可以用笛卡尔的心形函数
在IDLE里用Python输出下面这个图形
在小熊猫c++里用c++输出下面这个图形
如果当你要输出这些的时候会怎么办
低级:纯输出
python
print(''' ********* *********
***************** *****************
****************************************
*******************************************
*********************************************
*********************************************
*********************************************
*********************************************
*********************************************
*********************************************
*******************************************
*****************************************
****************************************
*************************************
***********************************
*********************************
*****************************
*************************
*********************
***************
*********
***''')
cpp
#include<cstdio>
using namespace std;
int main(){
printf(" ********* *********\n");
printf(" ***************** *****************\n");
printf(" ****************************************\n");
printf(" *******************************************\n");
printf(" *********************************************\n");
printf(" *********************************************\n");
printf(" *********************************************\n");
printf(" *********************************************\n");
printf(" *********************************************\n");
printf(" *******************************************\n");
printf(" *****************************************\n");
printf(" *****************************************\n");
printf(" ***************************************\n");
printf(" *************************************\n");
printf(" ***********************************\n");
printf(" *****************************\n");
printf(" ***************************\n");
printf(" *********************\n");
printf(" *******************\n");
printf(" ***************\n");
printf(" *********\n");
printf(" ***\n");
}
中级:列表/数组控制
Ps:我不会 你们自己来
高级:笛卡尔心形函数
先给大家看一下这个表达式
在c++里是(x*x+y*y-1)*(x*x+y*y-1)*(x*x+y*y-1)-x*x*y*y*y
在Python里是(x**2+y**2-1)**3-x**2*y**3
先放c++的:
第一步:框架
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
return 0;//这行可写可不写
}
第二步:定义心形函数函数
cpp
float xx(float x,float y){//定义一个返回浮点数的函数xx 需要两个浮点数x与y
return (x*x+y*y-1)*(x*x+y*y-1)*(x*x+y*y-1)-x*x*y*y*y;//返回得到的值
}
第三步:建立for循环嵌套
cpp
int main(){
for(float y=1.3;y>-1.0;y-=0.1){
//我试过了 比1.0大的会多这个数减1.0再除以0.1的行数
//并且比1.0小会直接从下往上削这个数减1.0再除以0.1的行数
for(float x=-1.3;x<1.3;x+=0.05){//减小x每次的增值 可以让这颗心更"胖"
}
}
return 0;
}
第四步:输出
cpp
int main(){
printf("\033[31m");
for(float y=1.3;y>-1.0;y-=0.1){
for(float x=-1.3;x<1.3;x+=0.05){
if(xx(x,y)<0){
printf("*");//符合函数就输出星号
}
else{
printf(" ");//不符合函数就输出空格占位
}
}
printf("\n");//每输出一行就换行
}
return 0;
}
总览
cpp
#include<bits/stdc++.h>
using namespace std;
float xx(float x,float y){
return (x*x+y*y-1)*(x*x+y*y-1)*(x*x+y*y-1)-x*x*y*y*y;
}
int main(){
float x,y;
printf("\033[31m");
for(y=1.3f;y>-1.1f;y-=0.1f){
for(x=-1.3f;x<1.3f;x+=0.05f){
if(xx(x,y)<0){
printf("*");
}
else{
printf(" ");
}
}
printf("\n");
}
return 0;
}
接下来是Python 这个会比较复杂
因为Python的for循环不像c++一样能操纵循环
只能用range函数勉强实现一点皮毛
但是range函数返回的值不能从大到小 不能是小数
这两个点成为了用Python实现心形函数输出爱心的难点
但是不用慌 我们能用列表手搓
而且Python的实在是太简单了 也不想讲了
python
for y in [i*0.1 for i in range(13,-11,-1)]:
a=""#建立变量a获得每一行的输出
for x in [j*0.05 for j in range(-26,27)]:
if (x*x+y*y-1)**3-x*x*y**3<0:a+="*"#判断是否符合函数
else:a+=" "
print(a.rstrip())#输出当前行并去除右侧空格
MVP结算:
本期字数:3222
本期质量分:52