最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【提醒】Python新手开发人员注意事项:不要故意用错误的写法而应该用正确标准的写法

Python crifan 4276浏览 0评论

对于:

Qpython3-CSDN论坛

先说错误:

不过在具体解释之前,先针对其错误,给出自己的判断:

估计其输入代码时,最后一个括号是中文的括号,所以报错:

而之所以没说是%b引起的问题,是因为我自己调试了同样的代码后,知道如果是%b的话,会是另外不同错误提示:

ValueError: unsupported format character 'b' (0x62) at index 9

而不会是这里的:

SyntaxError: invalid character in identifier

解决办法:

把最后一个中文括号,改为正常的英文括号即可。

即:

weight))

而不是:

weight))

后记:

后来也故意去把正确的代码,改为错误的,最后用了个中文的括号,所以也会报错的:

且没有运行之前,pylint就可以识别和检测出来,并提醒错误:unexpected token ‘)’Python(parser-16)

以及:运行后也会报错:

<p>  File "/Users/limao/dev/crifan/python/wrongExample/wrongExample.py", line 26</p><p>    print("我叫%s,我今年%d岁,我的体重是%.2f公斤"%(name,age,weight))</p><p>                                                     ^</p>
SyntaxError: invalid character in identifier

-》完美的验证了我第一次的推断,就是中文括号的问题。

这方面的问题的详细解释,参见:

【提醒】Python新手开发人员注意事项:不要误输入中文标点符号

接着再去说:

看到代码中,很多错误的写法。

且感觉是,被别人故意设计成这样的

对于代码本身,去整理和解释如下:

然后去调试了代码:

# Function:
#   演示错误的代码,应该如何改为正确的代码
#   Qpython3-CSDN论坛
#   https://bbs.csdn.net/topics/395926666
# Author: Crifan Li
# Update: 20200225


age=3
name=("tom")
weight=55
print("我叫%s,我今年%b岁,我的体重是%.2f公斤"%(name,age,weight))

运行(肯定)会报错:

所以,应该改为:

# Function:
#   演示错误的代码,应该如何改为正确的代码
#   Qpython3-CSDN论坛
#   https://bbs.csdn.net/topics/395926666
# Author: Crifan Li
# Update: 20200225


age=3
# name=("tom")
# weight=55
# print("我叫%s,我今年%b岁,我的体重是%.2f公斤"%(name,age,weight))
# ValueError: unsupported format character 'b' (0x62) at index 9


name="tom" # 显示指明是str字符串,而不是 看起来像是tuple元祖,实际上不是
weight=55.0 # 显示指明是float浮点数
# %d 用于格式化 integer整数
print("我叫%s,我今年%d岁,我的体重是%.2f公斤"%(name,age,weight))
# 我叫tom,我今年3岁,我的体重是55.00公斤

其中:

1.不要假装是tuple,但实际却是str

name=("tom")

是错误的示范和写法

因为(xxx, yyy)是标准的tuple元祖的写法

上述写法,容易让人误导,以为name是个tuple元祖变量

但是实际上,却等价于

name="tom"

name实际上是个str字符串变量

所以,本身,就应该改为,正常的,标准的写法:

name="tom"

才对。

加上type变量类型的打印,就容易对比看出区别了:

name=("tom")
<p>print("type(name)=%s" % type(name)) # type(name)=&lt;class 'str’&gt;</p><p>normlTupleValue = ("tom", "tony")</p><p>print("type(normlTupleValue)=%s" % type(normlTupleValue)) # type(normlTupleValue)=&lt;class 'tuple'&gt;</p>

2.不要故意用错误的格式化写法

%d是用来格式化显示数字的

%b,是没见过的写法

即,此处的age是3岁,3个是integer整型数字,应该用%d去格式化输出,而不应该是%b

以及:weight=55

本意是:身体体重是55公斤

然后往往是个float浮点数,即有小数的部分的

所以后续是去用浮点数的%.2f去格式化显示的

但是此处初始化时的写法却是

weight=55

此时,weight是int= integer=整型

而不是我们希望的:

float=浮点数

