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

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

02.12.2020, 17:45. Показов 14931. Ответов 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
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
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,707
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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru