پرسش

چطور یک رشته را به بولین در پایتون تبدیل کنیم؟

Converting from a string to boolean in Python

چطور می‌تونم یه رشته (string) رو توی پایتون به بولین (Boolean) تبدیل کنم؟ مثلاً اگه یه رشته‌ای مثل "true" یا "false" دارم، چطور می‌تونم این‌ها رو به True یا False تبدیل کنم؟

1403/06/05
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

برای اینکه یه رشته رو به بولین تبدیل کنی، چند راه مختلف وجود داره، ولی یه راه معمول و کاربردی اینه که از توابع پایتون استفاده کنی. می‌تونی از شرط‌ها و یا یه دیکشنری استفاده کنی.

  1. استفاده از شرط‌ها (if-else):

تو می‌تونی خیلی ساده یه شرط بذاری که بررسی کنه اگه رشته "true" بود، برگردونه True و اگه "false" بود، برگردونه False. به این صورت:

def str_to_bool(s):
    if s.lower() == 'true':
       return True
    elif s.lower() == 'false':
       return False
    else:
       raise ValueError("Input string is not a valid boolean")

این کد داره چک می‌کنه که اگه رشته ورودی برابر "true" یا "false" بود، اون‌ها رو به True و False تبدیل کنه. اگر چیزی غیر از این باشه، خطا (Exception) می‌ده که ورودی معتبر نیست.

  1. استفاده از دیکشنری:

یه روش دیگه استفاده از دیکشنریه. می‌تونی رشته‌ات رو به عنوان کلید (key) دیکشنری استفاده کنی و مقدار مربوط به اون رو برگردونی:

def str_to_bool(s):
   bool_dict = {'true': True, 'false': False}
   try:
      return bool_dict[s.lower()]
   except KeyError:
      raise ValueError("Input string is not a valid boolean")

این کد هم مشابه قبلیه، با این تفاوت که از دیکشنری استفاده می‌کنه. توی این حالت، رشته به حروف کوچک تبدیل می‌شه و بعد به دنبال اون در دیکشنری می‌گرده. اگه پیدا نشه، باز هم یه خطا برمی‌گردونه.

  1. روش پیشرفته‌تر با استفاده از تابع distutils.util.strtobool:

اگه می‌خوای یه راه آماده‌تر و پیشرفته‌تر استفاده کنی، می‌تونی از تابع strtobool که توی ماژول distutils.util هست استفاده کنی. این تابع بعضی از رشته‌های دیگه مثل "yes" و "no" رو هم می‌شناسه.

from distutils.util import strtobool
def str_to_bool(s):
    return bool(strtobool(s))

این روش رشته ورودی رو به بولین تبدیل می‌کنه و به صورت کلی‌تر عمل می‌کنه.

پاسخ: 1403/06/05
آخرین آپدیت: 1403/08/06