GSMEthesis commited on
Commit
9a60abb
·
verified ·
1 Parent(s): e0656d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -78
app.py CHANGED
@@ -786,12 +786,13 @@ def custom_likert_slider(question_data):
786
  # مقدار نهایی را به صورت موقت در session_state ذخیره کن
787
  return default_value
788
 
 
789
  def save_likert_answers():
790
  """ذخیره مقادیر نهایی اسلایدرها در session_state پس از کلیک روی دکمه 'ادامه'"""
791
- # ذخیره تمامی مقادیر اسلایدرها در session_state
792
  for key in st.session_state.keys():
793
  if "distributive" in key or "procedural" in key or "informational" in key: # انتخاب کلیدهای مربوط به سوالات
794
  st.session_state[key] = st.session_state.get(key, None)
 
795
  def create_ride_map():
796
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
797
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
@@ -1282,94 +1283,85 @@ def random_likert_questions():
1282
  st.rerun()
1283
 
1284
 
1285
- def explanation_questions():
1286
- """نمایش سوالات تکمیلی به صورت مرحله‌ای با دکمه ادامه"""
1287
- st.markdown("### 📋 سوالات تکمیلی")
1288
-
1289
- # لیست سوالات به ترتیب نمایش
1290
- questions = [
1291
- {
1292
- "key": "trust",
1293
- "label": "آیا شما به تصمیم‌گیری‌هایی که توسط هوش مصنوعی انجام می‌شود اعتماد دارید؟",
1294
- "options": ["بله", "خیر", "نظری ندارم"],
1295
- "required": True
1296
- },
1297
- {
1298
- "key": "pricing_method",
1299
- "label": "به نظر شما پلتفرم قیمت را چگونه تعیین می‌کند؟",
1300
- "options": [
1301
- "به صورت دستی توسط تیم پلتفرم",
1302
- "به صورت خودکار توسط هوش مصنوعی و الگوریتم‌ها",
1303
- "ترکیبی از هر دو روش",
1304
- "نظری ندارم"
1305
- ],
1306
- "required": True
1307
- },
1308
  {
1309
- "key": "price_increase",
1310
- "label": "آیا به نظر شما در این سفر افزایش قیمت نسبت به حالت طبیعی وجود داشته است؟",
1311
- "options": ["بله", "خیر", "مطمئن نیستم"],
1312
- "required": True
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1313
  },
1314
  {
1315
- "key": "explanation_received",
1316
- "label": "آیا برای قیمت پیشنهادی این سفر، توضیحی به شما ارائه شد؟",
1317
- "options": ["بله", "خیر"],
1318
- "required": True
 
 
 
1319
  },
1320
  {
1321
- "key": "explanation_type",
1322
- "label": "اگر توضیحی دریافت کردید، این توضیح بیشتر به کدام مورد شباهت داشت؟",
1323
- "options": [
1324
- "بر اساس عواملی که ��ر قیمت‌گذاری لحاظ شدهاند",
1325
- "شامل سناریوهای جایگزین که می‌توانستند قیمت متفاوتی ایجاد کنند",
1326
- وضیحی دریافت نکردم"
1327
- ],
1328
- "required": False,
1329
- "condition": lambda: st.session_state.get("explanation_received") == "بله"
1330
  }
1331
  ]
1332
 
1333
- # مقداردهی اولیه step اگر وجود ندارد
1334
- if "explanation_step" not in st.session_state:
1335
- st.session_state.explanation_step = 0
1336
-
1337
- # اگر همه سوالات پاسخ داده شده‌اند، به صفحه بعدی برو
1338
- if st.session_state.explanation_step >= len(questions):
1339
- st.session_state.current_page = "demographic"
1340
- st.rerun()
1341
- return
1342
-
1343
- # دریافت سوال جاری
1344
- current_q = questions[st.session_state.explanation_step]
1345
-
1346
- # بررسی شرط نمایش برای سوالات اختیاری
1347
- if "condition" in current_q and not current_q["condition"]():
1348
- st.session_state[current_q["key"]] = "N/A"
1349
- st.session_state.explanation_step += 1
1350
- st.rerun()
1351
- return
1352
 
1353
- # نمایش سوال جاری
1354
- answer = st.radio(
1355
- current_q["label"],
1356
- current_q["options"],
1357
- index=None,
1358
- key=f"explanation_q_{current_q['key']}"
1359
- )
1360
 
1361
- # دکمه ادامه
1362
- if st.button("ادامه", key=f"continue_{current_q['key']}"):
1363
- if answer is None and current_q["required"]:
1364
- st.warning("لطفاً یک گزینه را انتخاب کنید")
 
 
 
 
 
 
 
1365
  else:
1366
- # ذخیره پاسخ
1367
- st.session_state[current_q["key"]] = answer if answer is not None else "N/A"
1368
-
1369
- # افزایش شماره مرحله
1370
- st.session_state.explanation_step += 1
1371
-
1372
- # رفرش صفحه برای نمایش سوال بعدی
1373
  st.rerun()
1374
 
1375
  def demographic_form():
 
786
  # مقدار نهایی را به صورت موقت در session_state ذخیره کن
787
  return default_value
788
 
