Python: Задачи и решения (Глава 3. Ветвление, циклы с оператором while и псевдокод. Игра “Отгадай число”).

Продолжаем изучать программирование. После третьей главы в книге: Майкл Доусон “Программируем на Python”, 2014 (Michael Dawson “Python Programming for the Absolute Beginner”, 3rd Edition), где я изучила особенности работы с текстом в языке программирования Python, предложены задания. Давайте выполнять их вместе. Я приведу свой вариант решения, а вы пишите ваши варианты в комментариях.

Программа “Угадай число” от Игроглаза, не подсматривая решение:

import random



guess = ""

guess_num = 0

number = int(random.randint(1,100))



print ("I made a guess: number 1-100. Can you guess it?n")



while guess != number:

    guess = int(input("Enter your proposal: n"))

    if guess > number:

        print("No, it's smaller..n")

    elif guess < number:

        print("No, it's bigger..n")

    else:

        print("Finally, you got it!n")

    guess_num += 1



print ("Number was ", number, ". You guessed it with", 

guess_num, "times. Good job!")

    

input()

Кстати, в книге в этой программе ошибка. Вне цикла там стоит tries = 1; тогда как оно должно начинаться с нуля.

1) Напишите программу — симулятор пирожка с «сюрпризом», — которая бы при запуске отображала один из пяти различных «Сюрпризов», выбранный случайным образом.

Вариант Штукенции:

import random

surpriz_1='Unicorn'

surpriz_2='Medal'

surpriz_3='Funny cat'

surpriz_4='Palm tree'

surpriz_5='Dino'

rezult=random.randint(1,5)

if rezult==1:

    print(surpriz_1)

elif rezult==2:

    print(surpriz_2)

elif rezult==3:

    print(surpriz_3)

elif rezult==4:

    print(surpriz_4)

else:

    print(surpriz_5)

 

 

Вариант Игроглаза:

import random



num = random.randint(1,5)



if num == 1:

    pie = "селедкой"

if num == 2:

    pie = "мясом"

if num == 3:

    pie = "курицей"

if num == 4:

    pie = "сеном"

if num == 5:

    pie = "опилками"

    

print ("Держи пирожок с", pie)

    

input()

2) Напишите программу, которая бы «Подбрасывала» условную монету 100 раз и сообщала, сколько раз выпал орел, а сколько — решка.

Вариант Штукенции:

import random

orel_1='orel'

reshka_2='reshka'

orel_sum=0

reshka_sum=0

count=0

while count!=100:

    count+=1

    result=random.randint(1,2)

    if result==1:

        orel_sum+=1

    else:

        reshka_sum+=1

print('Орел:',orel_sum,'Решка:',reshka_sum)

 

 

Вариант Игроглаза:

import random



n = 0

counter = 0



while n < 100:

    flip = random.randrange(2)

    if flip == 0:

        coin = "Орёл"

        counter += 1

    else:

        coin = "Решка"

    print ("Бросаем монетку..", coin)

    n += 1



print ("Орёл выпал", counter, "раз; решка", 100-counter, "раз")

    

input()

3) Измените программу «Отгадай число» таким образом, чтобы у игрока было ограниченное количество попыток. Если игрок не укладывается в заданное число (и проигрывает), то программа должна выводить сколь возможно суровый текст.

Вариант Штукенции:

import random

print('Я загадала целое число от 0 до 100. Угадай с 5 попыток!')

chislo=random.randrange(101)

popitka_count=0

while popitka_count<=4:

    popitka_count+=1

    popitka=int(input('Это число:'))

    if popitka<chislo:

        print('Больше!')

    elif popitka>chislo:

        print('Меньше!')

    else:

        print('Ничего себе! Ты отгадал! Это правда',chislo)

        print('Количество попыток:',popitka_count)

        break

if popitka_count==5 and popitka!=chislo:

    print('О, ужас! Ты совершенно не умеешь читать мои мысли!n

Так и не смог угадать число за 5 попыток :(')

 

 

Вариант Игроглаза:

import random



guess = ""

guess_num = 0

number = int(random.randint(1,100))



print ("Try to guess a number 1-100 with 6 tries..n")



while guess != number:

    if guess_num > 6:

        print("Sorry, you've lost! It was", number)

        break

    guess = int(input("Enter your proposal: n"))

    if guess > number:

        print("No, it's smaller..n")

    elif guess < number:

        print("No, it's bigger..n")

    else:

        print("Finally, you got it!n")

    guess_num += 1



if guess == number:

    print ("Number was ", number, ". You guessed it with", 

guess_num, "times. Good job!")

    

input()

4) А вот задача посложнее. Напишите на псевдокоде алгоритм игры, в которой случайное число от 1 до 100 загадывает человек, а отгадывает компьютер. Прежде чем приступать к решению, задумайтесь над тем, какой должна быть оптимальная стратегия отгадывания. Если алгоритм на псевдокоде будет удачным, попробуйте реализовать игру на Python.

Вариант Штукенции:

print('Загадай любое целое число от 1 до 100. 

А я его отгадаю. Говори мне </>. 

Когда я угадаю, напиши "yes"n')

input('Нажми Entr, когда загадал')

import random

low_num=0

high_num=100

gues=random.randint(low_num,high_num)

print('Это число',gues,'?')

otvet=input('Угадал?n')

while otvet!='y':

    if otvet=='<':

        high_num=gues-1

        gues=random.randint(low_num,high_num)

        print(gues)

        otvet=input('Угадал?n')

    elif otvet=='>':

        low_num=gues+1

        gues=random.randint(low_num,high_num)

        print(gues)

        otvet=input('Угадал?n')

input('Ура! Я отгадал! Нажми Enter, чтобы выйти.')

 

Вариант Игроглаза. Чтобы решать такие задачки эффективно, нужно рисовать графики или схемы. Нарисуйте прямую и отметьте там 0 в начале и 100 в конце… метод бисекции состоит в том, чтобы брать среднее значение и назначать его либо началом или концом графика в новой итерации):

# Bisection method



begin = 0

end = 100

guess = ""



print ("I'll guess a number 1-100.. answer 'yes' if I correct 

and 'less' or 'more' if number is bigger or smallern")



while True:

    guess = (begin + end) // 2

    print ("Is it", int(guess), "?")

    answer = input()

    if answer == "yes" or (end - begin == 2):

        break

    if answer == "more":

        begin = guess

    elif answer == "less":

        end = guess



print ("Number was ", guess, ". Good job!")

    

input()