File size: 4,646 Bytes
7ef5492
 
 
 
 
 
 
 
 
 
 
 
 
 
fc704ee
 
 
 
 
7ef5492
 
 
9a0691a
7ef5492
 
 
 
 
 
fc704ee
 
 
 
9a0691a
7ef5492
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46093a4
 
 
 
 
 
7ef5492
46093a4
 
ddee233
46093a4
7ef5492
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
import warnings
import re
from zhdate import ZhDate as lunar_date
from typing import Iterable
import streamlit.components.v1 as components
from datetime import datetime
from PIL import Image 
warnings.filterwarnings('ignore')
# import plotly.graph_objs as go


# ============================================================================ #
#                                    config                                    #
# ============================================================================ #

st.set_page_config(
    page_title="simingyanwebpage",
    page_icon="🧊",
    layout="centered",
    initial_sidebar_state="expanded",
    menu_items={
        'About': "fyenne@hotmail.com"
    }
)

# ============================================================================ #
#                                   main page                                  #
# ============================================================================ #

@st.cache  # 👈 Added this
class load_data:
    '''
    read some data
    '''
    def __init__(self, df, lunar_today, pltdf):
        self.df = pd.DataFrame()
        self.lunar_today = ''
        self.pltdf = pd.DataFrame()
        self.chinese_char_map = {}
        

    df = pd.read_csv('./dataup/base.csv')
    lunar_today = re.sub('\D', '', str(lunar_date.from_datetime(datetime.now())))
    pltdf = pd.DataFrame(data = {
        'main': '八卦',
        'wuxing':['金', '金', '火', '火', '木', '木', '土', '土','土', '土', '水', '水'],
        'bagua': ['乾','兑','离','离','震','巽','坤','坤','艮','艮','坎','坎'],
        'tiangan':['庚', '辛','丙', '丁', '甲', '乙', '戊', '己', '戊', '己',  '壬', '癸'],
        'dizhi':['申', '酉','巳', '午','寅','卯','辰','戌', '丑', '未',  '亥', '子'],
        'value1': np.repeat(10, 12).tolist()
    })
    def plt1():
        fig = px.sunburst(load_data.pltdf, path=['main', 'wuxing', 'bagua', 'tiangan', 'dizhi'], values='value1',\
        color_discrete_sequence = px.colors.qualitative.Pastel2[0:8]
        )
        return fig
    
    def count_strokes(words: Iterable) -> int:
        """
        统计字符串中所有文字的笔画总数

        :param words: 需要统计的字符串
        :return: 笔画总数
        """
        chinese_char_map = {}
        with open('./dataup/chinese_unicode_table.txt', 'r', encoding='UTF-8') as f:
            lines = f.readlines()
            for line in lines[6:]:  # 前6行是表头,去掉
                line_info = line.strip().split()
                # 处理后的数组第一个是文字,第7个是笔画数量
                chinese_char_map[line_info[0]] = line_info[6]
        strokes = 0
        for word in words:
            if 0 <= ord(word) <= 126:  # 数字,英文符号范围
                strokes += 1
            elif 0x4E00 <= ord(word) <= 0x9FA5:  # 常用汉字Unicode编码范围4E00-9FA5,20902个字
                strokes += int(chinese_char_map.get(word, 1))
            else:  # 特殊符号字符一律排在最后
                strokes += 1
        return strokes
    
    
st.title('正德佷准')
st.markdown('--- \n > **人工智能和量子物理结合下的优化版梅花易数**\n ---')
add_selectbox = st.sidebar.selectbox(
    "In which aspects would you like to know your future?",
    ("undefined", "money", "love")
)

if add_selectbox == 'undefined':
    print('')
    
    with st.container():
        # st.write("This is inside the container")
        st.plotly_chart(load_data.plt1())
# -----
else:
    '今日是农历: %s \
    公历 %s'%(load_data.lunar_today, datetime.today().strftime('%Y%m%d'))
    dizhi = '酉、戌、亥、子、丑、寅、卯、辰、巳、午、未、申'.split('、')
    
    dict = dict(zip(range(1,13), "子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥".split('、')))
    # st.code()
    name = st.text_input('请输入您的姓名')
    # st.text()
    components.html("<html><body>笔画数:%s</body></html>"%load_data.count_strokes(name),
                width=200, height=30)
    
    bdate = st.text_input('请输入您的生日', value = '20220304')
    dizhi = dizhi[int(bdate[0:4])%12 - 1]
    components.html("<html><body>地支: %s</body></html>"%dizhi,
                width=200, height=30)
    
    bt = st.button('测')
    if (bt == True) & (name != '') & (int(bdate) < 20220101) & (len(name) < 26):
        st.markdown('恭喜您和刘亦菲谈恋爱')
    else:
        st.text("输入信息有误")
        pass