在 streamlit 中编写网站,如何避免使用长 if 链?

Writing a website in streamlit, how can I avoid using long if-chains?

我正在为 class 编写一个项目,但我不知道如何不将代码制作成一个长链,将其制作成 class 是否可行?在整个程序中调用 class?

import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

class religionss:
    def __init__(self, size, history, rituals, meditation, belief, scripts):
        self.size = size
        self.history = history
        self.rituals = rituals
        self.meditation = meditation
        self.belief = belief
        self.scripts = scripts

st.title('Världsreligionerna')

religion_options = st.selectbox(
    'Välj religion nedan: ',
    (f'Kristendomen', 'Islam', 'Judendomen',
     'Hinduismen', 'Buddhismen'))

st.write(f'Du valde: {religion_options}')

if religion_options == 'Islam':
    st.write('Islam är en abrahamitisk religion som grundades för ca 1400 år sedan.')
    box = st.selectbox('Välj kategori nedan:',
                       ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))
    if box == 'Storlek':
        st.write('1 miljard')

elif religion_options == 'Judendomen':
    box = st.selectbox('Välj kategori nedan:',
                       ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))

elif religion_options == 'Hinduismen':
    box = st.selectbox('Välj kategori nedan:',
                       ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))

elif religion_options == 'Buddhismen':
    box = st.selectbox('Välj kategori nedan:',
                       ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))

elif religion_options == 'Kristendomen':
    box = st.selectbox('Välj kategori nedan:',
                       ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))

这是一种不使用 if/else 的方法。它使用字典查找。

选择框选项是一样的,所以我也重构了它。

代码

import streamlit as st
# import pandas as pd
# import numpy as np
# import matplotlib.pyplot as plt


def mybox():
    box = st.selectbox('Välj kategori nedan:',
                        ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))
    return box


def Islam():
    st.write('Islam är en abrahamitisk religion som grundades för ca 1400 år sedan.')
    box = mybox()

    if box == 'Storlek':
        st.write('1 miljard')


def Judendomen():
    box = mybox()


def Hinduismen():
    box = mybox()


def Buddhismen():
    box = mybox()


def Kristendomen():
    box = mybox()


def main():

    st.title('Världsreligionerna')

    religion_options = st.selectbox(
        'Välj religion nedan: ',
        (f'Kristendomen', 'Islam', 'Judendomen',
         'Hinduismen', 'Buddhismen'))

    st.write(f'Du valde: {religion_options}')

    opt_dict = {
        'Islam': Islam,
        'Judendomen': Judendomen,
        'Hinduismen': Hinduismen,
        'Buddhismen': Buddhismen,
        'Kristendomen': Kristendomen
    }

    opt_dict[religion_options]()


if __name__ == '__main__':
    main()

输出

着陆页

选择伊斯兰教后

放在class

代码

"""
religion.py
"""


import streamlit as st
# import pandas as pd
# import numpy as np
# import matplotlib.pyplot as plt


class Religion:
    def __init__(self):
        pass

    def start_page(self):
        st.title('Världsreligionerna')

        religion_options = st.selectbox(
            'Välj religion nedan: ',
            (f'Kristendomen', 'Islam', 'Judendomen',
             'Hinduismen', 'Buddhismen'))

        st.write(f'Du valde: {religion_options}')

        opt_dict = {
            'Islam': Islam,
            'Judendomen': Judendomen,
            'Hinduismen': Hinduismen,
            'Buddhismen': Buddhismen,
            'Kristendomen': Kristendomen
        }
        opt_dict[religion_options]()



def mybox():
    box = st.selectbox('Välj kategori nedan:',
                        ('Storlek', 'Historia', 'Ritualer',
                        'Meditation', 'Tro', 'Heliga skrifter'))
    return box


def Islam():
    st.write('Islam är en abrahamitisk religion som grundades för ca 1400 år sedan.')
    box = mybox()

    if box == 'Storlek':
        st.write('1 miljard')


def Judendomen():
    box = mybox()


def Hinduismen():
    box = mybox()


def Buddhismen():
    box = mybox()


def Kristendomen():
    box = mybox()


def main():
    religion = Religion()
    religion.start_page()


if __name__ == '__main__':
    main()

您可以在另一个脚本中使用模块 religion.py 让我们说 sample.py.

"""
sample.py
"""


import religion

var = religion.Religion()
var.start_page()