专栏首页python3巧用python“int”函数

巧用python“int”函数

在python中,可以利用关键词“int”实现其他数据类型强制转化为整形数据。不过需要注意,在python2中,有长整型,但是在python3中,无论数字多长,都是整形。

int函数原型为:int(x,[base])

其中x的数据类型可以是字符串或者数字,base代表进制,用中括号括起来,意思是可以省略,缺省值默认为10。

例如:

v1="123"
print(type(v1))
v2=int(v1)
print(v2)
print(type(v2))

输出:<class 'str'>      123    <class 'int'>

可见int将字符串型转为了整形。type()作用类似于C中的sizeof,sizeof可以返回变量所占字节数从而确定数据类型,type()直接给出数据类型。

int函数的常见用法大致可以分为如下几类:

1.当x为float型或为int型时,即为数字型时

v=int(3.3/1) #在python中的运算符“/”和在C中作用相似,在这里是除法的意思,即3.3/1=3.3
print(v)

输出显示为:3

v=int(2e3)  # 2e3是指2*10^3,此用法在C中没有
print(v)

输出为:2000

v=int(10,16) #这里的10是数字10,16是16进制的意思
print(v)

输出:报错。

提示:int() can't convert non-string with explicit base

翻译过来的意思就是当“base”存在时,int()不能转换非字符串类型。

2.当x为字符串时

v=int("123")
print(v)

输出:123

此时输出的123是一百二十三的意思,是整形的123。int()将字符串“123”强制转换成了整形123。需要注意的是,在base省略时,缺省值默认为10的。

在C语言有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、long、float类型的数字,需要包含头文件stdlib.h,使用方法不如python中简便。

v=int("123",16)
print(v)

输出:291。

字符串“123”,先转为数字123,再按照十进制输出,就是291。这里的123是16进制的123,输出时是10进制,所以实际上是0x123=291。

v=int("GG",16)
print(v)

输出:错误。

提示:invalid literal for int() with base 16: 'GG'

在十六进制中,最大的是“f”,而“G”超出了范围。如果把代码中的“16”改为“17”,程序正确,输出288,即十七进制的GG转为十进制是288。

注意:在这里base的范围是2~36!!!

3.x是字符串,且是0x、0b、0引导的十六进制、二进制、八进制等。

a="0x10"
v=int(a, 16)
print(v)

输出:16。

a="0x10"
v=int(a, 17)
print(v)

输出:错误。

提示:ValueError: invalid literal for int() with base 17: '0x10'。

0x并不是十七进制的前导符,并且在十七进制中并无符号“x”。

a="0x10"
v=int(a,35)
print(v)

输出:40460。

虽然0x并不是35进制的前导符,但是35进制中用“x”代表33。

 总结:1.当x为数字时,base必须省略。(或者说base赋值以后,x只能代表字符串)

 2.当x为字符串时,用print输出,需要将字符串按照base的值转为十进制,最终显示结果一定是十进制。

经典例题:阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64个格子都放满。需要多少粒米呢?

这个例题在初中或者高中并不算难题,列方程就可以求解。但是如果按照计算机的思路思考,变得十分简单。第一个格子放1粒,第二个放2粒,第三个放4粒,以此类推……这个问题实际上就是将一个二进制数转为十进制输。

如果只有两个格子,一共就需要1+2=3粒米。两个格子就是“11”,“11”转为十进制就是3。

如果只有三个格子,一共就需要1+2+4=7粒米。两个格子就是“111”,“111”转为十进制就是7。

如果只有两个格子,一共就需要1+2+4+8=15粒米。两个格子就是“1111”。“11”转为十进制就是15。

…………

所以,64个格子用二进制表示就是“11……11”,64个1,这个问题就变为了64个1转为10进制是多少了,很简单,2**64-1

用python写就是

v=int('1'*64,2)
print(v)

输出:18446744073709551615

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python基础-int和string互

    py3study
  • 存在重复元素

    如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

    py3study
  • C语言 基础题

    第1题 int sum_nth(unsigned int num, unsigned int n); 功  能:求出给定自然数的指定位置的数字(个位为0,十位为...

    py3study
  • 欧几里得算法(辗转相除法),扩展欧几里得算法,乘法逆元,最小正整数解

    欧几里得算法是用来求解两个不全为0的非负整数m和n的最大公约数的一个高效且简单的算法。该算法来自于欧几里得的《几何原本》。数学公式表达如下:

    zy010101
  • 数据结构和算法——动态规划

    一、动态规划的思想     动态规划(dynamic programming)是一种算法设计的思想,主要是将一个问题划分成几个更小的问题,并对这样更小的问题进行...

    zhaozhiyong
  • 卡牌分组

    每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X >= 2 时返回 true。

    OPice
  • 网易2013校园招聘笔试题详解

    http://blog.csdn.net/silangquan/article/details/18142651

    bear_fish
  • 最佳加法表达式 DP

    有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少。 输入: 5 3 1 2 3 4 5 ...

    ACM算法日常
  • cocos2dx-v3.5 2048 (二): GameTool的设计与实现

    前言 ---- 前一篇博文讲述了项目的架构,从中也可以看出GameTool 的主要功能是显示并随时更新分数和最高分数,其中主要用到的是Label ? ...

    一灰灰blog
  • 51nod 1649 齐头并进(Codeforces 601A The Two Routes) (最短路)

    题目链接(Codeforces):http://codeforces.com/problemset/problem/601/A

    Ch_Zaqdt

扫码关注云+社区

领取腾讯云代金券