修改一些文件结构

啊啊啊
This commit is contained in:
shenjackyuanjie 2022-03-22 21:18:04 +08:00
parent 515b0f2501
commit dc8ee0b4a5
29 changed files with 307 additions and 1352 deletions

View File

@ -11,11 +11,10 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie gitee: @shenjackyuanjie
""" """
from libs.semver import VersionInfo from MCDR.version import Version
game_version = '0.6.2' game_version = Version("0.6.2")
__version__ = game_version __version__ = game_version
semver_game_version = VersionInfo.parse(game_version)
playing = False playing = False

View File

@ -13,11 +13,11 @@ gitee: @shenjackyuanjie
# 单独导入的(或者就这一个有用的) # 单独导入的(或者就这一个有用的)
from .delivery import Delivery from .delivery import Delivery
from .new_thread import new_thread from utils.new_thread import new_thread
# lazy之后之前全部导入的(太多了写不动__all__了) # lazy之后之前全部导入的(太多了写不动__all__了)
from .Exp import * from .Exp import *
from .tools import * from utils.tools import *
from .calculation import * from .calculation import *
from .scientific_unit import * from .scientific_unit import *

View File

@ -0,0 +1,21 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
# system function
from xml.etree import ElementTree as ET
# Difficult_Rocket function
# libs function

View File

@ -0,0 +1,20 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
"""
存档模块
尽量同时兼容SR1和DR
包含:
解析存档文件
创建存档文件
"""

View File

@ -0,0 +1,70 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
# system function
# Difficult_Rocket function
# libs function
from MCDR.serializer import Serializable
"""
DR 内部数据传输格式类型
"""
# 一艘船的数据格式
class Ship(Serializable):
data: dict
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 蓝图部件的数据格式
class Blueprint(Serializable):
data: dict
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 飞船上的单个部件的数据格式
class Part(Serializable):
data: dict
def __init__(self, part_type: str, **kwargs):
super().__init__()
self.type = part_type
self.name = kwargs.get('name')
# 整个存档的数据格式
class Save(Serializable):
data: dict
def __init__(self, **kwargs):
super().__init__(**kwargs)
class PartType(Serializable):
data: dict # 输出的数据格式
# 所有部件的格式的存储
class PartTypes(Serializable):
data: dict = {} # 所有部件的格式
def add_part(self, part_type: str, **kwargs):
self.data[part_type] = Part(part_type, **kwargs)

View File

