【问题标题】:Why do I get 'int is not subscriptable' error message?为什么我会收到“int is not subscriptable”错误消息?
【发布时间】:2019-09-17 23:35:23
【问题描述】:

我正在做一个二进制到十进制的转换器,我们不能使用 int() 或 bin()。我认为我的代码是正确的,只是它一直告诉我“int 不可下标”!帮助!

binaryNum = input("Enter a binary number: ") decimalNum = 0 count=0

while(int(binaryNum))>0:
    count=count+1
    binaryNum=int(binaryNum)//10
    power = count

while power >= 0:
    if int(binaryNum[power]) == '1': #here is the problem
        decimalNum += 2**power
        power -= 1


print(decimalNum)

【问题讨论】:

  • 那行有几个问题。首先,binaryNum 是一个整数,这是错误告诉你的——[power] 更像是索引列表或通过键在字典中查找值的语法;你不能索引一个整数。目前尚不清楚您希望该语法是什么。如果该语法有效,您可以将结果显式转换为整数,然后尝试将其与不能为 True 的字符串 ('1') 进行比较。
  • 好吧 - 从逻辑上考虑。要么你知道所有的答案,并且可以自己弄清楚;否则你需要问一个更精确的问题。你知道int 是什么吗?你知道什么是下标吗?您了解错误抱怨的代码行吗?你明白为什么下标int 没有意义吗?您看到该行上发生下标操作的位置了吗?你知道哪个值被下标吗?你明白为什么那个值在代码中的那个点是int吗?
  • 如果你不允许使用int()bin(),那你为什么有int(binaryNum)
  • 询问错误时,请确定问题行(回溯)。在该行中查找下标。变量是什么?

标签: python binary int


【解决方案1】:

您可以这样做,(ord 函数将返回给定数字的 ASCII 值,因此如果您从 48 中减去数字,即 ASCII 值“0”,您将轻松转换数字)

binary = input('enter a number: ')
decimal = 0
for digit in binary:
    digit = ord(digit) - 48 
    decimal = decimal*2 + digit
print(decimal)

如果你不想使用额外的功能,你可以这样做

binary = input('enter a number: ')
decimal = 0
for digit in binary:
    digit = 1 if digit == '1' else 0
    decimal = decimal*2 + digit
print(decimal)

而你的问题原因是你不能迭代一个整数

while(int(binaryNum))>0:
    count=count+1
    binaryNum=int(binaryNum)//10 ### here you assign binaryNum as integer
    power = count

while power >= 0:
    if int(binaryNum[power]) == '1': ### and you cant iterate binaryNum because it is an integer
        decimalNum += 2**power
        power -= 1

【讨论】:

  • 对不起,你能解释一下“数字”吗?它在这段代码中做了什么?
  • @batteredandspicy,我们将binaryNum 作为字符串,因此字符串是可迭代的对象。数字表示binNum字符串中的一位数字(可以考虑像数组这样的可迭代对象)
【解决方案2】:

在第一个循环之后,binaryNum 是一个数字,而不是一个字符串。

限制的要点是您根本不应该将输入转换为数字,并且您正在使用int 三次次,这是您被允许的三倍.

而是循环输入字符串中的数字。
在每次迭代中,乘以 2。
如果数字是'1',则结果加一。

binaryNum = input("Enter a binary number: ")
number = 0
for digit in binaryNum:
    number *= 2
    if digit == '1':
        number += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多