Найти - Пользователи
Полная версия: Подсобите новичку
Начало » Центр помощи » Подсобите новичку
1
Aturo
Выдаёт

загадал 39
предполагаю 50
range(0, 50)
перелёт
проверяю в диапазоне range(0, 50)
предполагаю 24
range(24, 50)
недолёт
проверяю в диапазоне range(24, 50)
предполагаю 36
range(50, 50)

Последний выведенный диапазон должен быть (36,50), а не (50,50). Подскажите пожалуйста где я ошибся.
 import random as rnd
zag = rnd.randint(0,100)
print('загадал '+str(zag))
shot=50
diap=range(100)
for i in range(10):
    if shot > zag:
        print('предполагаю ' + str(shot))
        diap=diap[:shot]
        print(diap)
        shot=round(max(diap)/2)
        print('перелёт ''\nпроверяю в диапазоне ' + str(diap))
        if shot < zag:
        print('предполагаю ' + str(shot))
        diap=diap[shot:]        
        print(diap)
        shot=round(min(diap)+((max(diap)-min(diap))/2))
        print('недолёт''\nпроверяю в диапазоне ' + str(diap))
    if shot==zag:
        print('предполагаю '+ str(shot) + '\nпопадание ''\nпобеда')
        break
    
python335
эмм. Зачем ты заставляешь компьютер угадывать число если он его и так знает?
 zag = rnd.randint(0,100)
print(str(zag), "Уря! Я такой умний комп что смог угадать число которое и так знаю!" )
Aturo
python335
эмм. Зачем ты заставляешь компьютер угадывать число если он его и так знает?
Очевидно же что это не моя прихоть. Преподаватель по информатике дал задание написать программу, которая загадывает число в диапазоне от 0 до 100 и потом сама же его угадывает. Код должен быть именно такой упоротый, другой он не примет. В данном случае я не могу понять почему блок
         
        print('предполагаю ' + str(shot))
        diap=diap[shot:]        
        print(diap)
        shot=round(min(diap)+((max(diap)-min(diap))/2))
так работает. Перебрал уже уйму вариантов, но так и не смог починить.
Вся проблема в том, что берётся число shot, первый срез осуществляется правильно, допустим получаем (50,100), потом shot вычисляется и получаем 75, срез должен стать (75,100), но становится (100,100). Вопрос, почему и как исправить?
marvellik
зачем создавать список и потом путаться в срезах? проще изменять начало и конец диапазона поиска
 from random import randint
zag = randint(0,100)
print('загадал '+str(zag))
start , end = 0,100
diap = randint(start,end)
while zag != diap:
    print('предполагаю ' + str(diap))
    if diap > zag:
        end = diap
    else:
       start = diap
    diap=randint(start,end)
print('предполагаю '+ str(diap) + '\nпопадание ''\nпобеда')
Aturo
marvellik
зачем создавать список и потом путаться в срезах?
Такое вот наркоманское задание. Вот попытался графически изобразить как должно работать.
marvellik
zag = randint(0,100) это уже подразумевает прямую- диапазон поиска а diap = randint(start,end) в цикле это и есть поиск в срезах диапазона. вам же явно не указано создать список от 0 до 100 и искать по срезам
Aturo
diap = randint(start,end) использует случайные значения, насколько я понял. Мне же нужно взять отрезок длинной 100 и половинить до тех пор, пока не найду ответ. А списки взял т.к. ничего другого пока не знаю+мы их только прошли и требуется именно с их помощью реализовать. Я только поступил в универ и сразу требуют знание языка, а я в принципе с программированием впервые сталкиваюсь.
marvellik
теперь понятно
Двоичный (бинарный) поиск элемента в массиве
vic57
Aturo
Такое вот наркоманское задание. Вот попытался графически изобразить как должно работать.
нагляднее так
Aturo
Таки со всем разобрался. Срезало неверно т.к. режет от начала по кол-ву членов, а не по числу. Проще говоря, если у меня список с диапазоном (50,100) и я хочу получить (75,100), то срезать нужно было не
 [75:]
а
 [25:]
Мне, как новичку, было довольно трудно до этого самому дойти, поэтому оставляю этот пост, авось кому поможет.
В итоге решение получилось такое:
 from random import randint
zag = randint(0,100)
print('загадал '+str(zag))
shot=50
i=0
sum1=0
de=50
while i==0:
    if shot<zag:
        print('проверяю '+str(shot))
        shot=round(shot+de)
        de/=2
        sum1+=1
    if shot>zag:
        print('проверяю '+str(shot))
        shot=round(shot-de)      
        de/=2
        sum1+=1
    if shot==zag:
        print('проверяю '+str(shot)+'\nзагадано число '+str(shot)+'\nнайдено с '+str(sum1)+' попытки')
        i+=1
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