@ -17,7 +17,6 @@ import sys
import time import time
import logging import logging
import traceback import traceback
import configparser
from decimal import Decimal from decimal import Decimal
@ -30,9 +29,10 @@ from Difficult_Rocket import translate
from Difficult_Rocket.api.Exp import * from Difficult_Rocket.api.Exp import *
from Difficult_Rocket.translate import tr from Difficult_Rocket.translate import tr
from Difficult_Rocket.command import line from Difficult_Rocket.command import line
from Difficult_Rocket.fps.fps_log import FpsLogger
from Difficult_Rocket.guis.widgets import InputBox from Difficult_Rocket.guis.widgets import InputBox
from Difficult_Rocket.api import tools, new_thread from Difficult_Rocket.api import new_thread
from utils import tools
from Difficult_Rocket.client.fps.fps_log import FpsLogger
# libs function # libs function
local_lib = True local_lib = True
@ -40,9 +40,11 @@ if local_lib:
from libs import pyglet from libs import pyglet
from libs.pyglet.window import Window from libs.pyglet.window import Window
from libs.pyglet.window import key, mouse from libs.pyglet.window import key, mouse
from libs import toml
else: else:
import pyglet import pyglet
from pyglet.window import key, mouse from pyglet.window import key, mouse
import toml
class Client: class Client:
@ -51,7 +53,7 @@ class Client:
# logging # logging
self.logger = logging.getLogger('client') self.logger = logging.getLogger('client')
# config # config
self.config = tools.load_file('configs/main.config') self.config = tools.load_file('./configs/main.toml')
# value # value
self.process_id = 'Client' self.process_id = 'Client'
self.process_name = 'Client process' self.process_name = 'Client process'
@ -95,9 +97,9 @@ class ClientWindow(Window):
# configs # configs
pyglet.resource.path = ['/textures/'] pyglet.resource.path = ['/textures/']
pyglet.resource.reindex() pyglet.resource.reindex()
self.set_icon(pyglet.image.load('textures/icon.png')) self.set_icon(pyglet.image.load('./textures/icon.png'))
self.main_config = tools.load_file('configs/main.config') self.main_config = tools.load_file('./configs/main.toml')
self.game_config = tools.load_file('configs/game.config') self.game_config = tools.load_file('./configs/game.config')
# dic # dic
self.environment = {} self.environment = {}
self.textures = {} # all textures self.textures = {} # all textures
@ -156,9 +158,13 @@ class ClientWindow(Window):
# 从字体文件夹加载字体(或是字体类文件夹) # 从字体文件夹加载字体(或是字体类文件夹)
if os.path.isfile(os.path.join(fonts_folder_path, fonts_folders, files)): if os.path.isfile(os.path.join(fonts_folder_path, fonts_folders, files)):
# 如果是字体文件,则直接加载 # 如果是字体文件,则直接加载
# self.logger.debug(tr.lang('window', 'fonts.load').format(os.path.join(fonts_folder_path, fonts_folders, files)))
pyglet.font.add_file(os.path.join(fonts_folder_path, fonts_folders, files)) pyglet.font.add_file(os.path.join(fonts_folder_path, fonts_folders, files))
else: # 否则,遍历加载字体类文件夹并加载 else: # 否则,遍历加载字体类文件夹并加载
for font in os.listdir(os.path.join(fonts_folder_path, fonts_folders, files)): for font in os.listdir(os.path.join(fonts_folder_path, fonts_folders, files)):
if not font[-4:] == '.ttf':
continue
# self.logger.debug(tr.lang('window', 'fonts.load').format(os.path.join(fonts_folder_path, fonts_folders, files, font)))
pyglet.font.add_file(os.path.join(fonts_folder_path, fonts_folders, files, font)) pyglet.font.add_file(os.path.join(fonts_folder_path, fonts_folders, files, font))
# @new_thread('window load_editor') # @new_thread('window load_editor')
@ -187,11 +193,11 @@ class ClientWindow(Window):
@new_thread('window save_info') @new_thread('window save_info')
def save_info(self): def save_info(self):
config_file = configparser.ConfigParser() print('save_info start')
config_file.read('configs/main.config') config_file = tools.load_file('./config/config.toml')
config_file['window']['width'] = str(self.width) config_file['window']['width'] = self.width
config_file['window']['height'] = str(self.height) config_file['window']['height'] = self.height
config_file.write(open('configs/main.config', 'w', encoding='utf-8')) toml.dump(config_file, open('./config/config.toml', 'w'))
""" """
draws and some event draws and some event

View File

@ -42,19 +42,17 @@ class FpsLogger:
else: else:
self.fps_list.append(1) self.fps_list.append(1)
if len(self.fps_list) > self.count: if len(self.fps_list) > self.count:
self.fps_list = self.fps_list[-self.count + 1:] self.fps_list = self.fps_list[-self.count + 1:] # 整个列表往前挪一位
if len(self.get_fps_list) > self.count: if len(self.get_fps_list) > self.count:
self.get_fps_list = self.get_fps_list[-self.count + 1:] self.get_fps_list = self.get_fps_list[-self.count + 1:] # 整个列表往前挪一位
try: try:
self._fps = statistics.geometric_mean(self.fps_list[-100:]) self._fps = statistics.geometric_mean(self.fps_list[-100:]) # 取最后100个值的平均值
self.middle_fps = statistics.median(self.fps_list) self.middle_fps = statistics.median(self.fps_list) # 取中间值
except Exception: except Exception:
print(self.fps_list) print(self.fps_list)
raise raise
self._max_fps = max(self.fps_list) self._max_fps = max(self.fps_list)
self._min_fps = min(self.fps_list) self._min_fps = min(self.fps_list)
# 获取新fps
del now_fps
@property @property
def max_fps(self): def max_fps(self):

