محمدرضا هلالی
3 سال پیش توسط محمدرضا هلالی مطرح شد
21 پاسخ

بازی حدس عدد

سلام من این پروژه مکتب خانه که در مورد بازی حدس عدد هست اصلا متوجه نمیشم اصلا چجوری باید برنامه جوری نوشت که کامپیوتر تشخیص بده عدد بزرگتره یا کوچکتر و این رو ادامه بده در ادامه تسک ها میزارم براتون
مراحل بازی شامل پنج تسک میشه
1) ابتدا کاربر یک عدد را در ذهن خود مشخص می کند و به کامپیوتر این عدد را نمی گوید (به عنوان ورودی به کامپیوتر عدد را نمی دهد)(عددی بین ۱ تا ۹۹)
2) برنامه یک عدد را حدس زده و چاپ می کند
3) عدد چاپ شده سه حالت را ایجاد می کند
4-یا از عددی که شما در ذهن خود دارید بزرگتر هست که شما با تایپ حرف k به برنامه می گویید که عدد در ذهن شما از عددی که برنامه چاپ کرده کوچکتر است و برنامه باید عدد دیگری را حدس زده و نمایش بدهد و ... (قابل ذکر است که در این حالت با تایپ k برنامه باید عدد کوچکتری از حدس قبلی خود حدس بزند تا بازی زودتر تمام شود)
5-و یا اینکه عدد چاپ شده از از عددی که شما در ذهن خود دارید کوچکتر هست که با تاپ حرف b به برنامه می گویید که عدد در ذهن شما از عددی که برنامه چاپ کرده بزرگتر است و برنامه باید عدد دیگری را حدس زده و نمایش بدهد و ... (قابل ذکر است که در این حالت با تایپ b برنامه باید عدد بزرگتری از حدس قبلی خود حدس بزند تا بازی زودتر تمام شود)
6- و یا اینکه عدد چاپ شده همان عددی است که در ذهن شما بود و با تایپ حرف d به برنامه می گویید که درست حدس زده و برنامه تمام می شود
برای نمونه کد می توانید از این لینک استفاده کنید اما باز من متوجه الگوریتم نشدم ، کد خودم رو دیگه نزاشتم که متن طولانی نشه ممنون میشم سورس کد اش بهم بگید یا اگه روش راحت تری هست مثلا استفاده از choice برای حدس زدن و این جور ترفندها :)


ثبت پرسش جدید
:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش آپدیت شد
0

کد @abdolrahman
را اگر از نخواهیم از مپ و فیلتر استفاده کنیم به صورت زیر مینویسیم:

import random
numbers   = list(range(1,100))
while True:
    guess = random.choice(numbers)
    print(guess)
    inp   = input('Enter k or b or d: ')
    if   inp == 'k':                              
       del numbers[numbers.index(guess):]       # del numbers >= guess
    elif inp == 'b':
         del numbers[:numbers.index(guess)+1]   # del numbers <= guess
    elif inp =='d':
        print('hooooo!! my guess is True!')
        break

حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
0

سلام
روش های زیادی برای حل این مسئله وجود داره، چیزی که اینجا مهمه یافتن روشی برای یافتن پاسخ با کمترین میزان حدس است.
می تونید از روش نیوتن رافسون در ریشه یابی یا حتی درون یابی خطی الگو بگیرید یعنی هر بار نصف بازه رو هدف قرار بدید حالا نصف رو چطور تشخیص می دید از راهنمایی کاربر که کلید k یا b رو انتخاب میکنه شما میتونید جهت کاوش رو تعیین کنید. این کار رو آنقدر ادامه می دید تا به جواب برسید.


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 3 سال پیش آپدیت شد
0

فرض کنید می خوایم این بازی رو باهم انجام بدیم. شما یک عدد توی ذهن تون هستش و من می خوام اون عدد رو حدس بزنم. مهمترین مسئله هم اینه که سریعتر به جواب برسم، چون نمی خوام وقت خودم رو هدر بدم :)


شما یک عدد توی ذهن تون هستش در بازه بین 1 تا 99.
حالا مثلا من می خوام حدس بزنم چه عددی هستش، خب بهترین راهکار اینه که حدسی رو بزنم که تکلیف نصف اعداد رو مشخص کنم، پس عدد وسطی در این بازه رو میگم، یعنی 99 + 1 تقسیم بر 2: میشه 50.
سه حالت می تونه پیش میاد:
1) عدد شما 50 باشه، پس به جواب درست رسیدم و تمام.
2) عدد شما از 50 بزرگتر هستش. پس نتیجه می گیریم که اعداد 1 تا 50 دیگه سوختن. در بازه بین 51 تا 99 باید دنبال عدد شما بگردم، دوباره چیکار می کنم؟ عددی رو انتخاب می کنم که وسط این بازه باشه یعنی بین 51 تا 99. بنابراین 99 + 50 + 1 تقسیم بر 2: میشه 75.

((50+1)+99)/2 = 75

3) عدد شما از 50 کوچکتر هستش. پس نتیجه می گیریم که اعداد 50 تا 99 دیگه سوختن. در بازه بین 1 تا 49 باید دنبال عدد شما بگردم، دوباره چیکار می کنم؟ عددی رو انتخاب می کنم که وسط این بازه باشه یعنی بین 1 تا 49. بنابراین:

(1+(50-1))/2 = 25

این دنباله رو انقدر ادامه میدم تا به حدس درست برسم.


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

سخت نیست که
یه روشی که یهویی به ذهنم رسید اینه که یه لیست از اعدادی بین ۹۹ بسازین ( با حلقه ) بعد بیاین یکی از اعداد داخل لیست رو بصورت رندوم بردارین و به کاربر نشون بدین. ببینین کاربر چه کارااکتری بهتون میده.
اگه بهتون k داد با تابع map همه اعدادی که بزرگتر از عددی که دادین هستن و همون عدد رو از لیست حذف کنید. و اگر b داد برعکس
به همین صورت پیش برین تا بهتون d بده و بالاخره بازی تموم میشه.

همون طور که گفتم یهو به ذهنم رسید و مطمئنا راه های بهتری هم هست
سر فرصت کدش رو مینویسم و میفرستم :)


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

ببخشید منظورم تابع filter بود


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0
import random
numbers = []
for i in range(1,100):
    numbers.append(i)
isTrue = False
while not isTrue:
    myRandom = random.choice(numbers)
    print(myRandom)
    inp = input('--->')
    if inp == 'k':
        numbers = list(filter(lambda a: a < myRandom, numbers))
    elif inp == 'b':
        numbers = list(filter(lambda a: a > myRandom, numbers))
    elif inp =='d':
        print('hooooo!! my guess is True!')
        break
    else:
        print('what is this command? idont know this')

اینم از کد :)
امیدوارم مفید بوده باشه :)
و البته از نظر دوستانی که قبل از این گفته بودن هم استفاده کنید که کو خیلی بهتر میشه


محمدرضا هلالی
تخصص : جونیور تازه کار
@mohammadrezah 3 سال پیش مطرح شد
0

سلام بازم متوجه نشدم این روشی که دوستان گفتن امتحان کردم و میخوام برنامه ای بنویسم که هر بار به جای filter که روش زمان بری هست از روشی که دوستمون @milad گفتن استفاده بشه خسته شدم اون قدر سرچ کردم چقدر کسل کننده بود این کدش آخه !

def computer_guess(num):
    low = 1
    high = 100
    guess = (low+high)//2
    while guess != num:
        guess = (low+high)//2
        print("The computer takes a guess...", guess)
        if guess > num:
            high = guess
        elif guess < num:
            low = guess + 1

    print("The computer guessed", guess, "and it was correct!")

def main():
    num = int(input("Enter a number: "))
    if num < 1 or num > 100:
        print("Must be in range [1, 100]")
    else:
        computer_guess(num)

if __name__ == '__main__':
    main()

عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

@mohammadrezah
این کد جواب سواله که مطرح کننده سوال داده یا خودتون نوشتید؟


mmj-sys
تخصص : داش متخصص چیه من پروفسورم .
@mmj.sys 3 سال پیش مطرح شد
0

@mohammadrezah
شما تو کودتون عدد کاربر رو میگیرید بنا بر این نیازی باز به کامند d نیست
و خب شما اصولا نباید عدد کاربر رو داشته باشید


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش مطرح شد
0

@abdolrahman
شما چند روز پیش گفتید که دوازده سالتونه
قطعا کسی که با لامدا کار کرده و برنامه نویسی تابعی رو بلده و این کدی که شما نوشتید و جاوا اسکریپت و اچ تی ام ال هم بلدید باید دو سالی برنامه نویسی کار کرده باشه
یعنی شما نه سالتون بوده برنامه نویسی و شروع کردید؟
نه سالگی فک کنم تازه به آدم جدول ضرب یاد میدن :)


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

@nimabandari27
الان حدود یک ساله که دارم کد میزنم :)


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش آپدیت شد
0

بازم با عقل جور درنمیاد سال چهارم ابتدایی تقسیم و یاد میدن :)


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

@nimabandari27
اخه سال قبل که چهارم نبودم شیشم بودم😅


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش مطرح شد
0

ینی جهشی خوندید؟


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش مطرح شد
0

به هرحال امیدوارم موفق باشید


عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

@nimabandari27
نه بابا من متولد 88 هستم و نیمه اولیم. الان نیمه دومیا باید برن ششم و نیمه اولیا برن هفتم
اگه حساب کنید که وقتی 6 سالم بود رفتم کلاس اول ، میفهمید چه خبره


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش آپدیت شد
0

کد @abdolrahman
را اگر از نخواهیم از مپ و فیلتر استفاده کنیم به صورت زیر مینویسیم:

import random
numbers   = list(range(1,100))
while True:
    guess = random.choice(numbers)
    print(guess)
    inp   = input('Enter k or b or d: ')
    if   inp == 'k':                              
       del numbers[numbers.index(guess):]       # del numbers >= guess
    elif inp == 'b':
         del numbers[:numbers.index(guess)+1]   # del numbers <= guess
    elif inp =='d':
        print('hooooo!! my guess is True!')
        break

عبدالرحمان کیانی
تخصص : Backend developer
@abdolrahman 3 سال پیش مطرح شد
0

@mohammadrezah
ولی واقعا چرا عدد رو از کاربر گرفتی؟😐


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش مطرح شد
0

دیگه روشی ساده تر و بهتر از این فک نمیکنم باشه


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 3 سال پیش آپدیت شد
0

@mohammadrezah
کجاش رو متوجه نشدین؟
چیزی که من نوشتم گویا بود؟ بله یا خیر؟
اگر بله، حالا بگید کدوم بخش کد رو مبهم هستش؟

بعلاوه اگر این مسئله مشکل هستش، روی مسائل ساده تر کار کنید.


:)
تخصص : اندروید - تازه کار
@ERR 3 سال پیش آپدیت شد
0

کد زیر هم از روش خودتون
ولی روش @abdolrahman بسیار بهتر

import random
low,high  = 1,100
while True:
      guess = random.choice(list(range(low,high)))
      print("The computer takes a guess...", guess)
      inp   = input('Enter k or b or d: ')
      if inp == 'k':
           high = guess
      elif inp == 'b':
           low = guess + 1
      elif inp == 'd':
           print('hooooo!! my guess is True!') 
           break

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام