#28291: 能幫我找出這個錯在哪嗎?測資2只輸出128行


411077025@mail.nknu.edu.tw (彭子彧)

學校 : 不指定學校
編號 : 169640
來源 : [36.238.149.126]
最後登入時間 :
2022-11-03 01:44:26
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [122.121.7.136] | 發表日期 : 2021-11-26 10:44

from decimal import *

try:

    while 1:

        a, b, c = input().split()

        a = Decimal(a)

        b = Decimal(b)

        c = int(c)

        getcontext().prec = 10000

        d = str(a // b)  

        e = str((a % b) / b)

        ans = ""

        ans += d

        if e == "0":

            ans += "."

            for i in range(c):

                ans += str(0)

        else:

            for i in range(1, c + 2):

                ans += e[i]

        print(ans)

except:

    pass

 
#28295: Re:能幫我找出這個錯在哪嗎?測資2只輸出128行


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [27.247.69.111] | 發表日期 : 2021-11-26 13:38

from decimal import *

try:

    while 1:

        a, b, c = input().split()

        a = Decimal(a)

        b = Decimal(b)

        c = int(c)

        getcontext().prec = 10000

        d = str(a // b)  

        e = str((a % b) / b)

        ans = ""

        ans += d

        if e == "0":

            ans += "."

            for i in range(c):

                ans += str(0)

        else:

            for i in range(1, c + 2):

                ans += e[i]

        print(ans)

except:

    pass


如果把except改成except EOFError,會看到錯誤訊息:

Traceback (most recent call last):
  File "/8683795/code_8683795.py", line 37, in 
    ans += e[i]
IndexError: string index out of range

想想看怎麼改吧

 
#28300: Re:能幫我找出這個錯在哪嗎?測資2只輸出128行


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [27.247.69.111] | 發表日期 : 2021-11-26 19:50

會有問題的原因是如果後面位數都是0,後面的0不會出現在字串e裡面,導致e的長度比你想像中短。(例如1/2這種情況)

所以你的程式可以改成從e的第2個字到最後一個字,後面再補0。

 

補充:你其實不需要那兩個for迴圈,第一個for迴圈可以改成

ans += "0" * c

代表"0"重複c次

第二個for迴圈可以改成

ans += e[1:c+2]

就好了,而且e的長度如果太短,也不會發生錯誤,最多就只到e的最後一個字元

 
ZeroJudge Forum