Войти

Показать полную графическую версию : помогите новичку с питоном.


kontox
14-03-2013, 20:26
У меня есть файл с данными по тесту(txt). испытуемые отвечали на 14 вопросов по 5 раз. Испытуемые отделены друг от друга пустой строкой. там помечено 1 значит испытуемый правильно ответил, 0 — ошибся. Подскажите какой написать код, чтобы вычислить вероятность ошибки для каждого из испытуемых и вывести эти вероятности на экран.
Иными словами каждый испытуемый всего прорешал 70 задач.что решил правильно, то 1.
Если сложить все решенные задачи и поделишь на 70, то получишь вероятность того, что испытуемый решит правильно следующую задачу.
буду благодарен за помощь.

lxa85
14-03-2013, 21:18
буду благодарен за помощь. »
Интересно, насколько циничным будет дать ссылки на документацию?
1 (http://www.intuit.ru/department/pl/python/6/) 2 (http://ru.wikibooks.org/wiki/%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA_Python_3.1) 3 (http://ru.wikibooks.org/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_%D0%BF%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D 1%83_Python_3.1) 4 (http://ru.wikisource.org/wiki/%CF%EE%E3%F0%F3%E6%E5%ED%E8%E5_%E2_Python_3_%28%CF%E8%EB%E3%F0%E8%EC%29) 5 (http://notabenoid.com/book/5672/) 6 (http://ru.wikibooks.org/wiki/Python) 7 (http://python.ru/docs/) http://docs.python.org/3/
...
У меня есть файл с данными по тесту(txt) »
if __name__ == '__main__':
main()

os.chdir('D:\\site')
cwd = os.getcwd()

tf="D:\\site\\access.log"
Версия Windows.

f = open(textfile)#textfile-- переменная с именем файла
f.seek(0)

newfile="D:\\site\\file.txt"
nf=open(newfile,mode='wt')
nf.seek(0)
подробнее (http://docs.python.org/3.3/library/filesys.html)
Испытуемые отделены друг от друга пустой строкой. »
for lines in f:
#анализ строк файла
там помечено 1 значит испытуемый правильно ответил, 0 — ошибся »
Помечено не известно как, поэтому предложу использовать функцию split (http://docs.python.org/3.3/library/stdtypes.html#str.split) с дальнейшим анализом.Если сложить все решенные задачи и поделишь на 70, то получишь вероятность того, что испытуемый решит правильно следующую задачу. »
С арифметикой я надеюсь справитесь самостоятельно.
Для работы с файлами сделать импорт соотв. библиотек:

import os, sys, fnmatch, linecache
import fileinput


Объявление процедуры:
def begin_parsing(textfile):

kontox
14-03-2013, 21:49
lxa85, Вы неоценимы. Уважаю профессионалов и искренне рад помощи.

касательно разделены строкой это так

0,1,0,1,0,1,1,1,0,0,1,1,1,1
1,0,1,0,1,1,1,1,1,0,1,1,1,0
1,0,1,0,1,0,0,1,1,1,0,1,1,1
1,0,0,1,1,1,1,0,0,0,1,1,1,0
1,0,0,1,1,1,1,1,1,0,1,1,1,1

0,1,1,1,0,1,0,0,1,0,1,1,1,0
1,1,1,1,0,1,1,1,1,0,1,1,0,0
1,1,1,1,1,0,1,1,1,0,0,1,1,0
1,1,1,1,0,1,1,1,1,0,1,1,1,0
1,1,1,0,1,0,1,1,1,0,1,1,1,1

lxa85
14-03-2013, 22:10
def main():
pass

if __name__ == '__main__':
main()
s='0,1,1,1,0,1,0,0,1,0,1,1,1,0'
splts=s.split(',')
print (splts)
one=0
for i in s:
if i=='1':
one=one+1
print (one)

Остатки было роскоши. "Хождение по директориям"
Кусок скрипта с рабочими помарками.

def walk(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
(dirname, filename) = os.path.split(path) #get dirname and filename
(shortname, fextension) = os.path.splitext(path)
#if fextension==mask :
# getpart(path) #begin parsing
else:
walk(path)
for names in os.listdir(dir):
print(names)

(dirname, filename) = os.path.split(path) #get dirname and filename
# for names in os.listdir(dir):
# print(names)
## (shortname, fextension) = os.path.splitext(path)
#if fextension==mask :
# getpart(path) #begin parsing
#print('work done at ',path)
# print('work done at ',filename)
number = str.split(filename,' ')
#number[0]
lennum = str.split(number[0],'.')
if len(lennum)==3 :
for names in os.listdir(dir):
print(names)

print('work done at ',filename)

def main():
pass
if __name__ == '__main__':
main()
# print (sys.argv)
# work_dir = os.path.dirname(sys.argv[0])
#get work directory. Now it's a constant,
os.chdir('D:\\Temp')
cwd = os.getcwd()
walk(cwd)

Все остальное банально и не интересно:
Анализ пустой строки и арифметика.

kontox
14-03-2013, 22:42
да с арифметикой разберусь это самое простое
Вопрос только по коду
1. самое первое я сначала импортирую библиотеку, и только потом начинаю объявлять процедуру? Такова последовательность?

2. касательно разделения

сначало пишу for lines in f:
а потом уже
def main():
pass

if __name__ == '__main__':
main()
s='0,1,1,1,0,1,0,0,1,0,1,1,1,0'
splts=s.split(',')
print (splts)
one=0
for i in s:
if i=='1':
one=one+1
print (one)

3. кусок с крипта, где вы дает пояснения #
он к чему относится.

lxa85, простите ,что вопросами мучаю, но это мой первый опыт. с глазами по полтиннику смотрю.

lxa85
15-03-2013, 00:09
Ну что же ты глупенький то какой. Я сам питон не знаю, осваиваю по чуть чуть :). Мне самому не совсем понятен фокус с функцией main. Поэтому действовал по правилу сначала описываются функции, а только потом они вызываются (как в паскале, можно использовать то, что определено ДО, а не ПОСЛЕ).
У тебя получится что то вроде:

#-------------------------------------------------------------------------------
# Name:
# Purpose:
#
# Author:
#
# Created: 30.10.2012
# Copyright: (c) lxa85 2012
# Licence: <your licence>
#-------------------------------------------------------------------------------

import os, sys, fnmatch, linecache
import fileinput

mask = '.txt'
student = [] #Массив студентов, пока глобальный и пустой

def lineparser(texfile):
# os.path.abspath (texfile,"r")
f = open(texfile)
f.seek(0)
vopros = 0 #Кол-во вопросов. Получим в процессе
st = 1 #Счетчик студентов по порядку
student = student.append()# Первый

for lines in f:
if lines == '':
#Добавляем студента, код дополнить "по вкусу"
student = student.append()
student[st] = one / vopros
#Новый студент, новые отметки
one = 0
vopros = 0
st = st + 1
#Пропускаем дальнейшую обработку
continue

# Разбор строки
splts = linestr.split(',')
#print (splts)

vopros = vopros + len(splts)
for i in s:
if i == '1':
one = one + 1

f.close()

def walk(dir):
# рекурсивный обход дирректори.
# мне был необходим, ты смотри по надобности
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
(dirname, filename) = os.path.split(path) #get dirname and filename
(shortname, fextension) = os.path.splitext(path)
if fextension==mask :
#print(filename)
lineparser(path) #begin parsing
else:
walk(path)

def main():
pass

if __name__ == '__main__':
main()
cwd = os.getcwd() #get current dir
#print (cwd)
#os.listdir(cwd)

#begin walk in directory
walk(cwd)

#Посмотрим, что получится?
for i in student:
print (i)

Возьми какую-нибудь среду разработки. Меня например PyScripter спасает. Есть у него пара недочетов, но набросать простенькую задачу -- мне за глаза.
P.S. Разумеется первая фраза не в обиду, просто первая пришла на ум и понравилась. В хорошем смысле :)

kontox
15-03-2013, 10:11
Да ладно, все ок. Я тоже развиваюсь:)))




© OSzone.net 2001-2012