Sina Media Lab
		
	commited on
		
		
					Commit 
							
							·
						
						15d45d1
	
1
								Parent(s):
							
							b5d0d2c
								
Updates
Browse files
    	
        app.py
    CHANGED
    
    | @@ -43,19 +43,27 @@ def generate_pdf_report(): | |
| 43 | 
             
                        pdf.set_fill_color(245, 245, 245)  # Light gray
         | 
| 44 | 
             
                    else:
         | 
| 45 | 
             
                        pdf.set_fill_color(255, 255, 255)  # White
         | 
| 46 | 
            -
             | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 47 | 
             
                    pdf.multi_cell(0, 8, f"Q{i+1}: {entry['question']}", border=1, fill=True)
         | 
| 48 |  | 
| 49 | 
            -
                     | 
|  | |
|  | |
|  | |
| 50 | 
             
                        if option == entry['correct_answer']:
         | 
| 51 | 
             
                            pdf.set_text_color(0, 128, 0)  # Green for correct
         | 
| 52 | 
            -
                            pdf.multi_cell(0, 8, f"{option}", border=1, fill=True)
         | 
| 53 | 
             
                        elif option == entry['selected']:
         | 
| 54 | 
             
                            pdf.set_text_color(255, 0, 0)  # Red for incorrect
         | 
| 55 | 
            -
                            pdf.multi_cell(0, 8, f"{option}", border=1, fill=True)
         | 
| 56 | 
             
                        else:
         | 
| 57 | 
             
                            pdf.set_text_color(0, 0, 0)  # Default color for others
         | 
| 58 | 
            -
             | 
|  | |
| 59 |  | 
| 60 | 
             
                    pdf.set_text_color(0, 0, 0)  # Reset color
         | 
| 61 | 
             
                    pdf.multi_cell(0, 8, f"Explanation: {entry['explanation']}", border=1, fill=True)
         | 
| @@ -121,9 +129,9 @@ if selected_module != st.session_state.current_module: | |
| 121 | 
             
            # Load the current module's question
         | 
| 122 | 
             
            current_question = st.session_state.questions[st.session_state.current_index]
         | 
| 123 |  | 
| 124 | 
            -
            # Display module title and description
         | 
| 125 | 
            -
            st. | 
| 126 | 
            -
            st. | 
| 127 |  | 
| 128 | 
             
            # Navigation and PDF report buttons
         | 
| 129 | 
             
            col1, col2, col3 = st.columns([1, 1, 2])
         | 
| @@ -134,7 +142,7 @@ with col2: | |
| 134 | 
             
                if st.button("➡️ Next", disabled=st.session_state.current_index >= len(st.session_state.questions) - 1):
         | 
| 135 | 
             
                    navigate_question("next")
         | 
| 136 | 
             
            with col3:
         | 
| 137 | 
            -
                if  | 
| 138 | 
             
                    pdf = generate_pdf_report()
         | 
| 139 | 
             
                    st.session_state.pdf_data = pdf  # Reset PDF cache
         | 
| 140 | 
             
                    st.download_button(
         | 
| @@ -144,19 +152,21 @@ with col3: | |
| 144 | 
             
                        mime="application/pdf"
         | 
| 145 | 
             
                    )
         | 
| 146 |  | 
| 147 | 
            -
            # Display the current question
         | 
