Задать вопрос
@NoobPython

Как сделать повторение цикла random в связке с while и выполнение одного из двух сценариев?

Здравствуйте! Я только начал обучение Python и у меня достаточно много ошибок, которые, к сожалению, не знаю как исправить, поэтому ищу помощи у более опытных людей. Спасибо за понимание!

Задача №1:
Напишите программу, которая бы «Подбрасывала» условную монету 100 раз и сообщала, сколько раз выпал орел, а сколько - решка.

Пример моего кода:
print("Программа подбросит монетку 100 раз и покажет, сколько раз выпадет Орел или Решка\n")
import random
result = random.randint (1, 2)
tries = 0
damage = 1
orel = 0
reshka = 0
while result and tries !=100:
    tries += damage
    print("Осталось бросков: ", tries)
if result == 1:
    reshka += 1
else:   
    orel += 1
print("Орлов выпало: ", orel, "Решек выпало: ", reshka)
input("\nНажмите Enter, чтобы выйти.")

Код считает до 100, но записывает только 1 результат из рандома.

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

Пример моего кода:
import random
number = random.randint (1, 100)
guess = int(input("Ваш вариант: "))
tries = 4
while guess != number and tries !=0:
    #Повторное выполнение завершится, когда пользователь угадает число или израсходует все попытки
    if guess > number:
        print("Меньше...", "Осталось попыток: ", tries)
    else:
        print("Больше...", "Осталось попыток: ", tries)
    guess = int(input("Ваш вариант: "))
    tries -= 1
print("\nТы не справился с поставленной задачей, проваливай!")
input("Нажмите Enter, чтобы выйти.")

По условию задача выполнена правильно, но мне хотелось бы узнать, как вывести для пользователя поздравление, если он все-таки отгадал число, т.е. второй сценарий развития события, перепробовал кучу вариантов, с заменами последнего print на elif и вводом сценария туда.

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

Пример моего кода:
#1. Человек загадывает число
#2. Рандомайзер
#3. Рандомайзер повторяет цикл до тех пор, пока не угадает введеное число
#4. Когда рандомайзер угадывает число, пользователю выскакивает унизительное сообщение.

import random
number = random.randint (1, 2)
guess = int(input("Введите число от 1 до 100: "))
tries = 1
while number != guess:
    if number > guess:
        print("Компьютер взял больше, чем нужно было: ", number)
    else:
        print("Компьютер взял меньше, чем нужно было: ", number)
    tries += 1

print("Компьютер отгадал загаданное число за ", tries, "попыток.")
input("Нажмите Enter, чтобы покинуть игру.")

Сценарий выполняется таким образом, что компьютер 100 раз пишет одно и то же рандомное число, сгенерированное вначале.

Ещё раз благодарю Вас, что не прошли мимо!
  • Вопрос задан
  • 6878 просмотров
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 6
TomasHuk
@TomasHuk
Первая задача:
import random

print("Программа подбросит монетку 100 раз и покажет, сколько раз выпадет Орел или Решка\n")
tries = 0
damage = 1
orel = 0
reshka = 0
while tries !=100:
    tries += damage
    result = random.randint (1, 2)
    print("Осталось бросков: ", (100-tries))
    if result == 1:
        reshka += 1
    else:   
        orel += 1
print("Орлов выпало: ", orel, "Решек выпало: ", reshka)
input("\nНажмите Enter, чтобы выйти.")
Ответ написан
BBmike
@BBmike
здесь вопрос не в решении данной конкретной задачи, а в методике обучения

воспользуйся простым способом визуального пошагового исполнения кода. В принципе, это тот же дебаггер, только простой и понятный.
Там-то ты сразу просечешь, какая инструкция никогда не выполняется.
Ответ написан
Комментировать
@NoobPython Автор вопроса
Во второй задаче вроде бы нашел решение, как вывести 2 сценария, но в ошибочном все равно выводит "Вы отгадали загаданное число!", что я сделал не так и как будет правильно?
import random
number = random.randrange (100) + 1
guess = int(input("Ваш вариант: "))
tries = 5
while guess != number and tries != 0:
    tries -= 1
    if guess > number:
        print("Меньше...", "Осталось попыток: ", tries)
    if guess < number:
        print("Больше...", "Осталось попыток: ", tries)
    elif tries == 0:
        print("Вы не справились, покиньте пожалуйста игру!")
        break
    guess = int(input("Ваш вариант: "))
    
print("Вы отгадали загаданное число!")
input("Нажмите Enter, чтобы выйти.")


Нашел решение задачи №3:
import random
guess = int(input("Введите число от 1 до 100: "))
tries = 0
while guess < 100:
    tries += 1
    number = random.randint (1, 100)
    if number > guess:
        print("Компьютер взял больше, чем нужно было: ", number)
    elif number < guess:
        print("Компьютер взял меньше, чем нужно было: ", number)
    elif number == guess:
        print("Компьютер отгадал число ", number, "за ", tries, "попытку(-ок).")
        break
input("Нажмите Enter, чтобы покинуть игру.")
Ответ написан
@nurakhov
Задача 1. Действительно много лишних переменных.
import random
res = 0
tries = 0
while tries != 100:
    if random.randint (1, 2) == 1:
        res += 1
    tries += 1
    print("Осталось бросков: ", 100 - tries)
    
print("Орлов выпало: ", 100 - res, "Решек выпало: ", res)


