Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2019 19:16:51

zokasi
Зарегистрирован: 2019-09-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск необходимых чисел в списке

Существует список из шестизначных чисел. Мне нужно посчитать вероятность нахождения в списке чисел, в которых есть ТОЛЬКО одна цифра 8 и ТОЛЬКО две цифры 2. Как я могу это сделать? Моя идея заключалась в том, что из числа “вытаскиваются” с помощью регулярных выражений 8 и две 2, склеиваются в один список и сравниваются с шаблоном, но это не работает (итог всегда 0, т.е. k = 0). Возможно, я неправильно понимаю, как работают некоторые элементы или не вижу ошибки?

 import random
import re
k = 0
new_list = list()
string = [8, 2, 2]
n = 1000
for i in range(0, n):
    new_list.append(random.randint(100000, 999999))
for i in range(0, n):
    if (re.findall(r'8{1}', str(new_list[i]))) + (re.findall(r'2{2}', str(new_list[i]))) == string:
        k = k+1
print('Вероятность равна: ', "%.4f" % (k/n))

Отредактировано zokasi (Сен. 10, 2019 19:29:48)

Офлайн

#2 Сен. 10, 2019 20:14:33

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Поиск необходимых чисел в списке

zokasi
которых есть ТОЛЬКО одна цифра 8 и ТОЛЬКО две цифры 2

zokasi
Моя идея заключалась в том, что из числа “вытаскиваются” с помощью регулярных выражений 8 и две 2,
то есть если в числе больше чем 1 восьмерка и больше чем 2 двойки то вы считаете это число истинным для условия так как вы вытащили из него то что вам требуется а остальное по барабану? тут вообще не реально сравнить строку с списком
 str(new_list[i]))) == string:
 from random import randint
def fun(string):
    lst = []
    for i in str(randint(100000, 999999)):
        if i in string:
            lst.append(i)
    return string == ''.join(sorted(lst))
        
string = '228'
n = 1000
k = sum([fun(string) for i in range(n)])
print('Вероятность равна: ', "%.4f" % (k/n))


Офлайн

#3 Сен. 10, 2019 20:35:45

zokasi
Зарегистрирован: 2019-09-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск необходимых чисел в списке

Спасибо. Вы действительно правы, сравнение было совершенно глупым. Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1, но к правильному результату подобраться не удалось.

Офлайн

#4 Сен. 10, 2019 20:43:00

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Поиск необходимых чисел в списке

zokasi
Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1, но к правильному результату подобраться не удалось.
както так?
 ...
for i in new_list:
    res = re.findall(r'8|2', str(i))
    if res.count('8') == 1 and res.count('2') == 2:
        k+=1
...



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#5 Сен. 10, 2019 21:00:14

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Поиск необходимых чисел в списке

zokasi
Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1
нормальная идея но вы просто неверно пытались, можно подсчитывать в строке
 >>> number = '56782334200'
>>> print(number.count('8') == 1 and number.count('2') == 2)
True
>>>
а можно раскладывать число на цифры и считать
 number = 56782334200
count_8 = 0
count_2 = 0
while number:
    numeral = number % 10
    if numeral == 8:
        count_8 += 1
    elif numeral == 2:
        count_2 += 1
    number //= 10
print(count_8,count_2)
или так
 number = 56782334200
lst = []
string = [8, 2, 2]
while number:
    numeral = number % 10
    if numeral == 8 or numeral == 2:
        lst.append(numeral)
    number //= 10
print(sorted(string) == sorted(lst))
тут вопрос по времени что быстрее работает

Офлайн

#6 Сен. 10, 2019 21:01:49

zokasi
Зарегистрирован: 2019-09-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск необходимых чисел в списке

Большое Вам

marvellik
нормальная идея но вы просто неверно пытались, можно подсчитывать в строке
спасибо, уже всё понятно

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version