行走的數字

一、前言

有一定數學基礎的同學們都知道,如果兩個正整數相除之后得到的結果,要么能除盡,要么就是一個循環小數。
假如結果是循環小數,那么小數的每一位取值是0-9,且存在循環節點。如果我們用小數的每一位進行畫圖,每位小數用固定的線段表示,而每位小數的大小則用角度(1代表36度,2代表72度,以此類推)表示,這樣的話我們就可以看到畫圖板上有一條線段在行走一樣。
示例:
1/7=0.…
第1位小數是1,則畫一條長度固定,角度為72°的線段,接著第2位小數是4,在原線段基礎上畫一條長度固定,角度為144°的線段,依次類推,就會形成如下圖案:

成都創新互聯公司專注于企業網絡營銷推廣、網站重做改版、偏關網站定制設計、自適應品牌網站建設、H5響應式網站電子商務商城網站建設、集團公司官網建設、外貿網站建設、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為偏關等各大城市提供網站開發制作服務。

只要是循環小數,最后都會形成一個對稱的圖形。如上圖,感覺還是挺好看的。或許這就是數學之美吧~

二、準備

2.1 用到的庫

decimal:高精度庫,可以用來計算更高精度的小數。
turtle:大名鼎鼎的海龜畫圖庫,用來畫圖。

2.2 原理介紹

1、使用高精度庫計算2個數字相除之后的結果,最好精確到200位以上。
2、編寫一個函數,用來求第一步結果的小數部分并做處理,求到這個小數的固定部分及循環位數。例如:1/12=0.0,那么固定部分就是:08,循環部分就是:3。
3、為了能用盡量少的畫筆畫成最終的圖形(形成對稱),我們需要用固定部分+循環部分*10的小數位來進行畫圖。

三、實例

3.1 完整代碼

# Encoding: utf-8
# Author: 思必得
# Date: 2021-09-29 14:21
# Project name: FrbPythonFiles
# IDE: PyCharm
# File name: walknumber

# 模塊說明:
"""
"""
# 更新日志:
"""
1、2021-09-29:
    a、完成初版
"""
# 待修改:
"""
"""


def 求兩個數相除之后的小數部分的循環小數(p_dividend: int, p_divisor: int, p_prec: int = 500):
    """
    求兩個整數相除之后的小數部分的循環小數,包括4部分:固定部分 + 循環部分 + 固定部分的長度 + 循環部分的長度
    比如1/7=0.,那么最后返回:('', '', 0, 6)
    @param p_dividend: 被除數
    @param p_divisor: 除數
    @param p_prec: 小數的精確度(精確到多少位)
    @return: {tuple:固定部分 + 循環部分 + 固定部分的長度 + 循環部分的長度}
    @author: 思必得
    @note:調用示例:
    (1, 95)     ('0', '', 1, 18)
    (1, 97)     ('', '0', 0, 96)
    (1, 193)    循環部分的長度:192位
(1, 479)    循環部分的長度:239位
(1, 384)    固定部分的長度:7位
    """
    from decimal import getcontext, Decimal
    getcontext().prec = p_prec  # 設置精度

    if p_dividend % p_divisor == 0:  # 整除的情況
        return None
    _shang_str = str(Decimal(p_dividend) / Decimal(p_divisor))
    _index = _shang_str.find('.')
    _str_digits = _shang_str[_index + 1:]
    _len_digits = len(_str_digits)
    if len(_shang_str) - 1 < p_prec:  # 非循環小數
        return None

    _half = _len_digits // 2
    for i in range(_half):
        for j in range(1, _half - i):
            _ratio = (_len_digits - i) // j
            _lt = _str_digits[slice(i)] + _str_digits[slice(i, i + j)] * _ratio
            _lt = _lt + _str_digits[slice(i, i + j)][slice(_len_digits - len(_lt))]
            if _lt[:-1] == _str_digits[:-1]:
                _fix = _str_digits[slice(0, i)]
                _loop = _str_digits[slice(i, i + j)]
                return _fix, _loop, len(_fix), len(_loop)


if __name__ == '__main__':
    import turtle as tt

    if s := 求兩個數相除之后的小數部分的循環小數(1, 13):
        ss = s[0] + s[1] * 10
        print(s)
        print(ss, len(ss))
        tt.setup(width=1.0, height=1.0)
        pen = tt.Pen()
        for i in ss:
            pen.left(int(i) * 36)
            pen.forward(100)
        tt.exitonclick()
    else:
        print('無法作圖,結果不是循環小數')

3.2 一些結果

3.2.1 1/11

('', '09', 0, 2)

3.2.2 1/13

('', '0', 0, 6)

3.2.3 1/17

('', '0', 0, 16)

3.2.4 1/19

('', '0', 0, 18)

網站標題:行走的數字
網站URL:http://m.kartarina.com/article42/dsogchc.html

成都網站建設公司_創新互聯,為您提供App設計自適應網站網站導航外貿網站建設營銷型網站建設網站改版

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
主站蜘蛛池模板: 人妻av无码专区| 性色av极品无码专区亚洲| 免费无码一区二区三区蜜桃| 亚洲韩国精品无码一区二区三区 | 日本无码WWW在线视频观看| 亚洲av无码专区亚洲av不卡| 亚洲精品无码成人AAA片| 无码人妻精品内射一二三AV| 潮喷大喷水系列无码久久精品| 91久久精品无码一区二区毛片| yy111111电影院少妇影院无码| 亚洲av无码片在线观看| 亚洲精品无码Av人在线观看国产| 无码人妻精品一区二区蜜桃| 亚洲综合无码一区二区三区| 国产亚洲精品无码成人| 日韩人妻无码一区二区三区久久99| 亚洲a∨无码一区二区| 熟妇无码乱子成人精品| 亚洲国产综合无码一区| 国产色综合久久无码有码| 亚洲AV永久无码精品一区二区国产| 亚洲AV无码无限在线观看不卡| 亚洲av成人无码久久精品| 亚洲国产精品无码久久SM| 国产日韩AV免费无码一区二区三区| 精品久久久久久无码中文野结衣 | 日韩精品真人荷官无码| 成人午夜精品无码区久久| 亚洲毛片av日韩av无码| 亚洲Av无码国产情品久久| 人妻无码久久精品| 免费一区二区无码视频在线播放| 青青爽无码视频在线观看| 四虎国产精品永久在线无码| 99热门精品一区二区三区无码 | 亚洲久热无码av中文字幕| 亚洲视频无码高清在线| 熟妇人妻无码中文字幕老熟妇| 色综合99久久久无码国产精品| 亚洲AV无码一区二区大桥未久|