1

(30 відповідей, залишених у Python)

Доброго дня!

Розв'язував задачу "Пошук не парного елементу в масиві" і натрапив на такий розв'язок:

def solution(A):
    result = 0
    for number in A:
        result ^= number

    return result

Хтось може пояснити як ЦЕ працює "result ^= number"?

2

(13 відповідей, залишених у Python)

koala написав:

Виправив відображення (ім'я залишив).
І трохи змінив тест. Спробуйте запустити свій код на цьому тесті.

Дякую!
Просто супер. Все працює і без масиву та складних вибірок.
Поки існує об'єкт ми можемо його змінювати та отримувати  значення.

3

(13 відповідей, залишених у Python)

koala написав:

http://ideone.com/t8GYDZ

Дякую за красивий і простіший код. 
В своєму коді я реалізував відображення результату роботи як в поясненні до завдання "#labs: 1 0 0 0 0 0 0 0 0 0, exam: 0"

4

(13 відповідей, залишених у Python)

koala написав:

Судячи з умови, ці параметри мають бути власними у кожного студента, а ви їх зробили спільними. Тому вони зайві в тому місці і мають бути внесені у конструктор.
Так. Ви скидаєте дані в спільний масив, потім перебором там шукаєте потрібного студента (причому випадково це у вас спрацьовує, бо студент лише один) і туди зберігається оцінки? Ну дуже логічно. Цікаво подивитися, як ви свої книжки шукаєте в портфелі. Хоча ні, брешу, не цікаво.

Виправив свій код:

def is_certified(self):
        for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    return (sum(i.get("labs"))+i.get("exam"), ((sum(i.get("labs"))+i.get("exam"))/100)>=self.k,)

        return None

Тепер студент не один.

5

(13 відповідей, залишених у Python)

koala написав:

Ну, наприклад, рядки 2-8 зайві.

Після видалення попереднього визначення змінних випадає помилка:

 
>>> oleg = Student('Oleg', conf)

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    oleg = Student('Oleg', conf)
  File "<pyshell#1>", line 6, in __init__
    self.students.append({"name":self.name, "labs":[], "exam":0})
AttributeError: Student instance has no attribute 'students'
>>> 

Працює при попередньому визначенні масиву:

 
students=[]

6

(13 відповідей, залишених у Python)

koala написав:

Наприклад, так. Там ще купа проблем, як на мене, але ви питали саме про цю.

Буду вдячний, якщо відкриєте мені очі на ту купу проблем.

7

(13 відповідей, залишених у Python)

koala написав:

Чудес не буває. Такий ланцюжок можливий тільки якщо make_lab повертає об'єкт, який має метод make_lab - наприклад, self. А ви повертаєте рядок.

Я так зрозумів, що замість мого:

for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    labs=i.get("labs")
                    exam=i.get("exam")    
        return "labs: {}, exam: {}".format(" ".join(str(v) for v in labs), str(exam))    

достатнього повернути посилання на поточний об'єкт таким чином:

return self

?

8

(13 відповідей, залишених у Python)

Доброго всім дня!

Є таке завдання:
"""
Розробити класс Student для представлення відомостей про успішність слухача курсу Prometheus. Об'єкт класу має містити поля для збереження імені студента та балів, отриманих ним за виконання практичних завдань і фінального екзамена.

Забезпечити наступні методи класу:

конструктор, який приймає рядок -- ім'я студента -- та словник, що містить налаштування курсу у наступному форматі:
conf = {
'exam_max': 30, # кількість балів, доступна за здачу екзамена
'lab_max': 7, # кількість балів, доступна за виконання 1 практичної роботи
'lab_num': 10, # кількість практичних робіт в курсі
'k': 0.61, # частка балів від максимума, яку необхідно набрати для отримання сертифікату
}.
метод make_lab(m,n), який приймає 2 аргументи та повертає посилання на поточний об'єкт. Тут m -- кількість балів набрана за виконання завдання (ціле або дійсне число), а n -- ціле невід'ємне число, порядковий номер завдання (лаби нумеруються від 0 до lab_num-1). При повторній здачі завдання зараховується остання оцінка. Якщо n не задане, мається на увазі здача першого невиконаного практичного завдання. Врахувати, що під час тестування система іноді дає збої, тому за виконання завдання може бути нараховано більше балів ніж це можливо за правилами курсу, що не повинно впливати на рейтинг студента. Крім того в системі можуть міститися додаткові завдання, чиї номери виходять за межі 0..lab_num -- звичайно, бали за них не повинні зараховуватися для отримання сертифікату.
метод make_exam(m), який приймає 1 аргумент -- ціле або дійсне число, оцінку за фінальний екзамен, та повертає посилання на поточний об'єкт. Як і у випадку з практичними завданнями, оцінка за екзамен в результаті помилки іноді може перевищувати максимально допустиму.
метод is_certified(), який повертає тьюпл, що містить дійсне число (суму балів студента за проходження курсу), та логічне значення True або False в залежності від того, чи достатньо цих балів для отримання сертифікату.
Так як курс є доступним онлайн і не має дедлайнів на здачу робіт, студент може виконувати роботи в довільному порядку. Вважати, що кількість спроб на виконання кожного з завдань необмежена.

Приклад послідовності дій для тестування класу:
conf = {
'exam_max': 30,
'lab_max': 7,
'lab_num': 10,
'k': 0.61,
}
oleg = Student('Oleg', conf)
oleg.make_lab(1) \ # labs: 1 0 0 0 0 0 0 0 0 0, exam: 0
.make_lab(8,0) \ # labs: 7 0 0 0 0 0 0 0 0 0, exam: 0
.make_lab(1) \ # labs: 7 1 0 0 0 0 0 0 0 0, exam: 0
.make_lab(10,7) \ # labs: 7 1 0 0 0 0 0 7 0 0, exam: 0
.make_lab(4,1) \ # labs: 7 4 0 0 0 0 0 7 0 0, exam: 0
.make_lab(5) \ # labs: 7 4 5 0 0 0 0 7 0 0, exam: 0
.make_lab(6.5) \ # labs: 7 4 5 6.5 0 0 0 7 0 0, exam: 0
.make_exam(32) # labs: 7 4 5 6.5 0 0 0 7 0 0, exam: 30
print oleg.is_certified() # (59.5, False)
oleg.make_lab(7,1) # labs: 7 7 5 6.5 0 0 0 7 0 0, exam: 30
print oleg.is_certified() # (62.5, True)

"""
Мій код:

class Student():
    exam_max=None
    lab_max=None
    lab_num=None
    k=None
    students=[]
    labs=None
    exam=None
    
    def __init__(self, name=None, conf=None):
        keys = conf.keys()
        self.name=name
        self.students.append({"name":self.name, "labs":[], "exam":0})
        if 'exam_max' in keys:
            self.exam_max = conf['exam_max']
        if 'lab_max' in keys:
            self.lab_max = conf['lab_max']
        if 'lab_num' in keys:
            self.lab_num = conf['lab_num']
        if 'k' in keys:
            self.k = conf['k']
       
    def make_lab(self, m=None, n=None):
        self.m = m
        self.n = n
        for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    if len(i.get("labs"))<self.lab_num:
                        while len(i.get("labs"))<self.lab_num:
                            i.get("labs").append(0)
        if self.n==None:
            for i in self.students:
                for k,v in i.iteritems():
                    if v == self.name:
                        for b in range(len(i.get("labs"))):
                            if i.get("labs")[b]==0:
                                if self.m>=self.lab_max:
                                    i.get("labs")[b]=self.lab_max
                                    break
                                else:
                                    i.get("labs")[b]=self.m
                                    break
        elif self.n>=0 and self.n<=self.lab_num-1:
            for i in self.students:
                for k,v in i.iteritems():
                    if v == self.name:
                        for b in range(len(i.get("labs"))):
                            if b==self.n:
                                if self.m>=self.lab_max:
                                    i.get("labs")[b]=self.lab_max
                                else:
                                    i.get("labs")[b]=self.m
        for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    labs=i.get("labs")
                    exam=i.get("exam")    
        return "labs: {}, exam: {}".format(" ".join(str(v) for v in labs), str(exam))                    
                                    
    def make_exam(self, m=0):
        self.m_e=m

        for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    if self.m_e>=self.exam_max:
                        i["exam"]=self.exam_max
                    else:
                        i["exam"]=self.m_e

        for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    labs=i.get("labs")
                    exam=i.get("exam")    
        return "labs: {}, exam: {}".format(" ".join(str(v) for v in labs), str(exam))

    def is_certified(self):
        for i in self.students:
            for k,v in i.iteritems():
                if v == self.name:
                    rez=sum(i.get("labs"))+i.get("exam")

            return (rez, (rez/100)>=self.k,)

        return None

Якщо виклик методів здійснюється по одному, то все працює:
>>> oleg.make_lab(1)
'labs: 1 0 0 0 0 0 0 0 0 0, exam: 0'
>>>

Але під час перевірки на сервері є запити рядком, наприклад як цей:
>>> oleg.make_lab(1).make_lab(8,0).make_lab(1).make_lab(10,7).make_lab(4,1).make_lab(5).make_lab(6.5).make_exam(32)

Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    oleg.make_lab(1).make_lab(8,0).make_lab(1).make_lab(10,7).make_lab(4,1).make_lab(5).make_lab(6.5).make_exam(32)
AttributeError: 'str' object has no attribute 'make_lab'
>>>
тоді виникає помилка.

Підкажіть, будь ласка, як виправити помилку.

9

(2 відповідей, залишених у Python)

Доброго всім дня!

Є таке завдання:

Розробити функцію clean_list(list_to_clean),
яка приймає 1 аргумент -- список будь-яких значень (рядків, цілих та дійсних чисел) довільної довжини,
та повертає список, який складається з тих самих значень, але не містить повторів елементів. Це значить, що у випадку наявності значення в початковому списку в кількох екземплярах перший "екземпляр" значення залишається на своєму місці, а другий, третій та ін. видаляються.

Написав такий код:

def clean_list(list_to_clean):
    a=list_to_clean
    b=[]
    for i in a:
        if i not in b:
            b.append(i)
    return b

Підкажіть, будь ласка, чи є засіб розділи  елементи "1" та "1.0" щоб система не вважала що вони однакові і дорівнюють "1" під час перевірки наявності в другому списку?

10

(10 відповідей, залишених у Python)

Дякую всім! Тема закрита. Нарешті сьогодні мій код спрацював. Отримав максимум балів. Після фіксації моєї оцінки став доступний варіант від викладача. Все дуже просто: він використовував .reverse() і цикл for для перебору елементів.

11

(10 відповідей, залишених у Python)

koala написав:

Читаємо уважно умову:

vitek_z написав:

Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів

Рядок '[hello, word]' містить, крім цифр та літер латинського алфавіту, ще символи '[', ']', ',', і, таким чином, не є коректним аргументом для вашої програми. Правильне рішення - додавайте перевірку, що кожне слово дійсно відповідає умові; для навчальної задачі прийнятна страусяча тактика - ігнорувати невідповідність вхідних даних, мовляв, самі ввели помилкову інформацію - самі винні в неправильному результаті, яким би він не був.

В завданні є підказка:

"""
Приклад виклику: python lab4_3.py qwe asd zxc 123
Результат: 123 zxc asd qwe
"""

А це один із результатів перевірки:

"""
Неправильно обрахований результат. Для набору вхідних параметрів ['force', 'the', 'Feel'] очікуваний результат: Feel the force. Ваш результат: 'force'
"""

12

(10 відповідей, залишених у Python)

ADR написав:
import sys
print(' '.join(reversed(sys.argv[1:])))
import sys
print(' '.join(sys.argv[1::-1]))

ps: користуйтесь дегаром, коли щось не працює

Нажаль в резутаті  [] не відокремлюють від елементів списку і виводяться як складові першого і останнього елементів списку.

13

(10 відповідей, залишених у Python)

Bartash написав:
vitek_z написав:

Якщо аргументом є рядок, то все працює. Проблема виникає, коли аргументом є список.

Підкажіть, будь ласка, як правильно переробляти список?

Що значить "аргументом є список"? Типу "(1,3,4,5)"?

Якщо програма передбачає, що аргументи можуть бути списками - треба задекларувати десь правила подання списків (синтаксис). А на базовому рівні згідно такого синтаксису потім можна перевіряти аргументи на відповідність синтаксису і у разі співпадіння парсити.

Списки типу [1,2,3]

Нажаль в умові не визначені правила подання списків "Вхідні дані: довільна, відмінна від нуля, кількість значень - аргументів командного рядка. Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів."

Але при перевірці мого коду в аргументах з'являється список вище вказаного формату і відповідно результат перевірки не правильний.

14

(10 відповідей, залишених у Python)

koala написав:

2. Яка саме проблема у вас виникає, ви так і не написали.

При виконанні: python py_test.py "hello word"
Отримуємо: word hello

Що є правильним.


При виконанні: python py_test.py [hello, word]
Отримуємо: word] [hello,

Що є НЕ правильним.

При виконанні: python py_test.py "[hello, word]"
Отримуємо: word] [hello,

Що є НЕ правильним.

15

(10 відповідей, залишених у Python)

Вітаю всіх!

Є завдання:

Вхідні дані: довільна, відмінна від нуля, кількість значень - аргументів командного рядка. Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів.

Результат роботи: рядок, що складається з отриманих значень в зворотньому порядку, записаних через пробіл. Пробіл в кінці рядка відсутній.

Наприклад
Вхідні дані: 1
Приклад виклику: python lab4_3.py 1
Результат: 1
Вхідні дані: qwe asd zxc 123
Приклад виклику: python lab4_3.py qwe asd zxc 123
Результат: 123 zxc asd qwe

Написав такий код:

import sys

print sys.argv

if len(sys.argv)==2:
    s = sys.argv[1]
else: 
    s=sys.argv[1:]

print s
print type(s)

if type(s) == str:
    s_list = s.split(' ')
    a = s_list[::-1]
    print " ".join(a)
elif type(s) == list:
    a = s[::-1]
    print " ".join(a)

Якщо аргументом є рядок, то все працює. Проблема виникає, коли аргументом є список.

Підкажіть, будь ласка, як правильно переробляти список?

16

(4 відповідей, залишених у Інші мови програмування)

Завдання виконав.
Мій робочий варіант:

#!/bin/bash
while  [ "$PWD" != "/" ]
do
    pwd
    ls -l . | awk '/^[d]/ {print $9} '
    cd ..
done
echo /
ls -l / | awk '/^[d]/ {print $9} '

Всім дякую!
Тема закрита.

17

(4 відповідей, залишених у Інші мови програмування)

Використав варіант Chemist-i, кількість помилок збільшилася (див. файл)

18

(4 відповідей, залишених у Інші мови програмування)

Початкове завдання описано в файлі що додаю

19

(4 відповідей, залишених у Інші мови програмування)

Доброго всім дня!

Постала задача пройтися від поточного каталогу до кореневого / і показати всі каталоги які є в пройдених на шляху каталогах.
Написав скрипт:
#!/bin/bash

p=$1
k=/
while  [ $p != $k ]
do
    pwd
    ls -l . | awk '/^[d]/ {print $9} '
    cd ..
done

Чи може хто підказати як виправити умову while щоб цикл зупинявся після перегляду кореневого каталогу /?

Дякую?

Доброго дня!

Програмування на С++ в середовищі Ubuntu SDK
Система Ubuntu 14.04

Умова задачі: Створити клас Вектор.
Складові Полярні координати (довжина і кут),
конструктор з параметрами, деструктор,
методи обчислення координат кінця вектора,
метод виведення даних.
Необхідно: Описати клас, об’єкт; вивести
дані об’єкту; обчислити і
вивести координати кінця
вектора.
Чомусь не працює формула розрахунку координат. Що я неправильно написав в коді?
Дякую за допомогу.