View File

@ -17,14 +17,13 @@ import time
import logging import logging
import logging.config import logging.config
import multiprocessing import multiprocessing
from multiprocessing import Manager as share
if __name__ == '__main__': # been start will not run this if __name__ == '__main__': # been start will not run this
sys.path.append('/bin/libs') sys.path.append('/bin/libs')
sys.path.append('/bin') sys.path.append('/bin')
from Difficult_Rocket import client, server from Difficult_Rocket import client, server
from Difficult_Rocket.api import tools from utils import tools
from Difficult_Rocket.translate import tr from Difficult_Rocket.translate import tr

View File

@ -15,7 +15,7 @@ gitee: @shenjackyuanjie
from typing import Tuple from typing import Tuple
# from libs # from libs
from semver import VersionInfo from MCDR.version import Version
from MCDR.serializer import Serializable from MCDR.serializer import Serializable
# from DR # from DR
@ -25,7 +25,7 @@ from Difficult_Rocket import semver_game_version
mod系统参数 mod系统参数
""" """
MOD_loader_version = "0.0.1" # mod系统版本 版本号遵守semver2.0.0 MOD_loader_version = "0.0.1" # mod系统版本 版本号遵守semver2.0.0
semver_loader_version = VersionInfo.parse(MOD_loader_version) semver_loader_version = Version(MOD_loader_version)
""" """
@ -40,7 +40,7 @@ class MODInfo(Serializable):
""" """
"""基本信息""" """基本信息"""
name: str # mod名称 name: str # mod名称
version: VersionInfo # mod版本 version: Version # mod版本
dependencies: list = [] # mod依赖 dependencies: list = [] # mod依赖
"""作者、描述""" """作者、描述"""
@ -50,9 +50,9 @@ class MODInfo(Serializable):
info: str = "" # 其他信息 (可以很多很多) info: str = "" # 其他信息 (可以很多很多)
"""版本兼容信息""" """版本兼容信息"""
write_version: VersionInfo # mod编写版本 write_version: Version # mod编写版本
write_loader_version: VersionInfo # mod编写的加载器版本 write_loader_version: Version # mod编写的加载器版本
compatible_version: Tuple[VersionInfo, VersionInfo] = (semver_game_version, semver_game_version) # mod兼容版本 compatible_version: Tuple[Version, Version] = (semver_game_version, semver_game_version) # mod兼容版本
# 第一个是最低兼容版本,第二个是最高兼容版本 # 第一个是最低兼容版本,第二个是最高兼容版本
# 例如: ("1.0.0", "1.1.0") 表示从1.0.0版本开始兼容,到1.1.0版本结束兼容 # 例如: ("1.0.0", "1.1.0") 表示从1.0.0版本开始兼容,到1.1.0版本结束兼容

View File

@ -1,4 +1,4 @@
# ------------------------------- # -------------------------------
# Difficult Rocket # Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie # Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved # All rights reserved
@ -11,17 +11,17 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie gitee: @shenjackyuanjie
""" """
import logging
import os import os
import sys import sys
import logging
if __name__ == '__main__': # been start will not run this if __name__ == '__main__': # been start will not run this
sys.path.append('/bin/libs') sys.path.append('/bin/libs')
sys.path.append('/bin') sys.path.append('/bin')
from Difficult_Rocket.api import tools from utils import tools
from Difficult_Rocket.api.delivery import Delivery from Difficult_Rocket.api.delivery import Delivery
from Difficult_Rocket.api.new_thread import new_thread from utils.new_thread import new_thread
# TODO 改变服务端启动逻辑 0.6.0会写完的( # TODO 改变服务端启动逻辑 0.6.0会写完的(

View File

