انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: تاپیک آموزش زبان برنامه نویسی Ruby (حلقه های تکرار)  (دفعات بازدید: 10002 بار)

0 کاربر و 5 مهمان درحال مشاهده موضوع.

آفلاین shahryarjb

  • Newbie
  • *
  • ارسال: 3
  • جنسیت : پسر
    • طراحی سایت و سئو بهینه سازی
امیدوارم مفید واقع بشه:
contacts = [
  %w(shahryar tavakkoli 09213380329),
  %w(arash ebrahimi 09368094936)
]

included = contacts.find { |i| i[0] == 'shahryar' && i[1] == 'tavakkoli' }
if included
  puts "#{included[1]}\t#{included[2]}"
else
  puts "contact doesn't exist."
end


با تشکر از شما که این مطالب گزاشتید و مشکل من با این کار کلا حل شد ولی به صورت منطقی هنوز متوجه این نشدم که چرا شرط بنده کار نمی کنه !؟
یک بار پیدا می کنه ولی در نبود شرط کارایی نداره اگر مطالبی دارید که می تونید اون رو توضیح بدید ممنون می شم که بگید

بازم تشکر می کنم انجمن دکمه تشکر نداشت یا بنده ندیدم که بزنم
ممنون

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
برنامهٔ پایین دقیقاً برنامهٔ قبلی شماست‌ (با چندجا تغییر نام) و اگر اون رو اجرا کنید درست خروجی برنامهٔ پیش رو برمی‌گردونه. اول برنامه به «استاتمان» (اعلان) if می‌رسه شرط رو بررسی و خروجی puts رو قرار می‌ده و else نادیده گرفته‌ می‌شه. چون شرط *تنها* یکبار درست ارزیابی می‌شه پس حلقه از حرکت باز نمی‌ایسته و در تناقض‌های بعدی فقط پیغام هشدار رو چاپ می‌کنه.
phonebook = [
  %w(shahryar tavakkoli 09213380329),
  %w(arash ebrahimi 09368094936)
]

phonebook.each do |contact|
  if contact[0] == 'shahryar' && contact[1] == 'tavakkoli'
    puts "[#{contact[1]}][#{contact[2]}]"
  else
    puts "the contact you searched for doesn't exist in the phonebook."
  end
end
وارونهٔ برنامهٔ بالا:(حلقه رو بعد از یکبار اجرا و چاپ خروجی وامی‌ستونه)
phonebook = [
  %w(shahryar tavakkoli 09213380329),
  %w(arash ebrahimi 09368094936)
]

phonebook.each do |contact|
  if contact[0] == 'shahryar' && contact[1] == 'tavakkoli'
    puts "[#{contact[1]}][#{contact[2]}]"
  else
    break
  end
end
« آخرین ویرایش: 30 امرداد 1394، 02:15 ب‌ظ توسط n3vtelen »

آفلاین shahryarjb

  • Newbie
  • *
  • ارسال: 3
  • جنسیت : پسر
    • طراحی سایت و سئو بهینه سازی
درود خدمت شما تشکر از اینکه وقت می زارید و تازه واردیم متاسفانه شما رو اذیت هم می کنیم البته کد اولیتون که با متد find بود کلا کار می کنه و هیچ مشکلی هم نداره و اینجوری تو دستم اومد نباید تو حلقه each شرط بزاریم چون کامل تمام موارد رو چک می کنه

فقط موردی که هست اینکه کد دومی که وارونه دادید متاسفانه کار نمی کنه یا خروجی نشون نمی ده اگر شرط درست باشه یا نباشه
phonebook = [
  %w(shahryar tavakkoli 09213380329),
  %w(arash ebrahimi 09368094936)
]

phonebook.each do |contact|
  if contact[0] == 'shahryar' && contact[1] == 'tavakkoli'
    puts "[#{contact[1]}][#{contact[2]}]"
  else
    break
  end
end



فقط موردی که برای من به عنوان تازه وارد کمی درکش سخت هست اینکه وقتی یک حلقه با شرطش یکی شد چرا باز کلشو می گرده و اگر اینجوری باشه کمی فکر کنم تو آینده برای برنامه های بزرگ تر به مشکل خیلی بزرگی بخورم احتمالا در جایی اشتباه دارم فکر می کنم اگر از نظر منطقی هم کمی بیشتر توضیح بدید ممنون می شم

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
شما اگر از هر حلقه‌ای استفاده می‌کنید باید بعد از برآورده کردن خواسته‌تون اون رو اصطلاحاً بشکنید یا واستونید وگرنه حلقه به‌کار خودش ادامه می‌ده - کد دوم هم پیچیدگی خاصی نداره و به‌ خوبی اجرا می‌شه. اگر دوست دارید بیشتر در این باره گفتگو کنیم برای من ایمیل بفرستید.
« آخرین ویرایش: 30 امرداد 1394، 02:16 ب‌ظ توسط n3vtelen »