GSMEthesis commited on
Commit
504d5a1
·
verified ·
1 Parent(s): 45baf36

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -55
app.py CHANGED
@@ -3,6 +3,7 @@ import folium
3
  from streamlit_folium import folium_static
4
  import streamlit.components.v1 as components
5
  from datetime import datetime
 
6
  import gspread
7
  from google.oauth2.service_account import Credentials
8
  import os
@@ -211,6 +212,17 @@ html, body, .stApp {
211
  .rahyar-subtitle {
212
  color: var(--primary) !important;
213
  margin: 0 !important;
 
 
 
 
 
 
 
 
 
 
 
214
  font-size: 16px !important;
215
  }
216
 
@@ -833,8 +845,8 @@ def enhanced_likert_scale(question_data):
833
 
834
  <div>
835
  <div class="likert-labels">
836
- <span>{labels[1]}</span>
837
  <span>{labels[0]}</span>
 
838
  </div>
839
  <div class="likert-line">
840
  """
@@ -842,7 +854,7 @@ def enhanced_likert_scale(question_data):
842
  # اضافه کردن نقاط فقط برای مقادیر 1 تا scale
843
  current_value = st.session_state.get(key, 0)
844
  for i in range(1, scale+1):
845
- value = scale-i+1 # مقادیر از 1 تا scale
846
  active_class = "active" if current_value == value else ""
847
  scale_html += f"<div class='likert-dot {active_class}'></div>"
848
 
@@ -880,6 +892,7 @@ def enhanced_likert_scale(question_data):
880
 
881
  return st.session_state.get(key)
882
 
 
883
  def create_ride_map():
884
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
885
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
@@ -934,7 +947,7 @@ def show_explanation(exp_type):
934
  "شرایط جوی: هوای بارانی (++)"
935
  ],
936
  "counterfactual": [
937
- "اگر این سفر را 1 ساعت دیرتر درخواست کنید، به دلیل سطح تقاضای کمتر، رانندگان فعال بیش‌تر، زمان بهتر روز و شرایط جوی بهتر، احتمالاً قیمت حدوداً 40٪ کمتر (120 هزار تومان) خواهد بود.",
938
  ]
939
  }
940
 
@@ -1052,15 +1065,13 @@ def welcome_page():
1052
  style="width: 200px; height: auto; margin-bottom: 10px;">
1053
  </div>
1054
  <div style="flex: 1;">
1055
- <h3>به پرسشنامه ما خوش آمدید 🌟</h3>
1056
  <p>با سلام و احترام،</p>
1057
- <p>از شما دعوت می‌شود در یک پژوهش دانشگاهی شرکت کنید که در قالب پایان‌نامه کارشناسی‌ارشد در دانشگاه صنعتی شریف انجام می‌شود. این تحقیق به بررسی ادراک مصرف‌کنندگان از انصاف در قیمت‌گذاریِ اپلیکیشن‌های تاکسی اینترنتی (مانند اسنپ و تپسی 🚖) می‌پردازد.</p>
1058
- <p>شرکت در این مطالعه کاملاً داوطلبانه است؛ پاسخ دقیقی برای سوالات وجود ندارد و پاسخ‌های صادقانه شما فقط برای پیش‌برد اهداف علمی تحلیل خواهد شد.</p>
1059
- <p>پر کردن این پرسشنامه کمتر از 5 دقیقه وقت شما را می‌گیرد و پاسخ‌های ارزشمند شما کمک شایانی به ارتقای دانش علمی خواهد کرد. پیشاپیش از مشارکت شما صمیمانه سپاسگزاریم 🙏</p>
1060
  <p>برای آغاز پرسشنامه، لطفاً روی دکمه زیر کلیک کنید 👇🏻</p>
1061
  </div>
1062
  </div>
1063
- </div>
1064
  """, unsafe_allow_html=True)
1065
 
1066
  if st.button("شروع پرسشنامه", key="start_btn", type="primary"):
@@ -1086,16 +1097,18 @@ def scenario_explanation():
1086
  """, unsafe_allow_html=True)
1087
 
1088
  st.markdown("### سناریوی تحقیق")
1089
-
 
 
1090
  st.markdown("""
1091
  <div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
