【问题标题】:How to fix int is not iterable in python?如何修复 int 在 python 中不可迭代?
【发布时间】:2021-09-05 15:54:31
【问题描述】:

我以十六进制输入 pesan。例如 e = 5、n = 221 和 pesan = 1e。然后 pesan 将转换为十进制并解密。结果(十进制)将再次转换为十六进制。但我得到了错误

TypeError: 'int' object is not iterable.

如何解决?这是代码

def mod(x,y):
    if (x < y):
        return x
    else:
        c = x % y
        return c

def hex_to_decimal(hex_str):
    decimal_number = int(hex_str, 16)
    return decimal_number
                 
def decimal_to_hex(decimal_str):
    decimal_number = int(decimal_str, 10)
    hex_number = hex(decimal_number)[2:]
    return hex_number

def decrypt(m):
    plainDecimal=[]
    for i in m:
        cipherElement=mod(int(i)**e,n)
        plainDecimal.append(cipherElement)
    return plainDecimal

e = int(input('Input e: '))
n = int(input('Input n: '))
pesan = input('Input message: ' )
decimalp = hex_to_decimal(pesan) #Convert hex to decimal
plain = decrypt(decimalp)
ListToStr2 = ''.join([str(x) for x in plain])
decimal1 = decimal_to_hex(ListToStr2) #Convert decimal to hex
print("Dekripsi Tanda Tangan Digital (Heksadesimal): ", decimal1)

【问题讨论】:

  • 看起来您希望 m 是一个字符串,但它是一个整数。
  • 什么是hex_to_decimaldecimal-to_hex?我无法运行代码
  • 我已经更新了问题
  • 另外,mode 是什么。你能把它提供给吗?
  • 我已经更新了。

标签: python string integer


【解决方案1】:

我已经解决了这个问题。这是代码

def mod(x,y):
    if (x < y):
        return x
    else:
        c = x % y
        return c

def hex_to_decimal(hex_str):
    decimal_number = int(hex_str, 16)
    return decimal_number
                 
def decimal_to_hex(decimal_str):
    decimal_number = int(decimal_str, 10)
    hex_number = hex(decimal_number)[2:]
    return hex_number

def decrypt(m):
    m_str = str(m)
    decimalList =[int(m_str)]
    plainDecimal=[]
    for i in decimalList:
        cipherElement = mod(int(i)**e,n)
        plainDecimal.append(cipherElement)
    return plainDecimal

e = int(input('Input e: '))
n = int(input('Input n: '))
pesan = input('Input message: ' )
decimalp = str(hex_to_decimal(pesan)) #Convert hex to decimal
plain = decrypt(decimalp)
ListToStr2 = ''.join([str(x) for x in plain])
decimal1 = decimal_to_hex(ListToStr2) #Convert decimal to hex
print("Dekripsi Tanda Tangan Digital (Heksadesimal): ", decimal1)

【讨论】:

    【解决方案2】:

    在代码中,您给出的 decimalp 值是一个 int,我现在使用 str() 函数将 decimalp 值更改为字符串。代码现在应该可以完美运行了。修正后的代码如下;

    def mod(x,y):
        if (x < y):
            return x
        else:
            c = x % y
            return c
    
    def hex_to_decimal(hex_str):
        decimal_number = int(hex_str, 16)
        return decimal_number
                     
    def decimal_to_hex(decimal_str):
        decimal_number = int(decimal_str, 10)
        hex_number = hex(decimal_number)[2:]
        return hex_number
    
    def decrypt(m):
        plainDecimal=[]
        for i in m:
            cipherElement=mod(int(i)**e,n)
            plainDecimal.append(cipherElement)
        return plainDecimal
    
    e = int(input('Input e: '))
    n = int(input('Input n: '))
    pesan = input('Input message: ' )
    decimalp = str(hex_to_decimal(pesan)) #Convert hex to decimal
    plain = decrypt(decimalp)
    ListToStr2 = ''.join([str(x) for x in plain])
    decimal1 = decimal_to_hex(ListToStr2) #Convert decimal to hex
    print("Dekripsi Tanda Tangan Digital (Heksadesimal): ", decimal1)
    

    【讨论】:

    • 看起来它在decimalp中一个一个地解密,所以我得到了decimal1 = 1ea6fbaa612f328c9c711efe5692e6111d038279cb246c799165d20297b。对于 e = 5、n = 221 和 pesan = 1e,结果必须为 a6
    • 嘿,现在检查。我已经编辑了我的答案,代码现在可以正常工作了。
    • 我以前也试过这个。但我很困惑。为什么结果是 dc 而不是 a6?
    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多