Форум сайта python.su
0
Существует список из шестизначных чисел. Мне нужно посчитать вероятность нахождения в списке чисел, в которых есть ТОЛЬКО одна цифра 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)
Офлайн
73
zokasi
которых есть ТОЛЬКО одна цифра 8 и ТОЛЬКО две цифры 2
zokasiто есть если в числе больше чем 1 восьмерка и больше чем 2 двойки то вы считаете это число истинным для условия так как вы вытащили из него то что вам требуется а остальное по барабану? тут вообще не реально сравнить строку с списком
Моя идея заключалась в том, что из числа “вытаскиваются” с помощью регулярных выражений 8 и две 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))
Офлайн
0
Спасибо. Вы действительно правы, сравнение было совершенно глупым. Была также попытка просто подсчитывать в каждом числе 2 и 8, и если две 2 и одна 8, то счетчик +1, но к правильному результату подобраться не удалось.
Офлайн
294
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]
Офлайн
73
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))
Офлайн
0
Большое Вам
marvellikспасибо, уже всё понятно
нормальная идея но вы просто неверно пытались, можно подсчитывать в строке
Офлайн