1092
- <p>فرض کنید در روزی از روزها شما مهمان یکی از اقوامتان در جنوب تهران هستید. قصد دارید برای خریدی به غرب تهران بروید...</p>
1093
- <p> گوشی‌تان را از کیف درمی‌آورید. چشم‌تان به آیکون جدیدی می‌افتد؛ اپلیکیشنی به نام <strong>رهیار</strong> — نه اسنپ است و نه تپسی، اما خیلی شبیه آن‌هاست. رنگ بنفش جذابی دارد و شعارش توی ذهنتان می‌نشیند:
1094
- <br>«همراه سفرهای شما، راهی مطمئن، راهی روشن، رهیار»</p>
1095
- <p>با کنجکاوی اپ را باز می‌کنید. ظاهر ساده و روانی دارد. فعلاً فقط گزینه‌ی «سفر معمولی» فعال است. خبری از امکانات اضافه مثل «سفر دو‌مسیـره»، «توقف در مسیر»، «اکوپلاس» یا «موتورسوار» نیست — اما خب، رهیار تازه‌کار است و قرار است توسعه پیدا کند!.</p>
1096
  <p>مبدأ و مقصد را انتخاب می‌کنید و با قیمت <strong>200 هزار تومان</strong> مواجه می‌شوید.</p>
1097
  <p>با کلیک روی «ادامه»، اطلاعات سفر را مشاهده کنید 👇🏻</p>
1098
  </div>
 
1099
  """, unsafe_allow_html=True)
1100
 
1101
  if st.button("ادامه", key="continue_btn", type="primary"):
@@ -1119,9 +1132,9 @@ def map_view():
1119
 
1120
  st.markdown("""
1121
  <div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
1122
- <p>مسیر سفر شما به صورت حدودی، از جنوب به غرب تهران است.</p>
1123
- <p> با توجه به اطلاعاتی که بعد از نقشه دریافت می‌کنید، تصمیم بگیرید که سفر را می‌پذیرید را رد می‌کنید.</p>
1124
- <p>سپس با کلیک بر دکمه مربوطه به بخش بعدی بروید.</p>
1125
  </div>
1126
  """, unsafe_allow_html=True)
1127
  st.markdown("### مسیر سفر شما")
@@ -1169,7 +1182,7 @@ def attention_check1():
1169
  st.markdown("### سوال")
1170
 
1171
  answer = st.radio(
1172
- "رنگ لوگو و تم رنگی اپلیکیشن رهیار چگونه بود؟",
1173
  ["قرمز", "سبز", "بنفش", "آبی", "فراموش کردم"],
1174
  index=None,
1175
  key="att1_radio"
@@ -1214,13 +1227,21 @@ def attention_check1():
1214
  st.rerun()
1215
  else:
1216
  st.warning("لطفاً یک گزینه را انتخاب کنید")
1217
-
1218
  def random_likert_questions():
1219
  """نمایش سوالات لیکرت با دکمه‌های دایره‌ای"""
1220
  question_groups = [
1221
  {
1222
- "title": "سری اول سوالات",
1223
  "key": "distributive",
 
 
 
 
 
 
 
 
 
1224
  "questions": [
1225
  {
1226
  "key": "distributive_1",
@@ -1243,24 +1264,42 @@ def random_likert_questions():
1243
  ]
1244
  },
1245
  {
1246
- "title": "سری دوم سوالات",
1247
  "key": "attention_check",
1248
  "questions": [
1249
- {"key": "attention_check2", "question": "تا چه مقدار با دقت به سوالات پاسخ میدهید؟", "scale": 7, "labels": ["خیلی کم", "خیلی زیاد"]}
1250
  ]
1251
  },
1252
  {
1253
- "title": "سری سوم سوالات",
1254
  "key": "procedural",
 
 
 
 
 
 
 
 
 
1255
  "questions": [
1256
- {"key": "procedural_1", "question": "فرآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1257
- {"key": "procedural_2", "question": "فرآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1258
- {"key": "procedural_3", "question": "فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1259
  ]
1260
  },
1261
  {
1262
- "title": "سری چهارم سوالات",
1263
  "key": "informational",
 
 
 
 
 
 
 
 
 
1264
  "questions": [
1265
  {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1266
  {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
@@ -1270,41 +1309,33 @@ def random_likert_questions():
1270
  ]
1271
  }
1272
  ]
1273
-
1274
- # مقداردهی اولیه
1275
  if 'current_likert_group' not in st.session_state:
1276
  st.session_state.current_likert_group = 0
1277
 
1278
  current_group = question_groups[st.session_state.current_likert_group]
1279
 
 
1280
  st.markdown(f"## {current_group['title']}")
1281
- st.markdown("""
1282
- <div class="guide-text" style="
1283
- display: flex;
1284
- flex-direction: column;
1285
- align-items: center;
1286
- background-color: #f0f2f6;
1287
- border-radius: 10px;
1288
- padding: 15px;
1289
- gap: 10px;
1290
- font-size: 5px !important;
1291
- ">
1292
- <div style="flex: 1; font-size: inherit !important;">
1293
- <h3 style="font-size: 12px !important;">راهنمای پاسخ:</h3>
1294
- <p style="font-size: inherit !important;">
1295
- برای پاسخ به سوالات، با هفت نقطه بین دو سر طیف مواجه خواهید شد.<br>
1296
- - سمت چپ: کمترین مقدار<br>
1297
- - سمت راست: بیشترین مقدار
1298
- </p>
1299
- <p style="font-size: inherit !important;">
1300
- زیر طیف جعبه‌ای وجود دارد که مقدار پیش‌فرض آن صفر است. با زدن دکمه مثبت و منفی کنار جعبه، این عدد را بین یک تا هفت تنظیم کنید.
1301
- </p>
1302
- <p style="font-size: inherit !important;">
1303
- اگر از پاسخ‌هایتان مطمئن هستید، روی دکمه «ادامه» کلیک کنید.
1304
- </p>
1305
- </div>
1306
- </div>
1307
- """, unsafe_allow_html=True)
1308
 
1309
  # نمایش تمام سوالات این گروه
1310
  for question in current_group['questions']:
@@ -1337,6 +1368,7 @@ def random_likert_questions():
1337
  st.session_state.current_page = "explanation_questions"
1338
  st.rerun()
1339
 
 
1340
  def explanation_questions():
1341
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1342
  st.markdown("### 📋 سوالات تکمیلی")
 
3
  from streamlit_folium import folium_static
4
  import streamlit.components.v1 as components
5
  from datetime import datetime
6
+ import textwrap
7
  import gspread
8
  from google.oauth2.service_account import Credentials
9
  import os
 
212
  .rahyar-subtitle {
213
  color: var(--primary) !important;
214
  margin: 0 !important;
215
+ font-size: 12px !important;
216
+ }
217
+ .warning {
218
+ color: black !important;
219
+ margin: 0 !important;
220
+ font-weight: bold !important;
221
+ font-size: 16px !important;
222
+ }
223
+ .little {
224
+ color: black !important;
225
+ margin: 0 !important;
226
  font-size: 16px !important;
227
  }
228
 
 
845
 
846
  <div>
847
  <div class="likert-labels">
 
848
  <span>{labels[0]}</span>
849
+ <span>{labels[1]}</span>
850
  </div>
851
  <div class="likert-line">
852
  """
 
