درخت جانوران در زبان پایتون به چه معناست ؟
درخت جانوران در زبان پایتون به چه معناست ؟
درخت جانوران در زبان پایتون به چه معناست ؟
در این بخش، ما برنامۀ کوچکی را توسعه میدهیم که از یک درخـت بـراي نمـایش یـک اصـل علمی استفاده میکند. ابن برنامه براي ساختن درختی از پرسشها و اسامی حیوانات، با کاربر ارتباط متقـابلی دارد. در اینجا یک اجراي آزمایشی از این برنامه را میبینید:
Are you thinking of an animal? y
Is it a bird? n
What is the animals name? dog
What question would distinguish a dog from a bird? Can it fly
If the animal were dog the answer would be? n
Are you thinking of an animal? y
Can it fly? n
Is it a dog? n
What is the animals name? cat
What question would distinguish a cat from a dog? Does it bark
If the animal were cat the answer would be? n
Are you thinking of an animal? y
Can it fly? n
Does it bark? y
Is it a dog? y
I rule!
Are you thinking of an animal? n
در آغاز هر دور، برنامه از بالاي درخت شروع میکند و اولین سؤال را میپرسد. بسته بـه پاسـخ، برنامه به فرزند سمت راست یا چپ منتقل میشود و تا زمانی که به یک گـره بـرگ برسـد ایـن کـار را ادامه میدهد. در این نقطه برنامه یک حدس میزند. اگر حدس نادرست باشد، برنامـه نـام یـک حیـوان جدید و سؤالی که حدس نادرست را از حیوان جدید تشخیص میدهد، از کاربر میپرسد. سپس یک گره با پرسش جدید و حیوان جدید به درخت اضافه میکند. کد برنامه به اینصورت است:
def animal():
# start with a singleton
root = Tree(“bird”)
# loop until the user quits
while 1:
if not yes(“Are you thinking of an animal? “): break
# walk the tree
tree = root
while tree.getLeft() != None:
prompt = tree.getCargo() + “? ”
if yes(prompt):
tree = tree.getRight()
else:
tree = tree.getLeft()
# make a guess
guess = tree.getCargo()
prompt = “Is it a ” + guess + “? ”
if yes(prompt):
print “I rule!”
continue
# get new information
prompt = “What is the animal’s name? ”
animal = raw_input(prompt)
prompt = “What question would distinguish a %s from a %s? ”
question = raw_input(prompt % (animal,guess))
# add new information to the tree
tree.setCargo(question)
prompt = “If the animal were %s the answer would be? ”
if yes(prompt % animal):
tree.setLeft(Tree(guess))
tree.setRight(Tree(animal))
else:
tree.setLeft(Tree(animal))
tree.setRight(Tree(guess))
تابع yes یک کمککننده است. این تابع پیاپی را چاپ میکند و یک ورودي از کاربر میگیرد. اگر پاسخ با y یا Y آغاز شود تابع مقدار true را برمیگرداند:
def yes(ques):
from string import lower
ans = lower(raw_input(ques))
return (ans[0] == ‘y’)
شرط حلقۀ بیرونی 1 است که یعنی تا زمان اجراي دستور break ادامه مییابد. این دستور در صورتی رخ میدهد که کاربر به یک حیوان فکر نکند. حلقۀ while درونی با کمک گرفتن از پاسخهاي کاربر، درخت را از بالا به پایین میپیماید. هنگامیکه گره جدیدي به درخت اضافه میشـود، پرسـش جدیـد در بـار (cargo )جـایگزین میشود و دو فرزند شامل حیوان جدید و بار اولیه خواهند بود. یک از نارساییهاي برنامه این است که وقتی از آن خارج شوید، هر آنچه که با دقت در موردش فکر کرده بودید، فراموش میشود.
تمرین 20-4 :در مورد راههاي مختلف ذخیره کردن درخت دانستهها در یک فایل فکـر کنیـد. روشی را که فکر میکنید از همه سادهتر است، پیادهسازي کنید.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید