Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/71: Рейтинг темы: голосов - 71, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 25.12.2019
Сообщений: 23

Правильно ли выполнял задачу ?

02.12.2020, 17:45. Показов 15053. Ответов 12

Студворк — интернет-сервис помощи студентам
Пожалуйста объясните мне как выполнять эти задачи ?

9.14. Лотерея: создайте список или кортеж, содержащий серию из 10 чисел и 5 букв. Случайным образом выберите 4 числа или буквы из списка. Выведите сообщение о том, что
билет, содержащий эту комбинацию из четырех цифр или букв, является выигрышным.

9.15. Анализ лотереи: напишите цикл, который проверяет, насколько сложно выиграть
в смоделированной вами лотерее. Создайте список или кортеж с именем my_ticket. Напишите цикл, который продолжает генерировать комбинации до тех пор, пока не выпадет выигрышная комбинация. Выведите сообщение с информацией о том, сколько выполнений
цикла понадобилось для получения выигрышной комбинации.

взято из книги Эрик Мэтиз - Изучаем Python (Библиотека программиста) - 2020.pdf




Я по своему написал код, насколько это правильно ? Подскажите что надо исправлять, учить ?
и как можно еще по другому написать этот код например используя функции, классы ?

это первая задача:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import random
numbers = [1,2,3,4,5,6,7,8,9,10]
letters = ['a', 'b', 'c', 'd', 'e']
 
 
win_numbers = []
win_letters = []
 
 
for i in range(1,5):
    win_numbers.append(random.choice(numbers))
    win_letters.append(random.choice(letters))
 
 
print("A ticket containing this combination:")
print("number:", *win_numbers,)
print("letter:", *win_letters, "win!")
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2020, 17:45
Ответы с готовыми решениями:

Правильно ли решаю задачу?
затраты времени на обработку одного изделия Тип оборудования А В 1 ...

Правильно ли решил задачу ?
Требуется показать, что если \frac{{b}_{n}}{{b}_{n+1}} = 1 + {B}_{n} n = 1, 2, 3 ...., и ряд \sum_{n=1}^{\infty } {B}_{n} абсолютно...

Правильно ли решил задачу ?
Задача: В цехе имеется 125 станков, работающих независимо друг от друга. Каждый станок оказывается включенным 0,85 всего рабочего времени....

12
1 / 1 / 0
Регистрация: 01.02.2021
Сообщений: 1
01.02.2021, 22:10
Я бы сделал не так (хотя сам только начал изучать python3 без года неделю).
Может лучше:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import random
 
number_choice = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e',]
 
my_ticket = [3, 7, 'c', 'e']
print(f"Билет имеющий комбинацию {my_ticket} является выигрышным!")
number_combinations = 0
while True:
    my_ticket != random.sample(number_choice, 4)
    number_combinations += 1
    if my_ticket == random.sample(number_choice, 4):
        print("You win!")
        print("The winning combination was: {}".format(number_combinations))
        break
Как-то так. Честно сам неделю мучался... ))) Терпения всем и успеха во всех начинаниях!!!
1
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
02.02.2021, 09:28
10 это не цифра.

Добавлено через 3 часа 58 минут
Случайный выбор может быть с возможными повторами и без. Вы уверены что вам нужно без повторов?
3
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
02.02.2021, 10:16
Aydynbai,
и как можно еще по другому написать этот код например используя функции, классы ?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import random
 
 
class Lottery:
    def __init__(self):
        self.win_numbers, self.win_letters = [], []
 
    def main(self, numbers, letters):
 
        for i in range(1, 5):
            self.win_numbers.append(random.choice(numbers))
            self.win_letters.append(random.choice(letters))
 
        return self.win_numbers, self.win_letters
 
 
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
letters = ['a', 'b', 'c', 'd', 'e']
 
x = Lottery()
res = x.main(numbers, letters)
 
print("A ticket containing this combination:",
      "\nnumber:", *res[0],
      "\nletter:", *res[1], "win!")
1
1 / 1 / 0
Регистрация: 23.03.2021
Сообщений: 2
23.03.2021, 14:31
спасибо, тоже ломал голову с этой задачей...

вот на основе ваших сделал такой код:

и мне кажется он правильно перебирает и сравнивает каждый знак из 4х...

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import random
 
lottery_numb = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'A', 'B', 'C', 'D', 'E']
 
my_ticket = [1, 2, 'A', 'B']
 
print(f"Winnig ticket is: {my_ticket}")
 
number_combinations = 0
 
while True:
    my_ticket != [random.choice(lottery_numb),
                  random.choice(lottery_numb),
                  random.choice(lottery_numb),
                  random.choice(lottery_numb)]
 
    number_combinations += 1
    if my_ticket == [random.choice(lottery_numb),
                     random.choice(lottery_numb),
                     random.choice(lottery_numb),
                     random.choice(lottery_numb)]:
        print("You win!")
        print(
            "The winning combination was: {}".format(number_combinations))
        break
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
23.03.2021, 14:49
AlexBest, так лучше
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import random
 
number_choice = ["1", "2", "3", "4", "5", "6", "7", "8", "9", 'a', 'b', 'c', 'd', 'e', ]
 