854
  # اضافه کردن نقاط فقط برای مقادیر 1 تا scale
855
  current_value = st.session_state.get(key, 0)
856
  for i in range(1, scale+1):
857
+ value = i # مقادیر از 1 تا scale
858
  active_class = "active" if current_value == value else ""
859
  scale_html += f"<div class='likert-dot {active_class}'></div>"
860
 
 
892
 
893
  return st.session_state.get(key)
894
 
895
+
896
  def create_ride_map():
897
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
898
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
 
947
  "شرایط جوی: هوای بارانی (++)"
948
  ],
949
  "counterfactual": [
950
+ "اگرعجله ندارید و درخواست خود را 1 ساعت بعد تکرار کنید، احتمالاً تقاضا کمترخواهد بود، رانندگان فعال در اطراف شما بیش‌تر خواهد بود، زمان روز و شرایط جوی بهتر خواهد بود؛ پس قیمت حدوداً 40٪ کمتر (120 هزار تومان) خواهد بود.",
951
  ]
952
  }
953
 
 
1065
  style="width: 200px; height: auto; margin-bottom: 10px;">
1066
  </div>
1067
  <div style="flex: 1;">
 
1068
  <p>با سلام و احترام،</p>
1069
+ <p>این پرسشنامه بخشی از یک پژوهش دانشگاهی است که در قالب پایان‌نامه کارشناسی‌ارشد در دانشگاه صنعتی شریف انجام می‌شود. این تحقیق به <strong> بررسی ادراک مصرف‌کنندگان از انصاف در قیمت‌گذاریِ اپلیکیشن‌های تاکسی اینترنتی (مانند اسنپ و تپسی 🚖) </strong> می‌پردازد.</p>
1070
+ <p> پر کردن این پرسشنامه کمتر از 5 دقیقه وقت شما را می‌گیرد. شرکت در این مطالعه کاملاً داوطلبانه است؛ پاسخ درست یا غلطی برای سوالات وجود ندارد و نظرات شخصی شما است که ارزشمند است و برای پیش‌برد اهداف علمی تحلیل خواهند شد. </p>
1071
+ <p> پاسخ‌های شما کمک شایانی به ما، به عنوان یک تیم تحقیقاتی در دانشگاه صنعتی شریف، برای ارتقای دانش علمی خواهد کرد. پیشاپیش از مشارکت شما صمیمانه سپاسگزاریم 🙏</p>
1072
  <p>برای آغاز پرسشنامه، لطفاً روی دکمه زیر کلیک کنید 👇🏻</p>
1073
  </div>
1074
  </div>
 
1075
  """, unsafe_allow_html=True)
1076
 
1077
  if st.button("شروع پرسشنامه", key="start_btn", type="primary"):
 
1097
  """, unsafe_allow_html=True)
1098
 
1099
  st.markdown("### سناریوی تحقیق")
1100
+ st.markdown("""
1101
+ <p class="warning">در این بخش با یک سناریو فرضی مواجه خواهید شد. خواهشمندیم صفحه را به پایین بکشید، سناریو را به دقت مطالعه فرمایید، خودتان را در موقعیت تصور کنید و طبق آن پرسشنامه را ادامه دهید.</p>
1102
+ """, unsafe_allow_html=True)
1103
  st.markdown("""
1104
  <div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
1105
+ <p>فرض کنید در روزی از روزها بعد از اتمام ساعت کاری، شما قصد دارید از محل کارتان در جنوب تهران، برای انجام خریدی به غرب تهران بروید. شما امروز همراه خود ماشین به محل کار نبردید. </p>
1106
+ <p> گوشی‌تان را از کیف درمی‌آورید. چشم‌تان به آیکون اپلیکیشنی که اخیراً نصب کرده بودید اما تا به حال بررسی نکرده بودید، می‌افتد؛ اپلیکیشنی به نام <strong>رهیار</strong> — نه اسنپ است و نه تپسی، اما خیلی شبیه آن‌ها و رقیب جدید آن‌هاست. به تازگی در تهران خدمات ارائه می‌دهد. رنگ بنفش جذابی دارد. تصمیم می‌گیرید این بار این اپلیکیشن جدید را برای سفر خود امتحان کنید.</p>
1107
+ <p>با کنجکاوی اپ را باز می‌کنید. ظاهر ساده و روانی دارد. قبلاً شنیده بودید که در رهیار فعلاً فقط گزینهی «سفر معمولی» فعال است. اما خب، رهیار تازه‌کار است و قرار است توسعه پیدا کند!</p>
 
1108
  <p>مبدأ و مقصد را انتخاب می‌کنید و با قیمت <strong>200 هزار تومان</strong> مواجه می‌شوید.</p>
1109
  <p>با کلیک روی «ادامه»، اطلاعات سفر را مشاهده کنید 👇🏻</p>
1110
  </div>
1111
+
1112
  """, unsafe_allow_html=True)
1113
 
1114
  if st.button("ادامه", key="continue_btn", type="primary"):
 
1132
 
1133
  st.markdown("""
1134
  <div style="background-color: #f8f9fa; padding: 15px; border-radius: 10px;">
1135
+ <p class="warning">مسیر سفر شما به صورت حدودی، از جنوب به غرب تهران است.</p>
1136
+ <p class="warning"> لطفاً صفحه را به پایین بکشید. سپس با توجه به اطلاعاتی که بعد از نقشه دریافت می‌کنید، تصمیم بگیرید که سفر را می‌پذیرید را رد می‌کنید.</p>
1137
+ <p class="warning">سپس با کلیک بر دکمه مربوطه به بخش بعدی بروید.</p>
1138
  </div>
1139
  """, unsafe_allow_html=True)
1140
  st.markdown("### مسیر سفر شما")
 
1182
  st.markdown("### سوال")
1183
 
1184
  answer = st.radio(
1185
+ "رنگ لوگو اپلیکیشن رهیار چگونه بود؟",
1186
  ["قرمز", "سبز", "بنفش", "آبی", "فراموش کردم"],
1187
  index=None,
1188
  key="att1_radio"
 
1227
  st.rerun()
1228
  else:
1229
  st.warning("لطفاً یک گزینه را انتخاب کنید")
 
1230
  def random_likert_questions():
1231
  """نمایش سوالات لیکرت با دکمه‌های دایره‌ای"""
1232
  question_groups = [
1233
  {
1234
+ "title": "سری اول سؤالات",
1235
  "key": "distributive",
1236
+ "guide": textwrap.dedent("""
1237
+ <h4 class="warning">راهنمای پاسخ به سری اول:</h4>
1238
+ <p class="little">
1239
+ در این بخش، با یک سری سؤال درمورد قیمتی که در صفحه اطلاعات سفر و در زیر نقشه دیدید، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
1240
+ - سمت چپ (۱): کاملاً نامنصفانه، غیرمعقول یا غیرقابل قبول<br>
1241
+ - سمت راست (۷): کاملاً منصفانه، معقول یا قابل قبول<br>
1242
+ لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را با زدن دکمه + و – جعبه زیر طیف انتخاب نمایید. بدین گونه شما انتخاب خواهید کرد که چقدر قیمت به نظرتان منصفانه بوده. چقدر با توجه به شرایط منطقی بوده و چقدر قابل قبول بوده.
1243
+ </p>
1244
+ """),
1245
  "questions": [
1246
  {
1247
  "key": "distributive_1",
 
1264
  ]
1265
  },
1266
  {
1267
+ "title": "فقط پاسخ دهید.",
1268
  "key": "attention_check",
1269
  "questions": [
1270
+ {"key": "attention_check2", "question": "لطفاً خیلی زیاد دد 7) را انتخاب کنید.", "scale": 7, "labels": ["خیلی کم", "خیلی زیاد"]}
1271
  ]
1272
  },
1273
  {
1274
+ "title": "سری دوم سؤالات",
1275
  "key": "procedural",
1276
+ "guide": textwrap.dedent("""
1277
+ <h4 class="warning">راهنمای پاسخ به سری دوم:</h4>
1278
+ <p class="little">
1279
+ در این بخش با یک سری جمله خبری درمورد فرآیند و رویه قیمت‌گذاری رهیار مواجه خواهید شد. در زیر جملات یک طیف قرار دارد:<br>
1280
+ - سمت چپ (۱): کاملاً مخالفم<br>
1281
+ - سمت راست (۷): کاملاً موافقم<br>
1282
+ لطفاً نظر خود را با انتخاب عدد مناسب بیان کنید.
1283
+ </p>
1284
+ """),
1285
  "questions": [
1286
+ {"key": "procedural_1", "question": "فرآیند و رویه قیمت‌گذاری رهیار قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1287
+ {"key": "procedural_2", "question": "فرآیند و رویه قیمت‌گذاری رهیار منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1288
+ {"key": "procedural_3", "question": "فرآیند و رویه قیمت‌گذاری رهیار معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1289
  ]
1290
  },
1291
  {
1292
+ "title": "سری سوم سؤالات",
1293
  "key": "informational",
1294
+ "guide": textwrap.dedent("""
1295
+ <h4 class="warning">راهنمای پاسخ به سری سوم:</h4>
1296
+ <p class="little">
1297
+ در این بخش، با یک سری سؤال درمورد توضیحاتی که در صفحه اطلاعات سفر و در زیر نقشه درمورد قیمت به شما ارائه شد، مواجه خواهید شد. در زیر سوالات طیفی قرار دارد: <br>
1298
+ - سمت چپ (۱): هیچ<br>
1299
+ - سمت راست (۷): خیلی زیاد<br>
1300
+ لطفاً با دقت عدد مناسب را بین ۱ تا ۷ را با زدن دکمه + و – جعبه زیر طیف انتخاب نمایید. بدین گونه شما انتخاب خواهید کرد که از هیچ مقدار تا خیلی زیاد به چه مقدار به شما توضیح با ویژگی‌های سوال ارائه شده است.
1301
+ </p>
1302
+ """),
1303
  "questions": [
1304
  {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1305
  {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
 
1309
  ]
1310
  }
1311
  ]
1312
+ # مقداردهی اولیه
 
1313
  if 'current_likert_group' not in st.session_state:
1314
  st.session_state.current_likert_group = 0
1315
 
1316
  current_group = question_groups[st.session_state.current_likert_group]
1317
 
1318
+
1319
  st.markdown(f"## {current_group['title']}")
1320
+
1321
+ if 'guide' in current_group:
1322
+ # ترکیب CSS و HTML با جایگذاری امن
1323
+ guide_html = textwrap.dedent("""
1324
+ <div class="guide-text" style="
1325
+ display: flex;
1326
+ flex-direction: column;
1327
+ background-color: #f0f2f6;
1328
+ border-radius: 10px;
1329
+ padding: 15px;
1330
+ gap: 10px;
1331
+ direction: rtl;
1332
+ text-align: justify;
1333
+ ">
1334
+ {}
1335
+ </div>
1336
+ """).format(current_group['guide'])
1337
+
1338
+ st.markdown(guide_html, unsafe_allow_html=True)
 
 
 
 
 
 
 
 
1339
 
1340
  # نمایش تمام سوالات این گروه
1341
  for question in current_group['questions']:
 
1368
  st.session_state.current_page = "explanation_questions"
1369
  st.rerun()
1370
 
1371
+
1372
  def explanation_questions():
1373
  """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1374
  st.markdown("### 📋 سوالات تکمیلی")