@ -13,7 +13,7 @@ gitee: @shenjackyuanjie
from typing import Union from typing import Union
from Difficult_Rocket.api import tools from utils import tools
from Difficult_Rocket.api.Exp import * from Difficult_Rocket.api.Exp import *
""" """

View File

@ -11,7 +11,7 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie gitee: @shenjackyuanjie
""" """
from Difficult_Rocket.api import tools from utils import tools
import os import os
import PIL.Image import PIL.Image

View File

@ -0,0 +1,12 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""

View File

@ -21,9 +21,11 @@ import configparser
from xml.dom.minidom import parse from xml.dom.minidom import parse
if __name__ == '__main__': # been start will not run this if __name__ == '__main__': # 如果是直接运行该文件,则将工作目录切换到该文件所在目录
sys.path.append('/bin/libs') sys.path.append('./libs')
sys.path.append('/bin') sys.path.append('./')
import toml
from libs import json5 from libs import json5
@ -38,31 +40,31 @@ file_error = {'FileNotFoundError': 'no {filetype} file was founded!:\n file name
'Error': 'get some unknown error when read {filetype} file {filename}! \n file type: {} \n file name: {} \n stack: {stack}'} 'Error': 'get some unknown error when read {filetype} file {filename}! \n file type: {} \n file name: {} \n stack: {stack}'}
def load_file(file_name: str, stack=None) -> dict: def load_file(file_name: str, stack=None):
f_type = file_name[file_name.rfind('.') + 1:] # 从最后一个.到末尾 (截取文件格式) f_type = file_name[file_name.rfind('.') + 1:] # 从最后一个.到末尾 (截取文件格式)
try: try:
rd = NotImplementedError('解析失败,请检查文件类型/文件内容/文件是否存在!') get_file = NotImplementedError('解析失败,请检查文件类型/文件内容/文件是否存在!')
if (f_type == 'json5') or (f_type == 'json'): if (f_type == 'json5') or (f_type == 'json'):
try: try:
with open(file_name, 'r', encoding='utf-8') as jf: # jf -> json file with open(file_name, 'r', encoding='utf-8') as jf: # jf -> json file
rd = json5.load(jf, encoding='uft-8') get_file = json5.load(jf, encoding='uft-8')
except UnicodeDecodeError: except UnicodeDecodeError:
with open(file_name, 'r', encoding='gbk') as jf: with open(file_name, 'r', encoding='gbk') as jf:
rd = json5.load(jf) get_file = json5.load(jf)
tools_logger.info('文件 %s 解码错误已重新使用gbk编码打开' % file_name) tools_logger.info('文件 %s 解码错误已重新使用gbk编码打开' % file_name)
if stack is not None: if stack is not None:
rd = rd[stack] get_file = get_file[stack]
elif f_type == 'xml': elif f_type == 'xml':
xml_load = parse(file_name) xml_load = parse(file_name)
if stack is not None: if stack is not None:
rd = xml_load.getElementsByTagName(stack) get_file = xml_load.getElementsByTagName(stack)
elif (f_type == 'config') or (f_type == 'conf') or (f_type == 'ini'): elif (f_type == 'config') or (f_type == 'conf') or (f_type == 'ini'):
cd = configparser.ConfigParser() get_file = configparser.ConfigParser()
cd.read(file_name) get_file.read(file_name)
if stack: if stack:
rd = cd[stack] get_file = get_file[stack]
else: elif f_type == 'toml':
rd = cd get_file = toml.load(file_name)
except Exception as exp: except Exception as exp:
error_type = type(exp).__name__ error_type = type(exp).__name__
if error_type in file_error: if error_type in file_error:
@ -70,7 +72,7 @@ def load_file(file_name: str, stack=None) -> dict:
else: else:
tools_logger.error(file_error['Error'].format(filetype=f_type, filename=file_name, stack=stack)) tools_logger.error(file_error['Error'].format(filetype=f_type, filename=file_name, stack=stack))
raise raise
return rd return get_file
# main config # main config

View File