Задача 2.
Загадываю число.
Сообщаю число попыток.
Пока попытки есть, угадывай.
    Если угадал, то сообщаю тебе, что ты молодец
    Если твой вариант больше моего числа, то это я тебе и говорю
    Иначе, говорю, что меньше
    Число попыток становится меньше на единицу
Если попытки закончились, то сообщаю, что ты лузер!


Задача 3.
import random
number = int(input("Введите число от 1 до 100: "))

x = 1
y = 100
guess = random.randint (x, y)
tries = 1

if number == guess:
    print('С первой попытки!')
else:
    while guess != number:
        if number > guess:
            print("Загаданное число больше: ", guess)
            x = guess
            guess = random.randint(x, y)
            tries += 1
        elif number < guess:
            print("Загаданное число меньше: ", guess)
            y = guess
            guess = random.randint(x, y)
            tries += 1
    print (number)
    print ('В яблочко, с', tries, 'попытки')
Ответ написан
Комментировать
Решение 1 задачи в 2 строчки:
from random import randint

tmp = sum([randint(0, 1) for _ in range(100)])
print('Число решек %s, число орлов %s' % (tmp, 100 - tmp))
Ответ написан
@SneJ
Товарищи, огромное вам спасибо за примеры кода первой задачи. Занимаюсь по учебнику Доусона, и честно, он мне слегка уже не нравится (а ведь я только начал) в частности из за таковых подстав с задачами (я конечно могу предположить, что г-н Доусон хочет, чтобы мы обменивались опытом, и знаниями, но вот, что делать когда не у кого спросить совета?) примеры/ приемы которых не рассматривались в главе. У меня весь затык уперся в функцию randint, когда я захотел, чтобы монета имела не только две стороны - 0 и 1 (True False), а три или больше (1, 2, 3...) по сути кубик. И вот тут я завис. Скидываю свой пример, он в шутливой форме, но так веселее, хобби, что поделать.
Честно я отбитый гуманитарий, так что прошу серьезно выкладку не воспринимать, просто как есть. Еще вопрос там по тексту кода изначально ставил:
flip = 0
while flip != 100:
и далее писал
flip += 1
но получался бесконечный цикл, пробовал прерывать цикл, но когда реверсировал, в коде ниже правильно, код заработал. Честно, не понял почему получился бесконечный цикл, без вычислений. Если у кого будет желание просветите, я могу предположить, что это в области True False, но лучше когда понимающий человек скажет.

#импорт модулей
import random

#завязка/ сюжет
print("\t\tГопники и начинающий программист")
print("\nНаш молодой программист гулял вечером по ночной Москве и наткнулся на \
ребят из низкосоциальных слоев населения.")
print("Ребята ему предложили сыграть и интереснейшую игру, подбросить монетку сто \
раз и в зависимости от того какая из сторон монетки выпадет большее\
число раз будет определена судьба нашего начинающего программиста")

#инициатор запуска функции
print("Скажи 'Бросаю', чтобы бросить монетку 100 раз и узнать результат.")

response = ""
while response != "Бросаю":
    response = input("Решайся: ")
print("Как два пальца")

#исходные значения
avers = 0
revers = 0
flip = 100
while flip != 0:

#бросок монеты
    one_flip = random.randint(1, 2)
    print("Если 1- аверс, если 2- реверс")
    print("\tМонета выпала: ")
    
#трактовка значений броска    
    if one_flip == 1:
        print("\t\t\tОрел")
        
    if one_flip == 2:
        print("\t\t\tРешка")

# -1 от иходного значения flip, мониторинг количества бросков  
    flip -= 1
    
    print("Осталось бросков: ", (0 + flip))

#интерпритация/ отождествление (хз как правильно) значений броска монеты и их суммирование с исходными (в первом броске и последующими в дальнейших)
    if one_flip == 1:
        avers += 1
        print("Орел: ",avers)
        
    if one_flip == 2:
        revers += 1
        print("Решка: ",revers)
        
#вывод значений итого        
print("Монета выпала орлом: ", avers)
print("Монета выпала решкой: ", revers)

#отсебятина
if avers == 50:
    print("Гопник: -Забухаем ботаник? Да конечно, прости, что спросил, конечно забухаем.")
    
elif avers <= 49:
    print("""
    Гопник: Ты сам-то отжимаешься? 
    Ботаник: — Отжимаюсь, &!%! 
    Гопник:— Вот я вижу буйвол. Тебе, небось, хорошо в армии, такому кабану-то.""")
    
elif avers >= 51:
    print("Гопник: -Ой, это вы господин Профессор? Ей богу не признали. А мы тут как раз с пацанами решили вам \
денежку занести")
    
#хз зачем эта фраза (честно знаю, но смысла в ней пока не вижу, на начальных этапах)
input("\n\nНажмите Enter, чтобы выйти")


Вариант решения задачи №3.
У меня получилось вот так (см. ниже), вроде вопрос и ответ бьются. Больше, меньше не стал добавлять, а то это уже ИскИн будет, немного юмора про восставшие машин ;) . Мне понравился вариант решения от пользователя nurakhov

import random

print("\t\t\tКомпьютерная номеромолотилка")

num_x = int(input("Введите число от 1 до 100 которое компьютер должен отгадать: "))

tries = 4

guess = ""

while guess != num_x and tries != 0:

    guess = random.randint(1, 100)
    tries -= 1
    print("Число, высказанное компьютером: ", guess)
    if guess == num_x:
        print("Компьютер Win")
    if tries == 0:
        print("Игрок Win")

    print("Осталось попыток: ", tries)

input("\n\nНажмите Enter, чтобы выйти")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы