我的功能只是打印“无”

2024-10-04 09:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为学校做一个作业,今晚就要交了,我不知道为什么它不起作用。一般来说,我对编程很陌生,但我不明白为什么它不起作用。 程序应该从十进制转换为二进制,并根据数字的大小,以8位或16位打印

def dec2bin(värde, antal_bitar):

    while bitvärde == (2 ** (antal_bitar - 1)):
        
        if värde >= bitvärde:
            return str("1")
            värde= värde - bitvärde
        else:
            return str("0")

        antal_bitar = antal_bitar - 1


invärde_ok = False
invärde = 0

while invärde_ok == False:
    invärde=(int(input("Ange ett decimalt värde: ")))

    if (invärde > 65536):
        print("Fel. Kan inte hantera stora tal. Försök igen.")
              
    else:
        if invärde < 0:
            print("Fel. Kan bara hantera positiva tal. Försök igen.")

        else:
          invärde_ok = True

          if invärde < 256:
            bitvärde=8
            print("Talet", invärde , "ryms i en byte och blir binärt:")
            print(dec2bin(invärde,bitvärde))

          else:

            bitvärde=16
            print("Talet", invärde , "ryms i 16 bitar och blir binärt:")
            print(dec2bin(invärde,bitvärde))

对不起,瑞典部分


Tags: falsereturnifokelseprintwhilestr
1条回答
网友
1楼 · 发布于 2024-10-04 09:27:03

问题是,不是在dec2bin函数的每次迭代中都给bitvarde一个新值,而是检查它是否等于某个值,而实际上它不是。相反,您应该使用For循环

for i in range(y-1,-1,-1):

这将在每次迭代中给我一个不同的值。 范围(y-1,-1,-1)仅仅意味着我将得到从y-1开始的值,每一圈改变-1,在-1之前结束,即0

在循环中,只需添加以下内容:

bitvarde = 2**i

从端部拆下y=y-1。 另外,当您在函数中使用return时,函数的执行也将结束。您希望它在最后一个字符串的末尾添加1或0

为此,请在开头(For循环之前)定义一个空字符串result=“”。 而不是 return str("1"),使用result += "1",它的简单意思是result = result + "1"。 在函数末尾,在循环之后,输入:

return result

那就够了!当然,您可以用瑞典语将结果重命名为其他名称。 以下是最终代码的外观:

def dec2bin(värde, antal_bitar):
    result = ""
    for i in range(antal_bitar-1,-1,-1):
        bitvärde = 2**(i)
        if värde>=bitvärde:
            result += "1"
            värde=värde-bitvärde
        else:
            result += "0"
    return result

希望这与您得到的伪代码匹配

相关问题 更多 >