• Предмет: Информатика
  • Автор: dariyaandreevna1101
  • Вопрос задан 1 год назад

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Найти количество удвоенных нечетных чисел среди компонентов файла.
Python


timkafey: если я понял что "удвоенные" - это числа которых в файле больше одного, то сейчас попробую помочь
dariyaandreevna1101: Удвоенные - это, например, 33, 55, 77 и тд
timkafey: упс
timkafey: все
timkafey: сделал
timkafey: у меня короче чем у него)
KnowsUser1: Соболезную)
timkafey: я рад, а не горюю)

Ответы

Ответ дал: timkafey
1

Программа в файле, я его переименовал в .txt чтоб можно было отправить, переименуй в .py.

Приложения:

KnowsUser1: Слабенько. Читать тяжело, даже 13 строчек, и проверку на "двойное" число можно было как то более логически сделать, чем просто сравнивать со "стандартами"
KnowsUser1: Работу с файлами желательно организовывать через менеджеры контекста with-as, ибо это гарантирует, что по завершению какой либо работы в пределах этого блока программа выкинет из памяти всё, что было связано с файлом и закроет его
KnowsUser1: Массив случайных чисел можно сделать в одно выражение. Совсем не обязательно сначала инициализировать массив пустых значений, а потом по индексам его заполнять. По крайней мере, в данной задаче нет необходимости в этом
timkafey: простите, но я не настолько сильно изучил python как вы
timkafey: я если честно даже в интернет смотрел насчет того как записать файл, потому-что забыл
KnowsUser1: Переменные желательно называть на английском, не используя транслитерацию, и давать им значащие имена, по крайней мере если с ними делается что то более, чем прочитать из них данные и забыть
Ответ дал: KnowsUser1
0

Ответ:

--- Python 3.8.3 ---

import typing

from typing import Callable

from typing import AnyStr

from typing import Any

from typing import Iterable

import re

import string

import random

def ClearString(RawString):

   return re.sub(r' +', ' ', re.sub(rf'[{string.punctuation}]|\n', '', RawString))

def FillFile(fname:AnyStr, data:Iterable[Any], encoding:AnyStr):

   with open(fname,'a',encoding=encoding) as f:

       f.write(' '.join(map(str, data)))  

def LoadDataFromFile(fname:AnyStr, encoding:AnyStr):

   with open(fname, 'r', encoding=encoding) as f:

       rawData = f.read()

   return rawData  

def StringCount(RawString: AnyStr, Selector: Callable[[AnyStr], bool], splitter: AnyStr) -> int:

   counter = 0

   ToAnalyse = RawString.split(splitter)

   for item in ToAnalyse:

       if Selector(item): counter += 1  

   return counter

def main():

   #1 половина задания

   RandomSeq = [random.randint(-99, 99) for _ in range(random.randint(0, 100))]

   FillFile('temp.txt', RandomSeq, 'utf-8')

   #2  половина задания

   RawText = LoadDataFromFile('temp.txt', 'utf-8')

   CleanText = ClearString(RawText)

   

   def IsDouble(s):

       temp = str(abs(int(s)))

       return len(temp) == 2 and temp[0] == temp[-1]

       

   DoubleNums = StringCount(CleanText, IsDouble, ' ')

   print(DoubleNums)

   

if __name__ == "__main__":

   main()

Объяснение:

Вас заинтересует