第15课:格式化%符号,FishC 的答案看不懂
本帖最后由 Peteryo01223 于 2021-1-6 16:15 编辑小甲鱼给出的题目的答案:
q = True
while q:
num = input('请输入一个整数(输入Q结束程序):')
if num != 'Q':
num = int(num)
print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))
print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))
print('十进制 -> 二进制 : %d -> ' % num, bin(num))
else:
q = False
我的问题:
1. print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num)) 这里面,%d -> 0x%x' %,为什么在第二个%前面出现了 0x? 视频中格式化都是 %后面才能加英文字母。
2. print('十进制 -> 二进制 : %d -> ' % num, bin(num)) 这里面,单引号,为什么结束在第二个%前面?比较上面的两行code,两个单引号都是结束在第三个%前面的。
请高手,尽量直白地解释一下。感觉小甲鱼,视频中,有不少知识点没有提到。
谢谢
1,0x就是单纯的字符呀,没有什么特殊的
2,这说明了后面那个bin(num)并不会被填入字符串中,你看那个字符串,
是不是只有一个格式化操作符? 本帖最后由 Peteryo01223 于 2021-1-6 16:42 编辑
qiuyouzhi 发表于 2021-1-6 16:29
1,0x就是单纯的字符呀,没有什么特殊的
2,这说明了后面那个bin(num)并不会被填入字符串中,你看那个字符 ...
0x 是普单纯的什么字符啊?0x写在什么逻辑呢?貌似跟%+英文字母的格式化列表,一点儿关系也没有。 1、0x 其实就是表示是十六进制数,否则,十六进制的 1234 如果没有这个前导 0x 还不被你认为是十进制数?
2、print('十进制 -> 二进制 : %d -> ' % num, bin(num))括号中被逗号分开的其实是两个参数,第一个参数是字符串 '十进制 -> 二进制 : %d -> ' % num,第二个参数是 bin(num),也就是一 num 为参数,对内置函数 bin() 的调用结果。 Peteryo01223 发表于 2021-1-6 16:40
0x 是普单纯的什么字符啊?0x写在什么逻辑呢?貌似跟%+英文字母的格式化列表,一点儿关系也没有。
0o 开头就表明这一串字符是一个八进制数
0x 开头就表明这一串字符是一个小写的十六进制数
0X 开头就表明这一串字符是一个大写的十六进制数
仅仅是一个标识符而已,没有别的意思 jackz007 发表于 2021-1-6 16:48
1、0x 其实就是表示是十六进制数,否则,十六进制的 1234 如果没有这个前导 0x 还不被你认为是十进制数 ...
1. 哦,我明白了,原来是小甲鱼自己加上的0x。如果用#,让python自己显示出0x,我就懂了。现在了解了,谢谢。 Daniel_Zhang 发表于 2021-1-6 16:48
0o 开头就表明这一串字符是一个八进制数
0x 开头就表明这一串字符是一个小写的十六进制数
0X 开头就表 ...
谢谢。0x代表十六进制,我本来理解,但是我一直以为0x仅仅会出现在run后的结果里面,是一个python打印得结果。没想到这次是小甲鱼,自己为了便于表达,直接帮助我们大家写进去了。理解了,谢谢。 Peteryo01223 发表于 2021-1-6 16:56
谢谢。0x代表十六进制,我本来理解,但是我一直以为0x仅仅会出现在run后的结果里面,是一个python打印得 ...
嗯嗯 qiuyouzhi 发表于 2021-1-6 16:29
1,0x就是单纯的字符呀,没有什么特殊的
2,这说明了后面那个bin(num)并不会被填入字符串中,你看那个字符 ...
好的。0x 是小甲鱼主动写在code里,代表十六进制的意思,省得打印出来混淆。我觉得,如果他直接用 # 就好了,让Python自动在数字前面打印出十六进制的标志0x。看来,在格式化中,%后面的英文字母才有意义,前面的就是个符号,不参与格式化预算。多谢。 本帖最后由 Peteryo01223 于 2021-1-6 18:07 编辑
说句题外话:
小甲鱼的答案中,核心3个语句,如下,
print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))
print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))
print('十进制 -> 二进制 : %d -> ' % num, bin(num))
前两个语句,在 ‘’当中,做了两次格式化运算。
而第三个语句,由于没有现成的二进制格式化符号,在 ‘’ 中仅做了一次格式化运算,加上后面bin(),得出结果。
如果我小小修改一下:
1. 三个语句统一结构,都是用 ‘’当中仅仅做一次格式化,后面单独做一次格式化,然后加在一起,这样的结构来编写程序。那么,就使得,三句的结构完全相同,上下便于初学者比对,并理解。
2. 用#,自动显示八进制(%#o)和十六进制(%#x)的符号,而不使用小甲鱼的方式(直接在%前面写0x和0o,因为没有基础的我,当时误以为0x和0o是格式化计算的一个部分,要和%产生什么关系呢)
那么我觉得,出于方便初学者阅读的考虑,或许我可以如下改写一下:
q = True
while q:
num = input('请输入一个整数(输入Q结束程序):')
if num != 'Q':
num = int(num)
print('十进制 -> 十六进制 : %d -> ' % num, ' %#x' % num)
print('十进制 -> 八进制 : %d -> ' % num, ' %#o' % num)
print('十进制 -> 二进制 : %d -> ' % num, bin(num))
else:
q = False
请教大家,不知我说的对不?
毕竟我是初学,贸然修改老师的答案,我可能会错的更厉害吧。
页:
[1]