75205


python初学者で、小数を含む10進数を2~10進数(2,8進数)に変換するプログラムを書いています。  
if文だけだと思うように動くのですが、else文を入れるとinvalid syntaxとエラーが返ってきてしまいます。  
ちなみにif文ではaの値(入力される10進数の数)が整数であるか。elseでは小数の場合と判別しています。  
Python 3.8.2 の IDLE を使っています。  
どなたかご教授お願いします。

[code]

    import math
    a=float(input('10進数の数字'))
    b=int(input('変換したい進数'))
    result=''
    first_digit=''
    #tは小数部 fは整数部
    (t,f)=math.modf(a)
    i=int(f)
    if t==0.0:
        while i>0:
            result+=str(i%b)
            i=i//b
        print(result[::-1])
    
    else:
        while i>0:
            result+=str(i%b)
            i=i//b
        (z,t)=math.modf(float(t))
        while z!=0.0:
            t=str(t*b)
            first_digit+=t[0]
            (z,t)=math.modf(float(t))
        total=float(result[::-1])+float(first_digit)
        print(total)
    
[/code]


CC BY-SA 4.0
2021-04-10T15:48:25.000
75202
2021-04-11T02:31:16.693
2021-04-11T02:31:16.693
44731
question
python python3 python-idle
Python 3.8.2 の IDLE で10進数を2~10進数に変換するプログラムを作りたい


3.25(10) -> 110.01(2) こんな感じにしたいのなら

[code]

    import math
    a=float(input('10進数の数字'))
    b=int(input('変換したい進数'))
    first_digit=''
    #tは少数部　fは整数部
    sgn = '-' if a < 0 else ''
    a = math.fabs(a)
    (t,f) = math.modf(a)
    i = int(f)
    result = '' if i != 0 else '0'
    while i > 0:
        result += str(i%b)
        i //= b
    z = t
    f_limit = 10 # 適当
    while z != 0.0:
        t = str(z * b)
        first_digit += t[0]
        (z,t) = math.modf(float(t))
        f_limit -= 1
        if f_limit <= 0:
            break
    if first_digit != '':
        first_digit = '.' + first_digit
    print( sgn + result[::-1] + first_digit )
    
[/code]


CC BY-SA 4.0
2021-04-10T21:14:01.433
75205
2021-04-10T21:14:01.433
40304
75202
answer