Anders Hamfeldt
Anders Hamfeldt

Reputation: 15

My function isn't printing anything other than "None"

I'm doing an assignment for school that's due tonight and I can't figure out why it isn't working. I'm really new to programming in general but I just don't understand why it doesn't work. The program is supposed to convert from decimal to binary and, depending on how big the number is, print it in either 8 bits or 16 bits.

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))

Sorry for the Swedish parts.

Upvotes: 0

Views: 116

Answers (1)

Green05
Green05

Reputation: 341

The problem is, instead of giving bitvarde a new value in each iteration in your dec2bin function, you're checking if it equals a certain value - which it does not. Instead, you should use a For loop,

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

which will give i a different value each iteration. range(y-1,-1,-1) simply means that i will get values starting from y-1, changing by -1 every turn, and ending before -1, ie at 0.

In the loop, just add the following:

bitvarde = 2**i

Remove the y=y-1 from the end. Also, when you use return in the function, that ends the function's execution. You want it to add a 1 or a 0 to the end of the final string.

For that, define an empty string, result = "", in the beginning (before the for loop). instead of return str("1"), use result += "1", which simply means result = result + "1". at the end of the function, after the loop, put:

return result

That should do it! Of course, you can rename result as something else in Swedish. Here's what the final code should look like:

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

Hopefully this matches the pseudocode you were given.

Upvotes: 1

Related Questions