Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2017 11:48:47

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Подсобите новичку

Выдаёт

загадал 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
    

Отредактировано Aturo (Окт. 28, 2017 12:24:34)

Офлайн

#2 Окт. 28, 2017 13:58:08

python335
Зарегистрирован: 2016-10-19
Сообщения: 88
Репутация: +  -8  -
Профиль   Отправить e-mail  

Подсобите новичку

эмм. Зачем ты заставляешь компьютер угадывать число если он его и так знает?

 zag = rnd.randint(0,100)
print(str(zag), "Уря! Я такой умний комп что смог угадать число которое и так знаю!" )

Отредактировано python335 (Окт. 28, 2017 13:58:17)

Офлайн

#3 Окт. 28, 2017 14:11:21

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Подсобите новичку

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). Вопрос, почему и как исправить?

Отредактировано Aturo (Окт. 28, 2017 14:17:25)

Офлайн

#4 Окт. 28, 2017 19:15:56

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Подсобите новичку

зачем создавать список и потом путаться в срезах? проще изменять начало и конец диапазона поиска

 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победа')

Отредактировано marvellik (Окт. 28, 2017 19:18:57)

Офлайн

#5 Окт. 28, 2017 19:37:44

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Подсобите новичку

marvellik
зачем создавать список и потом путаться в срезах?
Такое вот наркоманское задание. Вот попытался графически изобразить как должно работать.

Отредактировано Aturo (Окт. 28, 2017 19:38:35)

Офлайн

#6 Окт. 28, 2017 19:42:01

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Подсобите новичку

zag = randint(0,100) это уже подразумевает прямую- диапазон поиска а diap = randint(start,end) в цикле это и есть поиск в срезах диапазона. вам же явно не указано создать список от 0 до 100 и искать по срезам

Офлайн

#7 Окт. 28, 2017 19:51:05

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Подсобите новичку

diap = randint(start,end) использует случайные значения, насколько я понял. Мне же нужно взять отрезок длинной 100 и половинить до тех пор, пока не найду ответ. А списки взял т.к. ничего другого пока не знаю+мы их только прошли и требуется именно с их помощью реализовать. Я только поступил в универ и сразу требуют знание языка, а я в принципе с программированием впервые сталкиваюсь.

Офлайн

#8 Окт. 28, 2017 20:07:23

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Подсобите новичку

Офлайн

#9 Окт. 29, 2017 11:55:54

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Подсобите новичку

Aturo
Такое вот наркоманское задание. Вот попытался графически изобразить как должно работать.
нагляднее так

Офлайн

#10 Окт. 30, 2017 14:21:50

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Подсобите новичку

Таки со всем разобрался. Срезало неверно т.к. режет от начала по кол-ву членов, а не по числу. Проще говоря, если у меня список с диапазоном (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

Отредактировано Aturo (Окт. 30, 2017 14:23:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version