راکت
حل شده

بازی حدس عدد

22 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

22
:)
:)
@ERR

تخصص: اندروید - تازه کار

بهترین پاسخ

کد @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

تخصص: برنامه نویس وب و بلاکچین

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

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

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


شما یک عدد توی ذهن تون هستش در بازه بین 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

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

شاید پاسخ شما همین‌جا باشد

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

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

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

تخصص: جونیور تازه کار

سلام بازم متوجه نشدم این روشی که دوستان گفتن امتحان کردم و میخوام برنامه ای بنویسم که هر بار به جای 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()
Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

mmj-sys
mmj-sys
@mmj.sys

تخصص: داش متخصص چیه من پروفسورم .

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

:)
:)
@ERR

تخصص: اندروید - تازه کار

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

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

:)
:)
@ERR

تخصص: اندروید - تازه کار

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

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

:)
:)
@ERR

تخصص: اندروید - تازه کار

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

:)
:)
@ERR

تخصص: اندروید - تازه کار

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

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

Ibo Kiani
Ibo Kiani
@abdoki7788

تخصص: Backend developer

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

:)
:)
@ERR

تخصص: اندروید - تازه کار

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

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

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

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

:)
:)
@ERR

تخصص: اندروید - تازه کار

کد زیر هم از روش خودتون
ولی روش @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
mmj-sys
mmj-sys
@mmj.sys

تخصص: داش متخصص چیه من پروفسورم .

جمع کینین کداتونو بابا پادشاه امد !! 😄

start_num = 1
end_num = 99

while True:
      num_gu = int(start_num + end_num / 2)
      input_let = input(f"is {num_gu}")
      if input_let == "d":
         print("Yooo I Wine ... ")
         break
      elif input_let == "b" :
           start_num += 2
      elif input_let == "k":
           end_num = end_num - num_gu
      else:
         print("that not input .")
         break

زیادی سوال میپرسه ولی کار میکنه

صفحه 1 از 2

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

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