杨东明 发表于 2021-5-26 08:16:49

请问这个代码为啥会报错。。还有就是第三个print,二进制那儿可以啥都不写吗?小于...

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

逃兵 发表于 2021-5-26 08:16:50

杨东明 发表于 2021-5-26 08:54
请问%s不是格式对象为一个字符串吗。。第二种改法请问这个bin(num)是怎么知道放>旁边的,若是最后一个%后 ...

%后面跟多个参数是依次放的

但是第二种改法实际上没有格式化两个参数,只格式化了num

bin(num)是作为print的第二参数存在的

打印'十进制 -> 二进制 : %d -> ' % (num),
打印 bin(num)

只有'十进制 -> 二进制 : %d -> ' % (num) 用到了格式化,并且参数只有一个

杨东明 发表于 2021-5-26 08:19:19

第八行代码那儿,format函数不是有位置参数关键字啥的确定后面的内容往哪儿放嘛,这个 %d -> ' %就直接依次放吗?后面这个bin(num)是怎么确定放>旁边的。。

杨东明 发表于 2021-5-26 08:22:06

Traceback (most recent call last):
File "D:/python project/第十六节课/示例进制转换.py", line 13, in <module>
    print('十进制 -> 二进制 : %d -> ' % (num, bin(num)))
TypeError: not all arguments converted during string formatting
报错的内容

kogawananari 发表于 2021-5-26 08:34:19

print('十进制 -> 二进制 : %d -> %s ' % (num, bin(num)))

逃兵 发表于 2021-5-26 08:45:45

本帖最后由 逃兵 于 2021-5-26 08:47 编辑

第八行少个括号)
思路一:
一个%d没法格式化两个字符串
字符串需要补充一个%s
print('十进制 -> 二进制 : %d -> %s ' % (num, bin(num)))

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


思路二:
在第一个num后面加个括号)
不需要%s格式化
print('十进制 -> 二进制 : %d ->' % (num), bin(num))
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




主要问题还是粗心,没有看清楚括号的位置

杨东明 发表于 2021-5-26 08:54:35

逃兵 发表于 2021-5-26 08:45
第八行少个括号)
思路一:
一个%d没法格式化两个字符串


请问%s不是格式对象为一个字符串吗。。第二种改法请问这个bin(num)是怎么知道放>旁边的,若是最后一个%后面跟多个参数,怎么确定他们怎么放置,还是都是依次放。。

杨东明 发表于 2021-5-26 08:55:40

逃兵 发表于 2021-5-26 08:45
第八行少个括号)
思路一:
一个%d没法格式化两个字符串


比如第二种改法那个bin(num)怎么不放>前面或者其他位置。。

逃兵 发表于 2021-5-26 08:57:53

杨东明 发表于 2021-5-26 08:55
比如第二种改法那个bin(num)怎么不放>前面或者其他位置。。

二进制数字实际上就是字符串

第二个实际上是print(a,b)打印a和b
其中a='十进制 -> 二进制 : %d -> ' % (num)
b= bin(num)

逃兵 发表于 2021-5-26 09:02:33

杨东明 发表于 2021-5-26 08:54
请问%s不是格式对象为一个字符串吗。。第二种改法请问这个bin(num)是怎么知道放>旁边的,若是最后一个%后 ...

>>> num = 10
>>> num2 = bin(num)
>>> print(num2)
0b1010
>>> type(num2)
<class 'str'>

数据num2的类型为str

杨东明 发表于 2021-5-26 09:10:44

逃兵 发表于 2021-5-26 09:04
%后面跟多个参数是依次放的

但是第二种改法实际上没有格式化两个参数,只格式化了num


懂了!谢谢谢谢大佬{:5_109:}

杨东明 发表于 2021-5-26 09:11:43

kogawananari 发表于 2021-5-26 08:34
print('十进制 -> 二进制 : %d -> %s ' % (num, bin(num)))

谢谢大佬{:9_226:}

Boibot 发表于 2021-8-9 21:09:54

第二种该法加了括号,实际上和最初的一样,仍然是格式化一个字符串,加上括号强调优先级
页: [1]
查看完整版本: 请问这个代码为啥会报错。。还有就是第三个print,二进制那儿可以啥都不写吗?小于...