| 148 | 
            -
            st.markdown(f"<span style='font-size:  | 
| 149 |  | 
| 150 | 
             
            # Create the form for the question
         | 
| 151 | 
             
            with st.form(key=f'question_form_{st.session_state.current_index}'):
         | 
|  | |
| 152 | 
             
                selected_answer = st.radio(
         | 
| 153 | 
             
                    "Choose an answer:", 
         | 
| 154 | 
            -
                    options=current_question['options'], 
         | 
| 155 | 
             
                    key=f"question_{st.session_state.current_index}_options",
         | 
| 156 | 
            -
                    index=None | 
|  | |
| 157 | 
             
                )
         | 
| 158 |  | 
| 159 | 
            -
                submit_button = st.form_submit_button(label="Submit/New")
         | 
| 160 |  | 
| 161 | 
             
            # Handle button state and answer submission
         | 
| 162 | 
             
            if submit_button:
         | 
| @@ -164,23 +174,25 @@ if submit_button: | |
| 164 | 
             
                    st.warning("Please select an option before submitting.", icon="⚠️")
         | 
| 165 | 
             
                else:
         | 
| 166 | 
             
                    # Process the answer
         | 
| 167 | 
            -
                     | 
|  | |
| 168 | 
             
                    current_question['answered'] = True
         | 
| 169 | 
             
                    st.session_state.module_question_count[selected_module] += 1
         | 
| 170 |  | 
| 171 | 
            -
                    if  | 
| 172 | 
             
                        st.session_state.correct_count += 1
         | 
| 173 | 
             
                        st.session_state.module_correct_count[selected_module] += 1
         | 
| 174 |  | 
| 175 | 
             
                    # Show correct/incorrect feedback, explanation, and step-by-step solution
         | 
| 176 | 
             
                    st.markdown("<div style='background-color:#f0f0f0; padding: 10px;'>", unsafe_allow_html=True)
         | 
| 177 | 
            -
                    for option in current_question['options']:
         | 
|  | |
| 178 | 
             
                        if option == current_question['correct_answer']:
         | 
| 179 | 
            -
                            st.markdown(f"<span style='color:green;'>{ | 
| 180 | 
            -
                        elif option ==  | 
| 181 | 
            -
                            st.markdown(f"<span style='color:red;'>{ | 
| 182 | 
             
                        else:
         | 
| 183 | 
            -
                            st.markdown(f"{ | 
| 184 |  | 
| 185 | 
             
                    st.write(f"**Explanation:** {current_question['explanation']}")
         | 
| 186 | 
             
                    st.write("**Step-by-Step Solution:**")
         | 
|  | |
| 43 | 
             
                        pdf.set_fill_color(245, 245, 245)  # Light gray
         | 
| 44 | 
             
                    else:
         | 
| 45 | 
             
                        pdf.set_fill_color(255, 255, 255)  # White
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    # Module Title
         | 
| 48 | 
            +
                    pdf.set_font("Arial", style='B', size=8)
         | 
| 49 | 
            +
                    pdf.multi_cell(0, 8, f"Module: {entry['module']}", border=1, fill=True)
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    # Question
         | 
| 52 | 
            +
                    pdf.set_font("Arial", style='B', size=8)
         | 
| 53 | 
             
                    pdf.multi_cell(0, 8, f"Q{i+1}: {entry['question']}", border=1, fill=True)
         | 
| 54 |  | 
| 55 | 
            +
                    # Options
         | 
| 56 | 
            +
                    pdf.set_font("Arial", size=8)
         | 
| 57 | 
            +
                    options = ['a', 'b', 'c', 'd']
         | 
| 58 | 
            +
                    for j, option in enumerate(entry['options']):
         | 
| 59 | 
             
                        if option == entry['correct_answer']:
         | 
| 60 | 
             
                            pdf.set_text_color(0, 128, 0)  # Green for correct
         | 
|  | |
| 61 | 
             
                        elif option == entry['selected']:
         | 
| 62 | 
             
                            pdf.set_text_color(255, 0, 0)  # Red for incorrect
         | 
|  | |
| 63 | 
             
                        else:
         | 
| 64 | 
             
                            pdf.set_text_color(0, 0, 0)  # Default color for others
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                        pdf.multi_cell(0, 8, f"{options[j]}. {option}", border=1, fill=True)
         | 
| 67 |  | 
| 68 | 
             
                    pdf.set_text_color(0, 0, 0)  # Reset color
         | 
| 69 | 
             
                    pdf.multi_cell(0, 8, f"Explanation: {entry['explanation']}", border=1, fill=True)
         | 
|  | |
| 129 | 
             
            # Load the current module's question
         | 
| 130 | 
             
            current_question = st.session_state.questions[st.session_state.current_index]
         | 
| 131 |  | 
| 132 | 
            +
            # Display module title and description with smaller font
         | 
| 133 | 
            +
            st.markdown(f"<span style='font-size: 12px;'><b>{modules[selected_module]['title']}</b></span>", unsafe_allow_html=True)
         | 
| 134 | 
            +
            st.markdown(f"<span style='font-size: 10px;'>{modules[selected_module]['description']}</span>", unsafe_allow_html=True)
         | 
| 135 |  | 
| 136 | 
             
            # Navigation and PDF report buttons
         | 
| 137 | 
             
            col1, col2, col3 = st.columns([1, 1, 2])
         | 
|  | |
| 142 | 
             
                if st.button("➡️ Next", disabled=st.session_state.current_index >= len(st.session_state.questions) - 1):
         | 
| 143 | 
             
                    navigate_question("next")
         | 
| 144 | 
             
            with col3:
         | 
| 145 | 
            +
                if any(q['answered'] for q in st.session_state.questions):
         | 
| 146 | 
             
                    pdf = generate_pdf_report()
         | 
| 147 | 
             
                    st.session_state.pdf_data = pdf  # Reset PDF cache
         | 
| 148 | 
             
                    st.download_button(
         | 
|  | |
| 152 | 
             
                        mime="application/pdf"
         | 
| 153 | 
             
                    )
         | 
| 154 |  | 
| 155 | 
            +
            # Display the current question with larger font
         | 
| 156 | 
            +
            st.markdown(f"<span style='font-size: 14px;'><b>Q{st.session_state.current_index + 1}: {current_question['question']}</b></span>", unsafe_allow_html=True)
         | 
| 157 |  | 
| 158 | 
             
            # Create the form for the question
         | 
| 159 | 
             
            with st.form(key=f'question_form_{st.session_state.current_index}'):
         | 
| 160 | 
            +
                options = ['a', 'b', 'c', 'd']
         | 
| 161 | 
             
                selected_answer = st.radio(
         | 
| 162 | 
             
                    "Choose an answer:", 
         | 
| 163 | 
            +
                    options=[f"{options[i]}. {opt}" for i, opt in enumerate(current_question['options'])], 
         | 
| 164 | 
             
                    key=f"question_{st.session_state.current_index}_options",
         | 
| 165 | 
            +
                    index=None if not current_question['answered'] else current_question['options'].index(current_question['selected']),
         | 
| 166 | 
            +
                    disabled=current_question['answered']
         | 
| 167 | 
             
                )
         | 
| 168 |  | 
| 169 | 
            +
                submit_button = st.form_submit_button(label="Submit/New", disabled=current_question['answered'])
         | 
| 170 |  | 
| 171 | 
             
            # Handle button state and answer submission
         | 
| 172 | 
             
            if submit_button:
         | 
|  | |
| 174 | 
             
                    st.warning("Please select an option before submitting.", icon="⚠️")
         | 
| 175 | 
             
                else:
         | 
| 176 | 
             
                    # Process the answer
         | 
| 177 | 
            +
                    selected_answer_text = selected_answer.split(". ", 1)[1]  # Extract the text part
         | 
| 178 | 
            +
                    current_question['selected'] = selected_answer_text
         | 
| 179 | 
             
                    current_question['answered'] = True
         | 
| 180 | 
             
                    st.session_state.module_question_count[selected_module] += 1
         | 
| 181 |  | 
| 182 | 
            +
                    if selected_answer_text == current_question['correct_answer']:
         | 
| 183 | 
             
                        st.session_state.correct_count += 1
         | 
| 184 | 
             
                        st.session_state.module_correct_count[selected_module] += 1
         | 
| 185 |  | 
| 186 | 
             
                    # Show correct/incorrect feedback, explanation, and step-by-step solution
         | 
| 187 | 
             
                    st.markdown("<div style='background-color:#f0f0f0; padding: 10px;'>", unsafe_allow_html=True)
         | 
| 188 | 
            +
                    for i, option in enumerate(current_question['options']):
         | 
| 189 | 
            +
                        option_text = f"{options[i]}. {option}"
         | 
| 190 | 
             
                        if option == current_question['correct_answer']:
         | 
| 191 | 
            +
                            st.markdown(f"<span style='color:green;'>{option_text} ✅</span>", unsafe_allow_html=True)
         | 
| 192 | 
            +
                        elif option == selected_answer_text:
         | 
| 193 | 
            +
                            st.markdown(f"<span style='color:red;'>{option_text} ❌</span>", unsafe_allow_html=True)
         | 
| 194 | 
             
                        else:
         | 
| 195 | 
            +
                            st.markdown(f"{option_text}", unsafe_allow_html=True)
         | 
| 196 |  | 
| 197 | 
             
                    st.write(f"**Explanation:** {current_question['explanation']}")
         | 
| 198 | 
             
                    st.write("**Step-by-Step Solution:**")
         | 
