Python 学习笔记 (0)数据类型

题主是大一学生,刚刚开始学习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语言的对比下也更容易发现这些设计的精妙。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值