Майкл Доусон - Программируем на Python. Ответы на задания 3 главы.
Задание №1
# Задание: Написать программу симулятор пирожка с "сюрпризом",
#которая бы при запуске отображала один из пяти различных "сюрпризов",
#выбранных случайным образом.
print("\t\t\t\tДобрый вечер!")
print("Вы, как 100-ый клиент за день, получаете пирожок с секретной начинкой!")
print("У нас 5 секретных начинок, и мы не знаем какая вам достанется. Удачи!\n")
import random
stuffing = random.randint(1, 5)
if stuffing == 1:
print("Вам попалась начинка с рисом и яйцом! Поздравляю!")
elif stuffing == 2:
print("Вам попалась начинка с курагой! Поздравляю!")
elif stuffing == 3:
print("Вам попалась начинка с картошкой! Поздравляю!")
elif stuffing == 4:
print("Вам попалась начинка с сосиской! Поздравляю!")
elif stuffing == 5:
print("Вам попалась начинка с салатом! Поздравляю!")
else:
print("Что-то сломалось наверное, приходите за призом завтра...")
input("Нажмите Enter, чтобы покинуть розыгрыш...")
Задание №2
#Дом. задание: Написать программу, которая бы "подбрасывала" условную монету
#100 раз и сообщала, сколько раз выпала "решка" или "орел".
import random
print("Сейчас программа 'подбросит' монетку и подсчитает сколько раз выпадет")
print("'решка', или 'орел'.")
reshka = 0
orel = 0
kol_podbros = 0
while kol_podbros != 100:
podbros = random.randint(1, 2)
if podbros == 1:
orel += 1
else:
reshka += 1
kol_podbros += 1
print("\nОрлов выпало: ", orel)
print("Решек выпало: ", reshka)
Задание №3
# Игра "отгадай число"
import random
print("\tДобро пожаловать в игру 'Отгадай число'!")
print("Компьютер загадал натуральное число из диапазона от 1 до 100.")
print("Вам нужно угадать его за максимум 5 попыток.\n")
# Начальные значения
the_number = random.randint(1, 100)
guess = int(input("Ваше предположение: "))
tries = 1
# Цикл отгадывания
while guess != the_number:
if guess > the_number:
print("Меньше...")
elif guess < the_number:
print("Больше...")
if guess > the_number and tries >= 6:
print("Соберись, тряпка!")
elif guess < the_number and tries >= 6:
print("Неудачник!")
guess = int(input("\nВаше предположение: "))
tries += 1
print("\nПоздравляю! Вам удалось отгадать число!")
print("вы затратили всего лишь", tries, "попытки(ок)!")
if tries >= 6:
print("\nВсего лишь", tries, "попытки(ок)), Карл?! Да ты издеваешься?")
input("\nНажмите Enter, чтобы покинуть игру...")
Задание №4
# coding=utf-8
print("\t\t\tЗдравствуй, игрок!")
print("Тебе предстоить сыграть с компьютером в 'Числа'.")
print("Надо загадать число от 1 до 100, а компьютер попытается отгадать его.")
number = int(input("Введите загаданное число: "))
# Задаем начальные значения и задаем первую попытку угадывания, задействуя метод Хартли.
# То есть делим интервал угадывания наполовину, чтобы быстрей добраться до искомого числа.
computer_number = 50
tries = 1
low = 1
high = 100
print(computer_number)
# Цикл отгадывания
while computer_number != number:
if computer_number > number:
high = computer_number # Задаем загаданное число верхней границей интервала
# Продолжаем делить полученный интервал наполовину.
computer_number = computer_number - ((high-low)//2)
print(computer_number)
elif computer_number < number:
low = computer_number # Задаем загаданное число нижней границей интервала
computer_number = computer_number + ((high-low)//2)
print(computer_number)
tries += 1
print("Компьютер потратил", tries, "попытки(ок) на отгадывание твоего числа.")
input("\n\nНажмите Enter, чтобы выйти из программы...")
У меня по-другому вышло...
ОтветитьУдалитьВот: (2 задача)
#Счетчик "Подбрасований"
#Подбрасывает виртуальную монету 100 раз и сообщает,
#Сколько раз выпал орел, а сколько - решка.
import random
print("\tВас приветствует счетчик подбрасываний\n")
print("Он подбросит монету 100 раз в воздух")
print("А затем сосчитает сколько раз выпал \"Орел\" , а сколько \"Решка\" ")
eagle = 0
tails = 0
coin = 0
trow = 0
while True:
trow += 1
if trow > 100:
break
coin = random.randint(1,2)
if coin == 1:
eagle += 1
else:
tails += 1
print("\nМонета была подброшена 100 раз, из которых ", eagle, "орел, а ", tails, "Решка ")
input("\nЧтобы выйти нажмите Enter ")
Вот как 3 задача получилась:
ОтветитьУдалить#Отгадай число
#
#Компьютер выбирает случайное число в диапозоне от 1 до 100
#Игрок пытается отгадать число, и компьютер говорит
#предположение больше/меньше, чем загаданное число.
#или попало в точку.
import random
print("\tДобро пожаловать в игру 'Отгадай число'!")
print("\nЯ загадал натуральное число из диапазона от 1 до 100.")
print("Постарайтесь отгадать его за минимальное число попыток.\n")
print("\nМаксимальное число попыток '7'.\n ")
#Начальные значения
the_number = random.randint(1, 100)
guess = int(input("Ваше предложение: "))
tries = 1
#Цикл отгадывания
while guess != the_number:
if guess > the_number:
print("Меньше...")
else:
print("Больше")
guess = int(input("Ваше предположение: "))
tries += 1
if guess == the_number:
print("Вам удалось отгадать число! Это в самом деле", the_number)
print("Вы затратили на отгадывание всего лишь ", tries, "Попыток!\n")
if tries >= 7:
print("\nВы проиграли исчерпав все попытки")
break
input("\n\nНажмите Enter, чтобы выйти.")
Ну да, там у меня в первый раз почти такое же решение было)
УдалитьМда, все задания у меня занимали максимум 10 минут. Как и у любого. Но и последнее задание, где компьютер должен отгадать число не исключение, написал так как и автор (примерно),
ОтветитьУдалитьОднако мне показалось, что это слишком легко и что я не так понял задание. Усложнил себе задание. Итог: сижу уже неделю над одним кодом. И как баран не могу ни кинуть, ни решить.
Если кто чувствует силы, то предлогаю такое задание...
То же 4ое задание только пользователь не вводит число которое он загадал (уж слишком легко), а только отвечает больше или меньше. Отвечаю, решать очень интересно, но до ума я так и не довел. Но и не сдамся пока. Если кто решит, скиньте на имейл код, спасибо. Hulid97i7@mail.ru
Дружище, точно так же у меня было не только с этим, но и с другими заданиями) После того, как решишь, а чувствуешь, что можешь больше, то начинаешь сам себе придумывать доп. условия и решать их, даже если твои знания ограничены.
УдалитьИ это отлично. Оттачивать свои строчки кода как можно меньше и изящней для решения)
import random
Удалитьcomp_nr=random.randint(1, 100)
trial=0
print("Kompjuter govorit:", comp_nr)
my_nr=""
while my_nr!="ugadal":
my_nr=input("bolshe, menshe ili ugadal?: ")
trial+=1
if my_nr=="bolshe" and comp_nr<=100:
comp_nr+=random.randint(1, 10)
print(comp_nr)
elif my_nr=="menshe" and comp_nr>=0:
comp_nr-=random.randint(1, 10)
print(comp_nr)
elif my_nr=="ugadal":
print("URA!!! KOMPJUTER, TI UGADAL ZA", trial, "raz!")
input()
ребят помогит. нужно сделать домашку а время нету не успеваю
ОтветитьУдалитьДобрый день!
ОтветитьУдалитьВ первую очередь хочу поблагодарить автора за предоставленную возможность развиваться в кодировании на Python!
Я - новичок. Книга Доусона как раз для таких как я. Поэтому не обессудьте, если я написал ниже бред сивой кобылы. У меня программа вышла иной. Работает... Но меня терзают смутные сомнения по поводу правильности применения переменных в функции random. В общем, просьба к автору и не только, подтвердить или опровергнуть правильность данного кода.
# А вот задача посложнее. Напишите на псевдокоде алгоритм игры, в которой случайное
# число от 1 до 100 загадывает человек, а отгадывает компьютер. Прежде чем приступить
# к решению, задумайтесь над тем, какой должна быть оптимальная стратегия
# отгадывания. Если алгоритм на псевдокоде будет удачным, попробуйте реализовать
# игру на Python.
import random
my_number = int(input("Загадайте, пожалуйста, число от 1 до 100:"))
m=1
n=100
tries = 1
comp = random.randint(m,n)
while my_number != comp:
if my_number > comp:
m = comp
comp = random.randint(m,n)
print("m",m)
elif my_number < comp:
n = comp
comp = random.randint(m,n)
print("n",n)
tries +=1
print("Компьютер, ну наконец-то ты угадал! Аж с ", tries, "попытки!")
print("Это число -", my_number, "!")
Комментарий заметил только сейчас, поэтому ответ может казаться уже запоздалым, но все же.
УдалитьТвой код полностью выполняет условия задачи, почему нет? Он правилен)
А как программа будет реагировать на 1 или 100? В моем случае она зацикливается на 2 и 99 соответственно!
ОтветитьУдалитьСкорей всего у тебя диапазон от 1 до 100 не включительный, то есть не включает крайние цифры. В любом случае, надо смотреть листинг твоего решения.
УдалитьПосмотри пожалуйста.
Удалитьimport random
user_version=int(input('Загадай число от 1 до 100: '))
top_limit=100
down_limit=1
pc_version=50
tries=1
print('Я думаю, что это число',pc_version)
while user_version!=pc_version:
if pc_versionuser_version:
top_limit=pc_version
pc_version=top_limit-(top_limit-down_limit)//2
print('Я думаю, что это число',pc_version)
tries+=1
else:
print('Точно! Вы загадали число',str(pc_version)+'!')
print('Я потратил',tries,'попытки(ок)')
Честно говоря вообще не понял твой алгоритм, и что ты хочешь им сделать. Да и скопировано коряво. Вот тебе в помощь сайт, вводишь туда тело программы и пошагово смотришь выполнение и тебе будет показано, где ошибка. http://pythontutor.ru/visualizer/
УдалитьДоброго времени суток! Посмотри, пожалуйста, такой вариант. Спасибо!
ОтветитьУдалитьimport random
print('Добро пожаловать на соревнование лучшего компьтерного мозга!')
print('Вы загадываете любое натуральное число от 1 до 100 и компьютер должен его отгадать')
computer_number=50
tries=0
user_number=int(input('Введите любое натуральное число:'))
while user_number!=computer_number:
a=random.randint(1, 3)
if user_number>computer_number:
tries+=1
computer_number+=a
elif user_number<computer_number:
tries+=1
computer_number-=a
print('Вы загадали число:', computer_number)
print('На отгадывание я потратил', tries, 'попыток!')
input('\nНажмите Enter, чтобы выйти.')
В принципе, условиям задачи оно отвечает. Оно отгадывает.
УдалитьНо, тратит на отгадывание слишком много попыток, я загадал число 25, оно угадало только с 14 попытки. Сравните по быстродействии с моим кодом.
Второе, ограничьте ввод цифр пользователя от 1 до 100. Я могу вводить хоть миллионы, а это неверно условиям задачи. Просто подправьте, чтобы выходило сообщение, что число неккоректно, введите из диапазона.
№ 3
ОтветитьУдалить# Программа на угадывание загаданного компьютером числа
import random
restart = ''
while restart != "нет":
print('\n\n\t\t\tИгра "Отгадай число" v1.2\n\n')
print('Правила просты: я загадаю произвольное число от 0 до N.\nВаша задача - отгадать, что это за число?')
print('Я помогу вам. На ваше предположение я скажу, больше мое число или меньше.')
n = int(input('Введите N (любое целое число, например, 100): '))
print('Загадываю случайное число от 0 до', n, end='')
print('...')
suppose = int(input('Как вы думаете, скольки попыток вам будет достаточно для угадывания? '))
print('\nПоехали!')
number = random.randint(1, n)
guess = int(input('\nВаше предположение: '))
tries = 1
while guess != number:
if tries == suppose:
print('\nК сожалению, ваша интуиция подвела вас.')
print('Ваши', tries, 'попыток иссякли. Это было число', number, end='')
print('!')
restart = input('\n\nНачать игру заново? (да / нет) ')
break
if guess > number:
print('Меньше...')
else:
print('Больше...')
guess = int(input('Ваше предположение: '))
tries += 1
else:
print('Вы угадали! На отгадывание у вас ушло попыток:', tries)
restart = input('\n\nНачать игру заново? (да / нет) ')
Этот комментарий был удален автором.
УдалитьУ автора ошибка в коде, монета подбрасывается больше чем сто раз!
ОтветитьУдалитьИсправленный код ниже, чет долго решал эту задачу.
#Программа подброса монеты сто раз
import random
print("\nОрел или решка")
eagle = 0
tails = 0
coin = 0
while coin != 100:
coin_pod = random.randint(1, 2)
if coin_pod == 1:
eagle += 1
coin += 1
print("Eagle")
else:
coin += 1
tails += 1
print("Tails")
print("\nМонету подкинули сотый раз, решка выпала", tails, "раз, а орел", eagle, "раз.")
input("\nНажмите Enter, чтобы закрыть программау.")
С чего вы взяли что подбрасывается больше, чем сто раз? Плюс у вас полная копия моего решения.
УдалитьМое решение 4-й задачки
ОтветитьУдалитьimport random
my_num = random.randint (1,100)
num = 0
print('Я загадал число')
print('А теперь попробуй его отгадать')
print('Мр.Компютер: "Хорошо, сейчас попробую."')
while my_num != num:
num = random.randint(1,100)
print('Это число ', num, ' ?')
else:
print('Это число ', num, ' !')
import random
ОтветитьУдалитьthe_number = random.randint(1, 100)
guess = int(input("Введите число: "))
tries = 15
while guess != the_number:
if guess > the_number:
print("Меньше")
else:
print("Больше")
guess = int(input("Введите число: "))
tries -= 1
print("У вас осталось", tries, "попыток!")
if tries == 0:
print("Ты проиграл :(")
print("Ты угадал!,это было число: ", the_number)
print("Ты на это затратил: ", tries, "попыток!!!")
мой вариант 3 задачи, комментарии и текста не писал ибо было лень)))
Не знаю у кого как,но я сделал 3 задачу вот так (да в ней все перпеменные на русс.,а так я пишу на англ)
ОтветитьУдалитьprint("\tДобро пожаловать в игру 'Отгадай число' ")
print("\nЯ загадал натуральное число в диапазоне от 1 до 100.")
print("Надо отгадать его за минимум попыток.")
print("Но предупреждаю что всего их у вас 5")
# Стоковые значания
рандомные_числа = random.randint(1,100)
предложение=int(input("Ваше предложение : "))
попытка = 1
while предложение != рандомные_числа:
if предложение > рандомные_числа:
print("Меньше")
elif предложение < рандомные_числа:
print("Больше")
предложение = int(input("Ваше предложение: "))
попытка +=1
if попытка == 6:
print("Вы так и не смогли угадать число",рандомные_числа,"очень жаль!!!")
break
else:
print("\nВы угадали чсло, это в правду ",рандомные_числа,"!")
print("А потратили вы всего попыток : ",попытка)
input("\nЧтобы выйти нажмите Enter")
в моем представлении задача 4 из 3 главы должна решаться так(как я понял в описании)
ОтветитьУдалитьimport random
x = 1
y = 100
tries = 1
pc_n = random.randint(x,y) #первая попытка компа угадать число
print(pc_n) #выводим число
ask = input("угадал") #комп спрашивает угадал ли он
while ask != "да": #пока м ы не ответим да он будет гадать
if ask == "да": #если мы ответили да программа заканчивается выводится угаданное число и количество попыток
print("число", pc_n, "угадал с ", tries, "попытки")
else: #если мы ответили что-то кроме да, например нет
answer = input("больше или меньше?") #комп спрашивает загаданно ечисло больше или меньше того которое он вывел
if answer == "больше": #если больше с помощью функции рандом ищем число в промежутке от уже угаданного до 100
x = pc_n + 1
pc_n = random.randint(x,y)
print(pc_n)
ask = input("угадал?")
elif answer == "меньше": # если мы написали меньше ищем число от 1 до уже угаданного
y = pc_n - 1
pc_n = random.randint(x,y)
print(pc_n)
ask = input("угадал?")
tries +=1
print("угадал c ", tries, "попытки, это число", pc_n)
вполне согласен с тобой! задание странное, может проблема перевода или еще что-то, при продумывании псевдо кода я тоже пришел к мысли, что комп называет рандомные числа а мы указываем б < или > и по итогу решил просто загуглить ответ, так как для меня это странно вводит загадываемое число а компьютер его типо не видит, в общем всё сводится к тому, что компьютер будет просто генерировать числа в уменьшающемся диапазоне.
Удалитьи стоит наверное метнуть камень в огород автора поста потому что он задал 50 в качестве значения из-за чего уже теряется смысл отгадывания чисел.
Так, что твой вариант я думаю самый верный из всех возможных
Я хоть не смог решить 4 задание
ОтветитьУдалитьПросто тупо не додумался до деления результата
Но само задание бессмысленно
По одной простой причине, что в переменной которая принимает значение от input() уже имеется наше число и как-бы эвм об этом знает, в общем в чем логика задания?
И Такой вот момент, приведенное решение приводит к бесконечному циклу при значениях 2 и 100,
выше кто-то уже упоминал данную проблему и она решается просто, задав значения
high/low = 0/101
либо вот такой вариант выхода из бесконечного цикла!!
print("\t\t\tЗдравствуй, игрок!")
print("Тебе предстоит сыграть с компьютером в 'Числа'.")
print("Надо загадать число от 1 до 100, а компьютер попытается отгадать его.")
number = float(input("Введите загаданное число: "))
# Задаем начальные значения и задаем первую попытку угадывания, задействуя метод Хартли.
# То есть делим интервал угадывания наполовину, чтобы быстрей добраться до искомого числа.
computer_number = 50
tries = 0
low = 1
high = 100
print(computer_number)
# Цикл отгадывания
while computer_number != number:
if computer_number > number:
high = computer_number # Задаем загаданное число верхней границей интервала
# Продолжаем делить полученный интервал наполовину.
computer_number = computer_number - ((high-low)/2)
print(int(computer_number))
tries += 1
elif computer_number < number:
low = computer_number # Задаем загаданное число нижней границей интервала
computer_number = computer_number + ((high-low)/2)
print(int(computer_number))
tries += 1
print("Компьютер потратил", tries, "попытки(ок) на отгадывание твоего числа.")
input("\n\nНажмите Enter, чтобы выйти из программы...")
но в таком случае он будет просчитывать все знаки после запятой при вводе 1 и 100 соответственно при 1 будет 59 попыток при 100 будет 53 попытки
в принципе проблема решаема командой continue но куда её записать пока не знаю
Всё доделал код вот, что вышло
Удалитьprint("\t\t\tЗдравствуй, игрок!")
print("Тебе предстоить сыграть с компьютером в 'Числа'.")
print("Надо загадать число от 1 до 100, а компьютер попытается отгадать его.")
number = float(input("Введите загаданное число: "))
# Задаем начальные значения и задаем первую попытку угадывания, задействуя метод Хартли.
# То есть делим интервал угадывания наполовину, чтобы быстрей добраться до искомого числа.
computer_number = 50
tries = 0
low = 1
high = 100
print(computer_number)
# Цикл отгадывания
while computer_number != number:
if computer_number > number:
high = computer_number # Задаем загаданное число верхней границей интервала
# Продолжаем делить полученный интервал наполовину.
computer_number = computer_number - ((high-low)/2)
if computer_number > 1 and computer_number < 2:
continue
print(int(computer_number))
tries += 1
elif computer_number < number:
low = computer_number # Задаем загаданное число нижней границей интервала
computer_number = computer_number + ((high-low)/2)
if computer_number > 99.5 and computer_number < 100:
continue
print(int(computer_number))
tries += 1
print("Компьютер потратил", tries, "попытки(ок) на отгадывание твоего числа.")
input("\n\nНажмите Enter, чтобы выйти из программы...")
Захотелось поделиться свежим кодом:
ОтветитьУдалить"""Программ в которой человек загадывает число, а компьютер его отгадывает
Алгоритм
Приветствие
Компьютер просит ввести число которое нужно угадать
Процесс цикл угадывания в котором компьютер спрашивает у человека правильно он отгадал или большь меньше
тут будет цикл в котором компьютер будет постоянно принимать ответ и в зависимости от него продолжать цикл
с угадыванием
ели компьютер угадает он пошутит о том что человечик не далекое существо по сравнинию с цифровым гением в железе
ели число окажется больше или меньше, он будет
спрашивать число распологающееся на середине линейки предпологаемых чисел"""
print('Добро пожаловать в игру отгадай число для компьютера')
print('Вам дается возможность испытать ум компьютера на проворность, и дать ему возможность угадать число от 1 до 100')
tries = 1
guess = 50
print('Если я угадаю ваше число напишите ответ "да", если оно будет больше или меньше так и напишите "больше" или "меньше"')
print('Ваше число равно 50?')
max = 100
min = 1
answer = input('Введите ваш ответ:')
while answer != 'да':
if answer == 'больше':
min = guess
guess = guess + (max - guess)//2
elif answer == 'меньше':
max = guess
guess = guess + (min - guess) // 2
else:
print('Такого ответа не предусмотрено')
print('Мой ответ:' + str(guess) + ' я угадал?')
answer = input('Ваш ответ:')
print('Ура! я выиграл')
""" Программ которая подбрасывает монетку 100 раз и дает отчет о
ОтветитьУдалитьтом сколько раз выпал орел и решка"""
import random
eagl = 0
tails = 0
input('Нажмите Enter что-бы компьютер подбросил монету 100 раз')
throw = 0
while throw < 100:
x = random.randint(1,2)
if x == 1:
eagl += 1
else:
tails += 1
throw = eagl + tails
print('Компьютер сделал свое дело, при подбросе монеты 100 раз, орел выпал ' + str(eagl) + ' раз, а решка выпала ' + str(tails) + ' раза!')
# Программа будет выдавать приободряющие фразы сюрпризы из пирожков
ОтветитьУдалить""" Псевдокод-Алгоритм
Гость получает пирожок к себе на стол и внутри него выходит записка с сюрпризом"""
import random
surprise = random.randrange(1,5)
input('Чтобы получить пирожок с сюрпризом нажмите Enter')
if surprise == 1:
print('Внутри пирожка вышла записка с \'Вас ждет большая удача\'')
elif surprise == 2:
print('Внутри пирожка вышла записка с предсказанием \'В вашей семье скоро будет прибавление\'')
elif surprise == 3:
print('Внутри пирожка вышла записка с предсказанием \'Вас ждёт повышение на работе\'')
elif surprise == 4:
print('Внутри пирожка вышла записка с предсказанием \'Скоро вы встретите большую любовь\'')
else:
print('Внутри пирожка вышла записка с предсказанием \'Вам предстоит выиграть в лотерею\'')
""" В этой игре на угадывание числа у пользователя будет 5 попыток на отгадывание,
ОтветитьУдалитьи если игрок не уложится в отведенное количество попыток, он получит суровый выговор"""
import random
print('\tДобро пожаловать в игру \'Отгада число\'!')
print('\nЯ загадал натуральное число от 1 до 100')
print('Постарайтесь отгадать его за 5 попыток, если у вас не получится то вы будете приговорены к казни на электрическом стуле')
# Начальные значения
the_number = random.randint(1,100)
guess = int(input('Введиет ваш ответ:'))
tries = 5
#Цикл
while guess != the_number or tries == 0:
tries -= 1
if guess > the_number:
print('Меньше...')
else:
print('Больше...')
print('Осталось ' + str(tries) + ' попыток')
guess = int(input('Введиет ваш ответ:'))
if guess == the_number:
print('Поздравляем вам даруется помилование!')
else:
print('Вы приговорены к казни на электрическом стуле!!!')