@ -41,6 +41,7 @@
'libs.local': '正在使用本地 pyglet 库 版本为: {}', 'libs.local': '正在使用本地 pyglet 库 版本为: {}',
'libs.outer': '正在使用全局 pyglet 库 版本为: {}\n(可能会造成bug因为本地库版本为2.0dev9)', 'libs.outer': '正在使用全局 pyglet 库 版本为: {}\n(可能会造成bug因为本地库版本为2.0dev9)',
'fonts.found': '在字体列表中找到以下字体库: {}', 'fonts.found': '在字体列表中找到以下字体库: {}',
'fonts.load': '正在加载字体: {}',
'game.input_stop': '控制台', 'game.input_stop': '控制台',
'game.command_stop': '游戏内命令行', 'game.command_stop': '游戏内命令行',
'game.window_stop': '窗口', 'game.window_stop': '窗口',

21
configs/main.toml Normal file
View File

@ -0,0 +1,21 @@
[runtime]
fps = 60
version = "0.6.1"
language = "zh-CN"
date_fmt = '%Y-%m-%d %H-%M-%S'
write_py_v = "3.8.10"
fonts_folder = 'libs/fonts'
[window]
style = "None"
width = 1300
height = 931
visible = true
caption = "Difficult Rocket {version}"
resizable = true
full_screen = false
[window.default]
width = 1024
height = 768

49
docs/howto/game/命名.md Normal file
View File

@ -0,0 +1,49 @@
# 关于命名的设计文档
## 命名规则
## 命名空间
- DR: Difficult Rocket
- DR单独的部件、格式、结构的命名空间
- 例子
- `DR:pod-1`
- `DR:solar.expand`
- `DR:wheel.big`
- `DR:planet.smearth`
- `DR:planet.smars`
- SR: SimpleRockets
- SR的原生组件、格式、结构的命名空间(大概不会用多少)
- 例子
- `SR:pod-1`
- `SR:wheel.small`
- 其他:
- 命名规则:
- 可以包含
- `ABC`
- `abc`
- `-` `_`
- `123`
- `从前有座山`
- `Unicode表情`
- 各种中文标点符号
- 中文的啊!
- `` `。` `、` `·`
- `` ``
- `` ``
- `` ``
- `【` `】`
- `《` `》`
- `“` `”`
- `` ``
- 不能以数字开头
- 不能包含
- `.` `/` `:`
- `<` `>`
- `|` `*` `?`
- `"` `'`
- 例子:
- `Simple_Mod`
- `真·简单mod`
- `啊啊啊啊↑↓Jundroo`
- mod添加的部件、格式、结构的命名空间

15
docs/howto/mod/loader.md Normal file
View File

@ -0,0 +1,15 @@
# MOD加载器设计文档
## v1-20220307
### __init__.py
- MODInfo类
- MODInfo类的属性
- 一些基本的MOD信息
- 版本类信息
- MOD版本号
- DR MOD加载器兼容版本
- DR 内容兼容版本
- 需要的MOD版本号
-

View File