应该改为:

weight=55.0

才对。

加上type变量类型的打印,就容易看出区别来了:

weight=55
<p>print("type(weight)=%s" % type(weight)) # type(weight)=&lt;class 'int’&gt;</p><p>weight=55.0 # 显示指明是float浮点数</p><p>print("type(weight)=%s" % type(weight)) # type(weight)=&lt;class 'float'&gt;</p>

最终完整代码是:

# Function:
#   演示错误的代码,应该如何改为正确的代码
#   Qpython3-CSDN论坛
#   https://bbs.csdn.net/topics/395926666
# Author: Crifan Li
# Update: 20200225

age=3

# name=(“tom”) # 看起来像是tuple元祖,实际上不是

# print(“type(name)=%s” % type(name)) # type(name)=<class ‘str’>

# normlTupleValue = (“tom”, “tony”)

# print(“type(normlTupleValue)=%s” % type(normlTupleValue)) # type(normlTupleValue)=<class ‘tuple’>

name=”tom” # 显示指明是str字符串

# weight=55

# print(“type(weight)=%s” % type(weight)) # type(weight)=<class ‘int’>

weight=55.0 # 显示指明是float浮点数

# print(“type(weight)=%s” % type(weight)) # type(weight)=<class ‘float’>

# print(“我叫%s,我今年%b岁,我的体重是%.2f公斤”%(name,age,weight))

# ValueError: unsupported format character ‘b’ (0x62) at index 9

# %d 用于格式化 integer整数

print(“我叫%s,我今年%d岁,我的体重是%.2f公斤”%(name,age,weight))

# 我叫tom,我今年3岁,我的体重是55.00公斤

调试输出效果:

附录:

1.关于print中变量的格式化的语法

内置类型 — Python 3.8.2rc2 文档

转换符
含义
注释
‘d’
有符号十进制整数。
‘i’
有符号十进制整数。
‘o’
有符号八进制数。
(1)
‘u’
过时类型 — 等价于 ‘d’
(6)
‘x’
有符号十六进制数(小写)。
(2)
‘X’
有符号十六进制数(大写)。
(2)
‘e’
浮点指数格式(小写)。
(3)
‘E’
浮点指数格式(大写)。
(3)
‘f’
浮点十进制格式。
(3)
‘F’
浮点十进制格式。
(3)
‘g’
浮点格式。 如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式。
(4)
‘G’
浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。
(4)
‘c’
单个字符(接受整数或单个字符的字符串)。
‘r’
字符串(使用 repr() 转换任何 Python 对象)。
(5)
‘s’
字符串(使用 str() 转换任何 Python 对象)。
(5)
‘a’
字符串(使用 ascii() 转换任何 Python 对象)。
(5)
‘%’
不转换参数,在结果中输出一个 ‘%’ 字符。

Python3 print 函数用法总结 | 菜鸟教程

python字符串格式化符号:

    符   号
描述
      %c
 格式化字符及其ASCII码
      %s
 格式化字符串
      %d
 格式化整数
      %u
 格式化无符号整型
      %o
 格式化无符号八进制数
      %x
 格式化无符号十六进制数
      %X
 格式化无符号十六进制数(大写)
      %f
 格式化浮点数字,可指定小数点后的精度
      %e
 用科学计数法格式化浮点数
      %E
 作用同%e,用科学计数法格式化浮点数
      %g
 %f和%e的简写
      %G
 %f 和 %E 的简写
      %p
 用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号
功能
*
定义宽度或者小数点精度 
用做左对齐 
+
在正数前面显示加号( + ) 
<sp>
在正数前面显示空格 
#
在八进制数前面显示零(‘0′),在十六进制前面显示’0x’或者’0X'(取决于用的是’x’还是’X’)
0
显示的数字前面填充’0’而不是默认的空格 
%
‘%%’输出一个单一的’%’ 
(var)
映射变量(字典参数) 
m.n.
m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

转载请注明:在路上 » 【提醒】Python新手开发人员注意事项:不要故意用错误的写法而应该用正确标准的写法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.177 seconds, using 22.19MB memory