题主是大一学生,刚刚开始学习python,但是题主有一定的c语言基础,在这里以两者对比的形式做一些学习笔记。
第一次学习的内容是数据类型。
零、基础数据类型
python 有四种基础的数据类型,整型变量int,浮点型变量float, 字符串型变量str,布尔型变量bool。c语言中则没有bool型。整型和浮点型python与c语言是基本一样的。另外两个类型在两种语言中的区别在于
1.c语言的字符型变量叫做char,而且只能存放一个字符,如果需要存放字符串需要用到字符数组,而python的str型可以直接存放字符串
2.c语言是没有bool型变量的,只有在c++和较新的c99环境中才引入了bool型变量。而且需要引入stdbool.h的头文件。但是c语言是可以不使用bool变量直接作出判断的,返回值是整形的1(true)/0(false),例如:
#include<stdio.h>
int main()
{
int a;
a = (3>5);
printf("%d",a);
//输出0
}
#include<stdio.h>
int main()
{
int a;
a = (3<5);
printf("%d",a);
//输出1
}
一、数据类型转化
c语言中严格遵从数据类型的转化,需要转化数据类型有两种基本形式:
1.使用char()、int()、float/double()来进行转化
这里的字符串转化严格遵从ASCII表格的逻辑,例如
#include<stdio.h>
int main()
{
int a = 3;
char b = char(a);
printf("%c",b);
//输出矩形
}
#include<stdio.h>
int main()
{
char a = '3';
int b;
b = int(a);
printf("%d",b);
//输出51
}
如果使用float强制转化int类型,补充.0小数位
如果使用int强制转化float类型,保留整数位
#include<stdio.h>
int main()
{
float a = 3.1;
int b ;
b = int(a);
printf("%d",b);
//输出3
}
2.在数据运算中,进行强制转化
例如想要计算3/2 得到1.5
#include<stdio.h>
int main()
{
int a = 3;
float b;
b = a/2;
printf("%f\n",b);//输出1.000000
b = a/(2.0);
printf("%f\n",b);//输出1.500000
}
在表达式中,系统会自动把变量类型转化为最高级的类型(变量类型优先级不在此处赘述)
因此在第一个计算中,a/2得到1,再转化为浮点型1.00000
在第二个计算中,a/2.0 相当于把a转化为浮点型后除以2.0 即:3.0/2.0 = 1.5,可以得到1.50000
python语言中的类型转化
python语言数据类型的转化则更加自然,尤其是整型和浮点型的转化往往不需要进行刻意的操作。
a = 1
b = 2
c = a/b
print(c)
#得到0.5
即使a和b都是整型变量,进行除法运算可以直接得到浮点型变量c,几乎可以忽视数据类型的存在
在字符型数据和整形数据的变化中,遵循直接变化的原则
a = '3'
int(a)
print(a)
#得到3
这里会直接把字符3转为数字3,而不是输出3对应的ASCII值51。
如果想要使用c语言得到python语言的效果或者使用python 语言得到c语言的效果应该怎么做呢?
1.c语言中,字符型数据是以ASCII码的形式存储,如’3‘实际上是存储为51,而ASCII码表中数字是连续存放的,’0’对应48,‘1’对应49,‘2’对应50,因此只需要减去’0‘就(或者48)可以得到对应的数据,但是仅限于单个字符,例如:
#include<stdio.h>
int main()
{
char a = '3';
int b;
b = int(a)-'0';
printf("%d",b);
//输出3
}
#include<stdio.h>
int main()
{
char a = '3';
int b;
b = int(a)-48;
printf("%d",b);
//输出3
}
#include<stdio.h>
int main()
{
char a = '11';
int b;
b = int(a)-48;
printf("%d",b);
//输出1
}
//[Warning] overflow in conversion from 'int' to 'char' changes value from '12593' to ''1'' [-Woverflow]
这里实际上a是一个字符数组,对后面的运算是对a的第一个元素1进行计算,如果要实现像python一样的效果要遍历字符数组乘以10的n次幂求和,不做拓展。
2.在python中的实现比较简单,使用ord()函数就可以了。
a = '3'
a = ord(a)
print(a)
#得到51
python语言还有特别的eval()函数,可以把字符型变量转化为可运算的变量
python的输入函数input()默认输入的都是字符串,如果要对输入量进行运算,需要进行数据转化,这里可以进行两种转化
#1
a = input()
a = int(a)
#2
b = input()
b = float(b)
如果使用第一种转化,在输入小数时会出现异常,如果使用第二种转化,如果输入整数将会转化为带有小数的形式,不便于进行整除或者取整运算,还会浪费内存空间。
因此python中使用eval()可以转化成合适的变量类型
a = input()
a = eval(a)
输入整数时,a是字符型,输入小数时,a是浮点型。
二、小结
从数据类型和转化上可以看出,python是更加符合人的直觉的语言,输入的是几就是几,避免了经由ASCII码的繁琐计算,除法运算得到小数也更加合理。
c语言是更加符合计算机逻辑的语言,输入’3‘得到51是因为计算机中字符3就是以51的二进制形式存储,而整数与整数运算得到整数也更符合二进制计算的规律(因为整数和浮点数是以不同的形式存放的)。
在后续的学习中,可以发现python语言更多的便利之处,在和c语言的对比下也更容易发现这些设计的精妙。