@ -19,9 +19,13 @@
### Add ### Add
- 添加模块 `semver` 和协议 (`LICENSE.txt`) [然后就很快被替换成MCDR的了]: <> (- 添加模块 `semver` 和协议 &#40;`LICENSE.txt`&#41;)
- Add modules `semver` Add LICENSE (`LICENSE.txt`) [Add soon been replace by MCDR]: <> ( - Add modules `semver` Add LICENSE &#40;`LICENSE.txt`&#41;)
- 添加了 `libs.MCDR` 文件夹 (`new_thread`没有包含在内)
- Add `libs.MCDR` folder (`new_thread` not included)
- 添加对 mod 的支持(还在写啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊) - 添加对 mod 的支持(还在写啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
- 计划写个设计文档
- Plan to write a design document
## ~~202111 202112xx 20220119~~ 20220207 V 0.6.1 ## ~~202111 202112xx 20220119~~ 20220207 V 0.6.1

View File

@ -1,5 +1,6 @@
# 本文件以 GNU Lesser General Public License v3.0GNU LGPL v3) 开源协议进行授权 (谢谢狐狸写出这么好的MCDR) # 本文件以 GNU Lesser General Public License v3.0GNU LGPL v3) 开源协议进行授权 (谢谢狐狸写出这么好的MCDR)
# 顺便说一句,我把所有的tab都改成了空格,因为我觉得空格比tab更好看(草,后半句是github copilot自动填充的) # 顺便说一句,我把所有的tab都改成了空格,因为我觉得空格比tab更好看(草,后半句是github copilot自动填充的)
# 节选自MCDReforged5a929652022年1月略有改动[doge]
import copy import copy
from abc import ABC from abc import ABC
@ -7,8 +8,7 @@ from enum import EnumMeta
from threading import Lock from threading import Lock
from typing import Union, TypeVar, List, Dict, Type, get_type_hints, Any from typing import Union, TypeVar, List, Dict, Type, get_type_hints, Any
from semver import VersionInfo as semver_VersionInfo from MCDR.version import Version
from libs.semver import VersionInfo as lib_semver_VersionInfo
""" """
This part of code come from MCDReforged(https://github.com/Fallen-Breath/MCDReforged) This part of code come from MCDReforged(https://github.com/Fallen-Breath/MCDReforged)
@ -41,13 +41,13 @@ def _get_args(cls: Type) -> tuple:
return getattr(cls, '__args__', ()) return getattr(cls, '__args__', ())
_BASIC_CLASSES = (type(None), bool, int, float, str, list, dict, lib_semver_VersionInfo, semver_VersionInfo) _BASIC_CLASSES = (type(None), bool, int, float, str, list, dict, Version)
def serialize(obj) -> _BASIC_CLASSES: def serialize(obj) -> _BASIC_CLASSES:
if type(obj) in (type(None), int, float, str, bool): if type(obj) in (type(None), int, float, str, bool):
return obj return obj
elif isinstance(obj, lib_semver_VersionInfo) or isinstance(obj, semver_VersionInfo): elif isinstance(obj, Version):
return obj return obj
elif isinstance(obj, list) or isinstance(obj, tuple): elif isinstance(obj, list) or isinstance(obj, tuple):
return list(map(serialize, obj)) return list(map(serialize, obj))
@ -87,6 +87,9 @@ def deserialize(data, cls: Type[T], *, error_at_missing=False, error_at_redundan
# For list and dict, since it doesn't have any type hint, we choose to simply return the data # For list and dict, since it doesn't have any type hint, we choose to simply return the data
elif cls in _BASIC_CLASSES and type(data) is cls: elif cls in _BASIC_CLASSES and type(data) is cls:
return data return data
# Version
elif isinstance(cls, Version):
return data
# float thing # float thing
elif cls is float and isinstance(data, int): elif cls is float and isinstance(data, int):
return float(data) return float(data)

View File

@ -1,27 +0,0 @@
Copyright (c) 2013, Konstantine Rybnikov
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
Neither the name of the {organization} nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

File diff suppressed because it is too large Load Diff

12
mods/DR/__init__.py Normal file
View File

@ -0,0 +1,12 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""

12
mods/DR/type_data.py Normal file
View File

@ -0,0 +1,12 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021-2022 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""

View File

@ -11,18 +11,14 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie gitee: @shenjackyuanjie
""" """
import cProfile import cProfile
import time
def run(): def run():
一个很大的整数 = 11111111111111111111111111111111111111111111111 * 111111235111 start_time = time.perf_counter_ns()
print(*[x for x in range(1, 100000) if sum([int(i)**len(str(x)) for i in str(x)]) == x])
一个很大的浮点数 = 1111111111111111111111111111111111111111.1111111 * 11111123.5111 print(time.perf_counter_ns() - start_time)
print(一个很大的整数, '\n', 一个很大的浮点数)
cProfile.run("run") cProfile.run("run()")
"""
1234569279011111111111111111111111111111111111098765418321
1.234569279011111e+46
"""