Найти - Пользователи
Полная версия: Помогите с задачей. Угадайка чисел от 1 до 1000
Начало » Python для новичков » Помогите с задачей. Угадайка чисел от 1 до 1000
1 2 3
ann_beggin
Пользователь загадывает целое число от 1 до 1000, но не вводит его. Программа должна максимум за 10 шагов определить это число и вывести на экран. Программа выводит свои догадки на экран, и пользователь отвечает >,< или = это число загаданному
 answer=''
number=int(500)
print(number)
while answer!='=':
    answer=input()
    if answer=='=':
        print (int(number))
    elif answer=='>':
        number*=1.5
        print (int(number))
    elif answer=='<':
        number*=0.5
        if number>1000:
            number=1000
        print (int(number))
Помогите пожалуйста
Romissevd
 import random
n = 0
number_1 = 1
number_2 = 1000
while n < 10:
    n += 1
    number = random.randint(number_1, number_2)
    print(number)
    answer = input('Enter result')
    if answer == '>':
        number_1 = number + 1
    elif answer == '<':
        number_2 = number - 1
    else:
        print('WIN!')
        break
else:
    print('Game Over')
vic57
задачка на метод последовательных приближений
 summ = 0
delta = 2**9
while True:
    print('sum:',summ)
    inp = input('?: ')
    if inp == '=':
        print('result:',summ)
        break
    elif inp == '<':
            summ += delta
            delta >>= 1
    elif inp == '>':
            summ -= delta
            delta >>= 1
    else:
        print('input error')
Rodegast
Нет это задача на динамическое программирование.
 S = 250
Median = 500
while True:
	print(Median)
	if input() == ">":
		Median += S
	else:
		Median -= S
	if S > 1: S //= 2
vic57
Rodegast
S = 250
Median = 500
while True:
print(Median)
if input() == “>”:
Median += S
else:
Median -= S
S -= S // 2
не сойдется - д.б 2 в степени
Rodegast
А ты проверь
vic57
Rodegast
А ты проверь
проверяй сам, я это на ассемблере делал
Rodegast
У меня всё проверенно. Вот пример того как он находит нужное число
 rodegast@rodegast:~$ python3 ./game.py
500
>
750
<
625
>
687
<
656
>
671
<
664
>
667
<
666
py.user.next
vic57
задачка на метод последовательных приближений
Rodegast
Нет это задача на динамическое программирование.
Это обычный бинарный поиск (в основе лежит принцип дихотомии). Максимальное количество шагов равно log2(1000) ~= 9.96
Делим упорядоченное множество на две части и отбрасываем часть, в которой ответа точно нет. С оставшейся частью повторяем всё то же самое, пока не останется один элемент множества.
vic57
Rodegast
У меня всё проверенно. Вот пример того как он находит нужное число
 >>> def f(delta,val):
    summ = 0
    while delta:
        if summ < val: summ += delta
        elif summ > val: summ -= delta
        else: break
        delta >>= 1
    return summ
>>> d = 1000
>>> count = 0
>>> for i in range(0,1000):
    if i != f(d, i): count += 1
>>> count
488
>>> 
да ну?
для особо продвинннутых
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB