为什么我在循环中运行一个简单的函数会出现类型错误?

阿迪亚·萨胡

我正在编写一个函数来获取一个 ip 地址,将它的每个部分(由 '.' 分隔)转换为 8 位二进制数字。然后我想组合所有的二进制数并得到一个大的 32 位数字,我想将它转换为十进制。我的 convert 函数在作为独立测试时可以正常工作,但是当它在循环中运行时,它给了我TypeError: 'str' object cannot be interpreted as an integer错误。

这是问题:(从代码战 - IPv4 到 int32)

取以下 IPv4 地址:128.32.10.1 该地址有 4 个八位字节,其中每个八位字节是一个字节(或 8 位)。

第一个八位字节 128 有二进制表示:10000000 第二个八位字节 32 有二进制表示:00100000 第三个八位字节 10 有二进制表示:00001010 第四个八位字节 1 有二进制表示:000000800100100.0100.010010010010010010010010010010010

因为上面的IP地址是32位的,我们可以用32位的数字来表示:2149583361。

编写一个函数 ip_to_int32(ip) ( JS: ipToInt32(ip) ),它接受一个 IPv4 地址并返回一个 32 位数字。

ip_to_int32("128.32.10.1") => 2149583361

def convert(x):
    return int(bin(x).replace("0b", ''))

def ip_to_int32(ip):
    data = ip.split('.')
    converted = []
    for i in range(len(data)):
        converted.append(convert(data[i]))
    str = ''
    for i in converted:
        str += i
    num = int(str)
    return dec(num).replace('0d', '')

这是我得到的错误:

Traceback (most recent call last):
  File "tests.py", line 4, in <module>
    test.expect(ip_to_int32("128.114.17.104") == 2154959208, "wrong integer for ip: 128.114.17.104")
  File "/workspace/default/solution.py", line 8, in ip_to_int32
    converted.append(convert(data[i]))
  File "/workspace/default/solution.py", line 2, in convert
    return int(bin(x).replace("0b", ''))
TypeError: 'str' object cannot be interpreted as an integer

这是测试文件:

test.describe("Basic Tests")
test.expect(ip_to_int32("128.114.17.104") == 2154959208, "wrong integer for ip: 128.114.17.104")
test.expect(ip_to_int32("0.0.0.0") == 0, "wrong integer for ip: 0.0.0.0")
test.expect(ip_to_int32("128.32.10.1") == 2149583361, "wrong integer for ip: 128.32.10.1")

谢谢您的帮助!

sj95126

问题在于xto参数convert()是一个字符串。您不能将其用作bin().

由于x已经是整数的字符串表示,因此无需将其转换为二进制然后再转换回十进制。你可以直接返回int(x)(它并不需要是一个单独的函数)。

有许多其他方法可以改进您的代码,但由于这是 Codewars 的挑战,我将把它留给您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么会出现错误:“。isValid()”不是一个函数?

在Linux上运行一个简单的puppeteer脚本时,为什么会出现此“浏览器未下载”错误?

VBA - 为什么在我的循环中添加一个集合会给我一个类型不匹配错误?

为什么会出现“类必须具有一个(只有一个)构造函数”错误?

当我在Rust函数中注释类型时,为什么会出现错误“预期类型参数”?

在Android Studio 3.6.1中运行项目时,为什么会出现“文件被另一个进程使用”错误?

为什么当我创建一个新的配置文件时 nginx 会出现错误 404 not found?

为什么我的函数会出现无限循环?

为什么我的代码会出现类型错误?

为什么我的“为什么”循环中的“如果”语句不能更改我的一个对象?

为什么在for循环中第二次运行函数会返回一个空字符串?

当我尝试使用 strncpy 将一个数组缓冲区复制到另一个数组缓冲区时,为什么会出现不兼容的指针类型错误?

一栏清空为什么会出现类型错误?

为什么我收到类型错误:“function_name”不是一个函数

为什么我的 jQuery show() 函数在 php foreach 循环中仅适用于第一个元素

为什么函数名称中会出现一个随机的多余字母?

swift) 在 for 循环中,即使迭代最后一个索引,引用 .index(after: index) 也不会出错?为什么?

为什么在“While True”循环中使用 continue 时会出现回溯错误

当我尝试将 2 个 map() RxJS 操作符链接到一个 pipe() 中时,为什么会出现此错误?

为什么会出现“不是函数”错误?

为什么在我的主函数中声明一个整数后,我的整数数组中出现错误?

为什么我的postgresql自定义类型构造函数会产生错误:类型只是一个shell?

为什么我在每个循环中只添加最后一个元素?

我们为什么要把glGetError放在一个循环中?

为什么我的正确答案在每个循环中都在同一个地方?

为什么在这个简单的python函数中IDE会出现未绑定变量错误警告

JQUERY:为什么我的任何一个条件满足时,我的任何警报都不会出现?

当我使用 svg 行时,为什么我的 div 附近会出现一个未识别的段?

为什么我的 2 函数没有在第一个和第二个循环中被调用?