Четвърто домашно

  1. Да се имплементира генератор-функция primes, която итерира всички прости числа в нарастващ ред

    Пример

    p = semi_primes()

    print(next(p)) # 2

    2

    print(next(p)) # 3

    3

    print(next(p)) # 5

    5

    print(next(p)) # 7

    7

    print(next(p)) # 11

    11

    print(next(p)) # 13

    Не трябва ли да е p = primes() :?

  2. Да, трябва да е primes() и semiprimes(). Виж теста:

    "primes = solution.primes()"
    "semiprimes = solution.semiprimes()"
    

    :)

    import unittest import solution

    class PrimesTest(unittest.TestCase): def test_first_few_primes(self): primes = solution.primes() self.assertEqual(2, next(primes)) self.assertEqual(3, next(primes)) self.assertEqual(5, next(primes)) self.assertEqual(7, next(primes)) self.assertEqual(11, next(primes)) self.assertEqual(13, next(primes))

    def test_first_few_semi_primes(self):
        semiprimes = solution.semiprimes()
        self.assertEqual(4, next(semiprimes))
        self.assertEqual(6, next(semiprimes))
        self.assertEqual(9, next(semiprimes))
        self.assertEqual(10, next(semiprimes))
        self.assertEqual(14, next(semiprimes))
        self.assertEqual(15, next(semiprimes))
    

    if name == 'main': unittest.main()

  3. В този ред на мисли: Очевидно се случва да допускаме грешки в условието или тестовете. Тези неща ги качваме тук: https://github.com/fmi/python-homework/tree/master/2012/04

    Правите си регистрация, използвате бутончето "Edit this file", след което ни пишете тук, какво се оправили(както е направила Стела). Поощряваме подобна помощ.

  4. Предполага се че unit тестовете имат някакъв timeout, но вярвам, че ако не ги генерира за повече от 10 минути няма да има проблем.

    А пък ти оптимизациите си ги направи и без това, така, за кеф. :P

  5. Pic or it didn't happen!

    Редакция: http://oeis.org/A001358/b001358.txt

    Намерих едно сайтче, на което има стабилно количество от semiprim-вете. Ако и вие, като мен, си мислите, че може да не ви работи съвсем както трябва втория генератор му хвърлете едно око. Има им номера и стойността, така че лесно се сравнява дали вашето n-то число е вярно ;)

    На мен ми помогна да си открия грешка

  6. Прочети пак условието и разгледай материалите за генератори(евентуално в разбъркан ред)

    def naturals():  # дефиниране на генератор функция
        number = 1
        while True:
            yield number  # магията става тук - това ще изплюе стойност и ще остане в готовност да продължи изпълнението от следващия ред
            number += 1
    

    --- Example usage:

    n = naturals()  # инстанциране на генератор обект
    for a in range(100):
        print(next(n), end=', ') # next(n) връща изпълнението в генератор до получаване на стойност чрез ключовата дума yield
    

    Редакция: Отказвам се. Днес не ми върви със стилизирането :)

    Редакция 2: Оп, схванах го. Това е пример за простичък генератор и използването му. Този тук генерира естествени числа и колкото и пъти да викаш next(n) ще ти връща следващото естествено число(ако имаше безкрайни нерви и изчислителен ресурс).

    Както и да е, разгледай материалите, особено ако не си присиствал на лекциите по темата. Още имаш време да направиш достатъчно читаво решение и за двете. Успех :)

  7. Изпускаш факта, че в момента, в който прехвърлиш 2 * 97 = 194 започваш да изпускаш полупрости и макар наистина да връщаш такива и то подредени изобщо не са коректни... Освен това така както си го написал си ограничен до 325 полупрости, които както вече споменах дори не са първите 325 такива ;)

Трябва да сте влезли в системата, за да може да отговаряте на теми.