小白学python的问题 关于%d和%s的区别

第一段代码:

# -*- coding:gb2312 -*-
age=18
print("====================")
print("你的年龄是:%d"%age)

第一段代码的执行结果:
图片描述

===========分隔符===========================

第二段代码:

# -*- coding:gb2312 -*-
age=18
print("====================")
print("你的年龄是:%s"%age)

第二段代码的执行结果:
图片描述

===========分隔符===========================

第三段代码:

# -*- coding:gb2312 -*-
age=input("请输入您的年龄:")
print("您的年龄是:%d"%age)

第三段代码的执行结果:
clipboard.png

===========分隔符===========================

第四段代码:

# -*- coding:gb2312 -*-
age=input("请输入您的年龄:")
print("您的年龄是:%s"%age)

第四段代码的执行结果:

clipboard.png

我的问题:

为什么第一段代码和第二段代码当中,不管是写%d还是写%s执行结果都是一样的,而在第三段代码和第四段代码中,写%d还是写%s执行结果不一样? 问题出在哪里,为什么第三段代码是错误的?(PS:我的python版本是3.5.1。 用的编辑器是Geany)

阅读 10.1k
3 个回答

python不像C语言,声明变量是不需要指定类型的,它会自动判定变量的类型,从键盘输入的都是字符串类型,要用int转换。去查一下变量赋值,输入输出你就明白了。

input 输入进去默认都是字符串,需要使用%s
可以用int() 转换为数字,用%d

首先说明我的环境是py2,上面的测试都能通过,需要好好理解字符串变量和整形变量,18和'18'的不同
格式化占位符%d,%s,(还有%f,%x等) 这个语法和c/c++一样的
%s占位符后面是十进制整数
%s占位符后面是字符(串)变量
%x占位符后面是十六进制变量
%f占位符后面是浮点型
age=18 #这个age变量是整数型,age=18 age是整型变量,age='18' age是字符(串)变量
print("你的年龄是:%d"%age) #这个是正确的,因为age是整型
print("你的年龄是:%s"%age) #这个在c/c++里面肯定是不对的,因为的占位符和后面的变量类型不一致,而在python当中应该是多态(猜的)意思就是在py3(py2是2种写法都没有问题),%s后面的变量类型可以是整型和字符串型(自动将整形转成了字符(串)型
但是最好不要这么用,这种思想用到其他语言可能出现错误
age=input("请输入您的年龄:") #获得用户的输入是字符(串)型
print("您的年龄是:%d"%age) #前面占位符变量的类型和后面的变量类型不一致,要一致可以用int(age)
print("您的年龄是:%s"%age) #所以前面占位符变量的类型和后面的变量类型一致没问题

所以在py3中,占位符%s后面跟的变量 如果是整型(浮点型)会自动转换成字符串型,而如果占位符是%d后面如果跟字符串不会自动转化成整数型需要自己转(int()),是单方面的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题