789
+
790
  def save_likert_answers():
791
  """ذخیره مقادیر نهایی اسلایدرها در session_state پس از کلیک روی دکمه 'ادامه'"""
 
792
  for key in st.session_state.keys():
793
  if "distributive" in key or "procedural" in key or "informational" in key: # انتخاب کلیدهای مربوط به سوالات
794
  st.session_state[key] = st.session_state.get(key, None)
795
+
796
  def create_ride_map():
797
  """ایجاد نقشه سفر با Folium - نسخه اصلاح شده با مناطق عمومی"""
798
  # نقاط تقریبی برای مناطق عمومی جنوب و غرب تهران
 
1283
  st.rerun()
1284
 
1285
 
1286
+ def random_likert_questions():
1287
+ """نمایش سوالات لیکرت به ترتیب مشخص با اسلایدر سفارشی"""
1288
+ # تعریف گروه‌های سوالات با لیبل‌های سفارشی
1289
+ question_groups = [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1290
  {
1291
+ "title": "عدالت توزیعی",
1292
+ "key": "distributive",
1293
+ "questions": [
1294
+ {
1295
+ "key": "distributive_1",
1296
+ "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1297
+ "scale": 7,
1298
+ "labels": ["کاملاً نامنصفانه", "کاملاً منصفانه"] # لیبل‌های سفارشی برای این سوال
1299
+ },
1300
+ {
1301
+ "key": "distributive_2",
1302
+ "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1303
+ "scale": 7,
1304
+ "labels": ["کاملاً غیرمعقول", "کاملاً معقول"]
1305
+ },
1306
+ {
1307
+ "key": "distributive_3",
1308
+ "question": "قیمتی که به شما ارائه شد، چگونه بود؟",
1309
+ "scale": 7,
1310
+ "labels": ["کاملاً غیرقابل قبول", "کاملاً قابل قبول"]
1311
+ }
1312
+ ]
1313
  },
1314
  {
1315
+ "title": "عدالت رویه‌ای",
1316
+ "key": "procedural",
1317
+ "questions": [
1318
+ {"key": "procedural_1", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم قابل قبول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1319
+ {"key": "procedural_2", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم منصفانه است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]},
1320
+ {"key": "procedural_3", "question": ".فرآیند و رویه قیمت‌گذاری پلتفرم معقول است", "scale": 7, "labels": ["کاملاً مخالفم", "کاملاً موافقم"]}
1321
+ ]
1322
  },
1323
  {
1324
+ "title": "عدالت اطلاعاتی",
1325
+ "key": "informational",
1326
+ "questions": [
1327
+ {"key": "informational_1", "question": "تا چه حد رهیار دلایل تعیین قیمت را به صورت صادقانه توضیح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1328
+ {"key": "informational_2", "question": "تا چه حد رهیار عوامل مؤثر بر تعیین قیمت را به طور کامل شرح داد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1329
+ {"key": "informational_3", "question": "تا چه حد دلایل ارائه‌شده توسط رهیار برای تعیین قیمت منطقی و قابل قبول بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1330
+ {"key": "informational_4", "question": "تا چه حد توضیحات درباره تعیین قیمت بلافاصله و در زمان مناسب نمایش داده شد؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]},
1331
+ {"key": "informational_5", "question": "تا چه حد توضیحات رهیار درباره تعیین قیمت، متناسب با شرایط سفر شما بود؟", "scale": 7, "labels": ["هیچ", "خیلی زیاد"]}
1332
+ ]
1333
  }
1334
  ]
1335
 
1336
+ # مقداردهی اولیه
1337
+ if 'current_likert_group' not in st.session_state:
1338
+ st.session_state.current_likert_group = 0
1339
+
1340
+ # دریافت گروه جاری
1341
+ current_group = question_groups[st.session_state.current_likert_group]
1342
+
1343
+ # نمایش عنوان گروه
1344
+ st.markdown(f"<h3>{current_group['title']}</h3>")
 
 
 
 
 
 
 
 
 
 
1345
 
1346
+ # نمایش تمام سوالات این گروه در یک صفحه
1347
+ for question in current_group['questions']:
1348
+ # دریافت مقدار اسلایدر و ذخیره آن
1349
+ answer = custom_likert_slider(question)
1350
+ st.session_state[question["key"]] = answer # ذخیره مقدار اسلایدر در session_state
 
 
1351
 
1352
+ # دکمه ادامه/اتمام
1353
+ button_label = "ادامه به گروه بعدی" if st.session_state.current_likert_group < len(question_groups)-1 else "ادامه به توضیحات"
1354
+
1355
+ if st.button(button_label):
1356
+ # ذخیره مقادیر اسلایدرها پس از کلیک روی دکمه "ادامه"
1357
+ save_likert_answers()
1358
+
1359
+ # رفتن به گروه بعدی یا صفحه توضیحات
1360
+ if st.session_state.current_likert_group < len(question_groups) - 1:
1361
+ st.session_state.current_likert_group += 1
1362
+ st.rerun()
1363
  else:
1364
+ st.session_state.current_page = "explanation_questions"
 
 
 
 
 
 
1365
  st.rerun()
1366
 
1367
  def demographic_form():