Python论坛  - 讨论区

标题:[python-chinese] 一道很简单的题(给初学者做练习)

2006年01月02日 星期一 11:57

魏忠 weizhong2004 at gmail.com
Mon Jan 2 11:57:24 HKT 2006

写一个函数,该函数接受三个参数,分别为 分子,分母,结果位数
该函数可以计算任意数除法到任意精度(自定义小数位数)
如果小数部分循环的,可以只列出第一次循环的部分,然后注明后面循环
俺写了一个(目前还不能处理循环结)

def cf(fz,fm,ws=1000):
    jg=[];
    for i in xrange(ws):
        if i==0:
            zs,ys=divmod(fz,fm)
            zs=str(zs)
            jg=[zs,'.']
        else:
            ZS,ys=divmod(fz,fm)
            jg.append(str(ZS))
        if ys==0: break
        fz=ys*10
    return ''.join(jg)

--

开飞机的舒克
http://www.lvye.org/shuke
msn:weizhong at netease.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060102/12861d77/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年01月02日 星期一 13:24

风向标-Vane vaneoooo at gmail.com
Mon Jan 2 13:24:20 HKT 2006

难在那个任意选取位数上
大牛们做起来肯定特简单
我看了一下魏忠兄的程序
哈哈,随便借机了解了一下divmod函数。
至于那个str函数还看的不是很懂
看帮助又觉得蒙,自己动手用,又发现无论浮点数还是整型数据,在w=str(w)之后没什么变化
实在看不出作用是?




在06-1-2,魏忠 <weizhong2004 at gmail.com> 写道:
>
> 写一个函数,该函数接受三个参数,分别为 分子,分母,结果位数
> 该函数可以计算任意数除法到任意精度(自定义小数位数)
> 如果小数部分循环的,可以只列出第一次循环的部分,然后注明后面循环
> 俺写了一个(目前还不能处理循环结)
>
> def cf(fz,fm,ws=1000):
>     jg=[];
>     for i in xrange(ws):
>         if i==0:
>             zs,ys=divmod(fz,fm)
>             zs=str(zs)
>             jg=[zs,'.']
>         else:
>             ZS,ys=divmod(fz,fm)
>             jg.append(str(ZS))
>         if ys==0: break
>         fz=ys*10
>     return ''.join(jg)
>
> --
>
> 开飞机的舒克
> http://www.lvye.org/shuke
> msn:weizhong at netease.com
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060102/e888c966/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年01月13日 星期五 23:18

yzhh yezonghui at gmail.com
Fri Jan 13 23:18:05 HKT 2006

下面是我的程序,可以标出循环节的
BTW,土问一句:join()什么语义?我用return intPart.join(frac)不对

#!/usr/bin/python
# -*- coding: utf-8 -*-

##写一个函数,该函数接受三个参数,分别为 分子,分母,结果位数
##该函数可以计算任意数除法到任意精度(自定义小数位数)
##如果小数部分循环的,可以只列出第一次循环的部分,然后注明后面循环

def div_w_prec(dividend, divisor, precision=1000):
    div, mod= divmod(dividend, divisor)
    intPart = str(div) + '.'
    pos = 0; modDict = {}; frac = []
    while pos < precision and mod != 0 :
        modDict[mod] = pos
        mod *= 10
        div, mod = divmod (mod, divisor)
        frac.append(str(div))
        if mod in modDict.keys(): break
        pos += 1
    if mod in modDict.keys():      # 发现循环
        frac.insert(modDict[mod],'(')
        frac.append(')')
    return intPart + ''.join(frac)

print div_w_prec(97, 37)

-- 
   regards,
yzhh


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年01月14日 星期六 00:47

yzhh yezonghui at gmail.com
Sat Jan 14 00:47:07 HKT 2006

ok, join知道什么意思了,现在的问题是:有没有更直接的做法,比如concat(list)?

另外,我前面的程序如果要接受浮点数作参数,需要把两处“str(div)”改成“str(int(div))”

-- 
   regards,
yzhh


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号