Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   помогите новичку с питоном. (http://forum.oszone.net/showthread.php?t=256321)

kontox 14-03-2013 20:26 2111400

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

lxa85 14-03-2013 21:18 2111434

Цитата:

Цитата kontox
буду благодарен за помощь. »

Интересно, насколько циничным будет дать ссылки на документацию?
1 2 3 4 5 6 7 http://docs.python.org/3/
...
Цитата:

Цитата kontox
У меня есть файл с данными по тесту(txt) »

PHP код:

if __name__ == '__main__':
    
main()

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

    
tf="D:\\site\\access.log" 

Версия Windows.

PHP код:

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

    
newfile="D:\\site\\file.txt"
    
nf=open(newfile,mode='wt')
    
nf.seek(0

подробнее
Цитата:

Цитата kontox
Испытуемые отделены друг от друга пустой строкой. »

PHP код:

for lines in f:
        
#анализ строк файла 

Цитата:

Цитата kontox
там помечено 1 значит испытуемый правильно ответил, 0 — ошибся »

Помечено не известно как, поэтому предложу использовать функцию split с дальнейшим анализом.
Цитата:

Цитата kontox
Если сложить все решенные задачи и поделишь на 70, то получишь вероятность того, что испытуемый решит правильно следующую задачу. »

С арифметикой я надеюсь справитесь самостоятельно.
Для работы с файлами сделать импорт соотв. библиотек:

PHP код:

import ossysfnmatchlinecache
import fileinput 

Объявление процедуры:
PHP код:

def begin_parsing(textfile): 


kontox 14-03-2013 21:49 2111449

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 2111463

PHP код:

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

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

PHP код:

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

        (
dirnamefilename) = 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)==:
            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 2111472

да с арифметикой разберусь это самое простое
Вопрос только по коду
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 2111513

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

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

import ossysfnmatchlinecache
import fileinput

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

def lineparser(texfile):
  
#  os.path.abspath (texfile,"r")
    
open(texfile)
    
f.seek(0)
    
vopros #Кол-во вопросов. Получим в процессе
    
st #Счетчик студентов по порядку
    
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 
== '1':
                
one one 1

    f
.close()

def walk(dir):
# рекурсивный обход дирректори.
# мне был необходим, ты смотри по надобности
  
for name in os.listdir(dir):
    
path os.path.join(dirname)
    if 
os.path.isfile(path):
        (
dirnamefilename) = os.path.split(path#get dirname and filename
        
(shortnamefextension) = 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 2111623

Да ладно, все ок. Я тоже развиваюсь:)))


Время: 20:12.

Время: 20:12.
© OSzone.net 2001-