用python实现西绪福斯黑洞(即123数字黑洞)的演示

目录

一、123数字黑洞描述

二、问题解决

1、内容描述

2、实现思路

3、代码功能实现

(1)分解输入的数字字符串,生成数字列表

(2)由数字列表生成新的数字字符串

(3)主程序实现输入和输出

三、完整代码

四、结果输出

1、验证前文的数据

2、随机数字字符串


前面对卡普雷卡尔黑洞(重排求差黑洞)进行分析计算,有兴趣的可以点击下面的链接研究一下!

用python实现卡普雷卡尔黑洞(重排求差黑洞)的计算

下面我会利用python来实现西绪福斯黑洞(即123数字黑洞)的计算与演示。

一、123数字黑洞描述

数学中的123就跟英语中的ABC一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的数字。

黑洞的值:

设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,

例如:1234567890,

1.偶:数出该数数字中的偶数个数,在本例中为2,4,6,8,0,总共有 5 个。

2.奇:数出该数数字中的奇数个数,在本例中为1,3,5,7,9,总共有 5 个。

3.总:数出该数数字的总个数,本例中为 10 个。

4.新数:将答案按 “偶-奇-总” 的位序,排出得到新数为:5510。

5.重复:将新数5510按以上算法重复运算,可得到新数:134。

6.重复:将新数134按以上算法重复运算,可得到新数:123。

结论:对数1234567890,按上述算法,最后必得出123的结果,我们可以用计算机写出程序,测试出对任意一个数经有限次重复后都会是123。换言之,任何数的最终结果都无法逃逸123黑洞……

二、问题解决

1、内容描述

(1)设定任意数字字符串,数出这个数的偶数个数,奇数个数和数中包含的所有位数,并按”偶-奇-总“位序组合生成新数。

(2)然后重复上述过程,最后得到123。

2、实现思路

(1)程序接收输入一个数字字符串

(2)将输入的数字分解为数字列表

(3)计算出偶数、奇数,将偶数、奇数和总数组合成一个新数

(4)将得出的数进行重复操作,直到得到的数不再变化或位数变少为止

(5)依次输出每次的数据方便验算

3、代码功能实现

(1)分解输入的数字字符串,生成数字列表

#分解输入的数字字符串
def split_number(number):
    list_number = []
    str_number = str(number)
    for item in str_number:
        list_number.append(int(item))
    return list_number

功能的实现基本上与上一个黑洞的一样,这里不再详述。

(2)由数字列表生成新的数字字符串

输入为上面程序产生的数字列表,输出新的数字字符

#由数字列表生成新的数字字符串
def list_to_newstring(list_number):
    #依次取出数据进行偶数、奇数的计数
    count_even = 0   #存放偶数个数数值
    count_odd = 0    #存放奇数个数数值
    for item in list_number:
        if item % 2 == 0:
            count_even += 1
        else:
            count_odd += 1
    newstring =str(count_even) +str(count_odd) +str(count_even+count_odd)
    return newstring

依次取出数字列表中的数,进行奇偶性的判断,累计得到奇偶个数,从而生成新的字符串

(3)主程序实现输入和输出

print("请输入由数字组成的字符串,位数及重复均无要求")
    input_string = input()
    # 分解数据,生成列表
    list_number01 = split_number(input_string)
    result_list = []  # 写入结果值
    hole_list = []  # 写入循环的结果,即为黑洞值
    result_list.append(input_string)
    while True:
        #根据列表生成新数
        new_string = list_to_newstring(list_number01)
        if new_string not in result_list:
            result_list.append(new_string)
            #新数产生新列表
            list_number01 = split_number(new_string)
        else:
            break
    #输出结果列表
    print("输出结果为:")
    for item in result_list:
        print(item)

发现重复数据,立即停止循环,结果保存到result_list列表中,最后用于输出。

三、完整代码

"""程序用于演示西绪福斯黑洞(即123数字黑洞)
内容描述:
设定任意数字字符串,数出这个数的偶数个数,奇数个数和数中包含的所有位数,并按”偶-奇-总“位序组合生成新数,
然后重复上述过程,最后得到123。
方法:
程序输入一个数字字符串,程序会按照下面进行演算:
将输入的数字分解为数字列表,计算出偶数、奇数,将偶数、奇数和总数组合成一个新数,
将得出的数进行重复操作,直到得到的数不再变化或位数变少为止
依次输出每次的数据方便验算
"""
#分解输入的数字字符串
def split_number(number):
    list_number = []
    str_number = str(number)
    for item in str_number:
        list_number.append(int(item))
    return list_number

#由数字列表生成新的数字字符串
def list_to_newstring(list_number):
    #依次取出数据进行偶数、奇数的计数
    count_even = 0   #存放偶数个数数值
    count_odd = 0    #存放奇数个数数值
    for item in list_number:
        if item % 2 == 0:
            count_even += 1
        else:
            count_odd += 1
    newstring =str(count_even) +str(count_odd) +str(count_even+count_odd)
    return newstring


def main():    # 提示按要求输入整数
    print("请输入由数字组成的字符串,位数及重复均无要求")
    input_string = input()
    # 分解数据,生成列表
    list_number01 = split_number(input_string)
    result_list = []  # 写入结果值
    hole_list = []  # 写入循环的结果,即为黑洞值
    result_list.append(input_string)
    while True:
        #根据列表生成新数
        new_string = list_to_newstring(list_number01)
        if new_string not in result_list:
            result_list.append(new_string)
            #新数产生新列表
            list_number01 = split_number(new_string)
        else:
            break
    #输出结果列表
    print("输出结果为:")
    for item in result_list:
        print(item)

main()


四、结果输出

1、验证前文的数据

对前面提到的数据进行验证,运算结果如下:

请输入由数字组成的字符串,位数及重复均无要求
1234567890
输出结果为:
1234567890
5510
134
123

2、随机数字字符串

请输入由数字组成的字符串,位数及重复均无要求
1111111111111111111111111111111111111111111
输出结果为:
1111111111111111111111111111111111111111111
04343
325
123

数据分析:

第一次:43个1,偶数为0,奇数为43,总数为43,因此新数为04343

第二次:3个偶数,2个奇数,总数为5,因此新数为325

第三次:1个偶数,2个奇数,总数为3,因此新数为123

第四次:1个偶数,2个奇数,总数为3,因此新数为123,重复退出,得到结果

黑洞数字为123,结果正确

猜你喜欢

转载自blog.csdn.net/sygoodman/article/details/124675057