my_ticket = ["3", "7", 'c', 'e']
print("Билет имеющий комбинацию", "".join(my_ticket), "является выигрышным!")
number_combinations = 0
while True:
    if my_ticket != random.sample(number_choice, 4):
        number_combinations += 1
    if my_ticket == random.sample(number_choice, 4):
        print("You win!")
        print("The winning combination was: {}".format(number_combinations))
        break
0
1 / 1 / 0
Регистрация: 23.03.2021
Сообщений: 2
23.03.2021, 15:04
мне кажется random.sample как-то не так работает нежели random.choise

если попробовать указать в своем билете повторяющиеся символы то цикл "зависнет", при random.choise любые варианты срабатывают достаточно быстро
1
0 / 0 / 0
Регистрация: 12.08.2021
Сообщений: 2
12.08.2021, 14:42
Здравствуйте, не могу разобраться в одном месте. У меня решение выглядит так:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from random import choice
 
lucky_numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e')
 
my_ticket = [5, 'b', 2, 0]
 
my_attempts = 0
 
while my_ticket != [choice(lucky_numbers),
                  choice(lucky_numbers),
                  choice(lucky_numbers),
                  choice(lucky_numbers)]:
    my_attempts += 1
 
print(f"There were {my_attempts} attempts")

Однако, при изменении списка my_ticket = [5, 'b', 2, 0] на кортеж my_ticket = (5, 'b', 2, 0) цикл работает бесконечно (предположительно). Почему так происходит?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.08.2021, 14:51
Ylman, Список == кортежу?

Добавлено через 3 минуты
Python
1
print([1, 2, 3] == (1, 2, 3))  # False
3
0 / 0 / 0
Регистрация: 12.08.2021
Сообщений: 2
12.08.2021, 14:59
iSmokeJC, Не учел, спасибо.
0
0 / 0 / 0
Регистрация: 24.04.2022
Сообщений: 1
24.04.2022, 06:06
random.sample не совсем правильно выполняет задачу на мой взгляд. Если билет будет состоять из повторяющихся значений, будет проблема.

Лучше использовать random.сhoice и сгенерировать список из 4 значений. На мой взгляд оптимальное решение:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from random import choice
 
lottery_list = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'a', 'b', 'c', 'd', 'e')
my_ticket = [3, 3, 3, 3]
win_ticket = []
num_iterations = 0
 
while my_ticket != win_ticket:
    win_ticket = [choice(lottery_list) for i in range(4)]
    num_iterations += 1
 
print(f'My ticket # {"".join(map(str, my_ticket))} has won!')
print(f"It took {num_iterations} iterations.")
Добавлено через 40 минут
Аналогичный вариант с использованием класса:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from random import choice
 
class Lottery_Ticket:
 
    def __init__(self):
        self.lottery_numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'a', 'b', 'c', 'd', 'e')
        self.my_ticket_number = [choice(self.lottery_numbers) for i in range(4)]
        self.win_ticket_number = []
        self.num_iterations = 0
    
    def iterations_for_win(self):
        while self.my_ticket_number != self.win_ticket_number:
            self.win_ticket_number = [choice(self.lottery_numbers) for i in range(4)]
            self.num_iterations += 1
 
        print(f'My ticket # {"".join(map(str,self.my_ticket_number))} has won!')
        print(f"It took {self.num_iterations} iterations.")
 
 
my_ticket = Lottery_Ticket()
my_ticket.iterations_for_win()
Вывод:

My ticket # 856a has won!
It took 70927 iterations.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
24.04.2022, 09:55
Вот так можно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
from random import choices
#==============================================================================
def get_rand_ticket():
    s = '0123456789abcde'
    return choices( s, k=4 )
#==============================================================================
win_ticket = get_rand_ticket()
print('Выигрышным является билет с комбинацией:', *win_ticket )
i = 1
while get_rand_ticket() != win_ticket:
    i += 1
print( f'Для получения выигрышной комбинации понадобилось {i} итераций.' )
0
1 / 1 / 0
Регистрация: 20.03.2023
Сообщений: 1
20.03.2023, 11:05
К задаче 9.15:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from random import choice
 
lotteries = [5, 7, 15, 25, 11, 34, 18, 72, 45, 80]
my_ticket = [5, 25, 18, 80]
win_lottery = []
num_iterations = 0
 
while True:
    if my_ticket != win_lottery:
        win_lottery = [choice(lotteries) for n in range(4)]
        num_iterations += 1
    else:
        print(f"My ticket {my_ticket} has won!")
        print(f"It has taken {num_iterations} iterations.")
        break
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2023, 11:05
Помогаю со студенческими работами здесь

Правильно ли я решил задачу?
Здравствуйте. Проверьте правильно ли решена задача, в плане того правильную ли формулу я использовал для рассчета? Правила, 5.18....

Правильно ли решил задачу?
Правильно ли решил задачу? (Решить ее надо было именно через перебор) Перебирает он очень долго поэтому надеюсь на вашу помощь. ...

Правильно ли я решил задачу?
Условие: Вычислить бесконечную сумму ряда с заданной точностью e (e>0) Мое решение: var i,e,s:real; BEGIN readln(e); ...

Правильно ли я решил задачу?
Дан прямоугольный треугольник HOR , с прямым углом HOR. Найдите стороны HO, HR если известно , что угол HRO равен 40 градусам, а сторона...

Правильно оформить задачу
Помогите составить "Дано" для задачи. Тело, брошенное вертикально вниз с начальной скоростью 5 м/с, в последние 2 с падения прошло путь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru