Форум сайта python.su
0
Пользователь загадывает целое число от 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))
Отредактировано ann_beggin (Окт. 27, 2017 21:05:47)
Офлайн
76
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')
Офлайн
задачка на метод последовательных приближений
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')
Офлайн
186
Нет это задача на динамическое программирование.
S = 250 Median = 500 while True: print(Median) if input() == ">": Median += S else: Median -= S if S > 1: S //= 2
Отредактировано Rodegast (Окт. 28, 2017 02:19:22)
Офлайн
Rodegastне сойдется - д.б 2 в степени
S = 250
Median = 500
while True:
print(Median)
if input() == “>”:
Median += S
else:
Median -= S
S -= S // 2
Офлайн
186
А ты проверь 
Офлайн
Rodegastпроверяй сам, я это на ассемблере делал
А ты проверь
Офлайн
186
У меня всё проверенно. Вот пример того как он находит нужное число
rodegast@rodegast:~$ python3 ./game.py 500 > 750 < 625 > 687 < 656 > 671 < 664 > 667 < 666
Офлайн
857
vic57
задачка на метод последовательных приближений
RodegastЭто обычный бинарный поиск (в основе лежит принцип дихотомии). Максимальное количество шагов равно log2(1000) ~= 9.96
Нет это задача на динамическое программирование.
Офлайн
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 >>>
Отредактировано vic57 (Окт. 28, 2017 10:03:16)
Офлайн