2015-05-18 5 views
-1

Вопрос:Python .txt файл и во время цикла

  1. В основном, создать пустой список.
  2. Откройте файл с именем scores.txt и используйте цикл while, который может обнаружить конец файла, чтобы прочитать оценки, и добавить их в список, а затем закрыть файл.
  3. Вызвать функцию showcores со списком результатов в качестве единственного аргумента.
  4. Внутри функции showcores, обрабатывайте список результатов.
  5. Распечатайте средний балл с точностью до двух знаков после запятой.

Это tests.txt, который содержит список из 5 цифр. Числа в файле, список по вертикали таким образом:

          86 

              92 

              77 

              83 

              96 

У меня есть код ниже теперь, но продолжают получать thiese ошибки:

линии 19, в основной()

линии 17 , в основных showscores (баллов)

линии 2, в showscores sum_scores = сумма (баллы)

TypeError: неподдерживаемый тип (ы) операнда +: 'Int' и 'ул'

def showscores(scores): 
sum_scores = sum(scores) 
average = float(sum_scores // len(scores)) 
print ("The scores are: " + str(scores)) 
print ("Average score: " + str(average)) 


def main(): 
scores = [] 
scores_file = open("scores.txt", 'r') 
line_list = list(scores_file.readlines()) 
i = 0 
while i < len(line_list): 
    scores.append(line_list[i]) 
    i += 1 
scores_file.close() 
showscores(scores) 

main() 
+2

Прочитайте соответствующие разделы о файле I/O: http://www.tutorialspoint.com/python/python_files_io.htm – sshashank124

+0

ли вы Google получившегося исключения? Я уверен, что есть много других людей, у которых была такая же проблема, как и вы, в том числе на этом сайте, и решили проблему. (Не становитесь вампиром помощи!) В основном, поскольку исключения говорят, что вы пытаетесь добавить строку в int. Сначала вам нужно передать эту строку в int (и, возможно, форматировать ее, прежде чем сможете это сделать). На какой строке возникает это исключение? Не должно произойти с фрагментом кода, который вы скопировали здесь. – JeromeJ

+0

Говорит линию 7, в showscores sum_scores = сумма (баллы) линия 28, в основных showscores (баллы) линии 30, в основные() было прибегая к помощи и исследовать ошибки, но изменения, которые я сделать дон Я работаю или не нуждаюсь в соответствии с тем, что вижу ... –

ответ

2

Никто здесь не помогает ему. Совершенно очевидно, что ОП только начал изучать программирование и имеет некоторые проблемы с этим. (Правильно?)

Давать ему все сделанные решения, чтобы получить какую-то репутацию не будет.

Я думаю, что ОП сталкивается с упражнением или домашней работой и определил шаги, которые следует выполнить.

ОП, сначала сложно, но все будет хорошо.

Описывая части, которые, кажется, вызывают у вас больше неприятностей:

  • Вам нужно открыть файл, для этого, вы можете прочитать по ссылке, которую sshashank124 дал вам (http://www.tutorialspoint.com/python/python_files_io.htm).
  • while ожидает, что вы прочитаете текстовый файл по строкам (вот почему вам нужен цикл while, чтобы повторить одно и то же действие для каждой строки). Для каждой строки добавьте свой контент в список, который вы создали ранее.
  • Дайте этот список функции showscores (что вам также нужно ввести в код), и если я пойму, какие направления вы получили, вы «обрабатываете» данные там. Потому что что в вашем текущем списке? Строка каждой строки. Обработайте его, чтобы превратить его в более практичные, фактические цифры.
  • Оттуда вы можете рассчитать, что вам было предложено (среднее и т. Д.), И отобразить его.

Для примера кода, проверьте другие ответы. Даже если они могут вас беспокоить, потому что они, ИМХО, не кажутся «дружескими друзьями». Не забудьте использовать для любимой поисковой системы, если вы получаете любой вопрос, прочитайте документацию и т.д.

EDIT: Как вы, кажется, специально бороться с петлей while. Вот небольшой код, демонстрирующий его.

Перед тем, пожалуйста, проверьте, что маленький учебник, чтобы понять основные позади него: http://www.afterhoursprogramming.com/tutorial/Python/While-Loop/

Так вместо того, for магии петли, что делает все это для вас, вот как вы могли бы сделать это с помощью while:

def main(): 
    scores = [] 

    scores_file = open("path to scores.txt", 'r') 

    line_list = list(scores_files.readlines()) 

    i = 0 
    while i < len(line_list): 
     scores.append(line_list[i]) 
     i += 1 

    showscores(scores) 
+0

Спасибо за вход, проблема, с которой я столкнулась, связана с циклами while. Я просто не могу понять их в этом отношении. Однако я понимаю большинство других частей. –

+0

@JohnFinger Мое последнее редактирование помогает вам? – JeromeJ

+0

Эта ссылка немного изменилась, но теперь я просто получаю сообщение об ошибке при попытке запустить его. Я изменил «путь к scores.txt как раз в scores.txt, вот что я думаю, что я должен был делать правильно?», А затем я получаю сообщение об ошибке, что имя f не определено. –

0

Я попробовал это, и это работает:

def showscores(scores): 
    sum_scores = sum(scores) 
    average = float(sum_scores // len(scores)) 
    print ("The scores are: " + str(scores)) 
    print ("Average score: " + str(average)) 



def main(): 
    f = open("PATH TO YOUR FILE", 'r') 
    content = list(f.readlines()) 
    scores = [] 
    for x in content: 
     scores.append(int(x.replace(" ", ""))) 

    showscores(scores) 

main() 

Надеется, что это работает для вас

+0

Где находится «цикл while», используемый в это? Просто пытаюсь понять все. Благодарю. –

+0

@JohnFinger Цикл 'for' действительно просто причудливый цикл while.Они более высоко оценены в Python, но учеников часто учат в первом цикле 'while', чтобы помочь им улучшить свои логические навыки. При использовании цикла while вы должны сами позаботиться об индексе (часто «i», который вы увеличиваете в конце каждой итерации), 'for' выполняет эту работу для вас. С некоторыми знаниями/пониманием вы можете легко переписать цикл 'for' в цикл' while'. Тем более, если у вас есть домашнее задание или что-то в этом роде, вы должны использовать 'while', а не что-то еще (пока). Удачи. – JeromeJ

+0

Вот что я пытался сделать сейчас и не могу понять, куда начать его редактировать. –

0

Это довольно простая задача ...

def showscores(scores): 
    # calculate average with two decimal place 
    print '%.2f' % (float(sum(scores))/len(scores)) 

if __name__ == '__main__': 
    scores = [] 
    f_obj = open('scores.txt') # open scores.txt 
    for line in f_obj.readlines(): # read line by line 
     if line.strip() == '': # skip empty line 
      continue 
     else: # add score to scores list 
      scores.append(int(scores)) 
    f_obj.close() # close file. 
    showscores(scores) # call showscores function 
+0

Где используется «while loop»? Просто пытаюсь понять все. Благодарю. –

+0

Цикл 'for' здесь делает то же самое с вашим циклом while, цикл через все строки в txt-файле. – tntCastle

0

решение с Обработка исключений.

Код:

import os 

def showscores(scores): 
    """ average """ 
    #- Get Total sum from the scroes list by sum in-build function. 
    total = sum(scores) 
    print "Debug 4:", total 
    #- Get average and handle dividing by zero exception. 
    try: 
     avg = total/float(len(scores)) 
    except ZeroDivisionError: 
     avg = 0.0 

    #- Print result. 
    print "average of scores is= %.2f"%avg 

    return 

def main(): 
    """ Get Scores from the file.""" 

    file_name = "scores.txt" 
    #- Check file is exists or not. 
    if not os.path.isfile(file_name): 
     print "Input file is not found." 
     return [] 

    scores = [] 
    #- Read file content. 
    with open(file_name, "rb") as fp: 
     #- Iterate file upto EOF line 
     while True: 
      line = fp.readline() 
      if not line: 
       break 
      #- Type Casting because line is string data type. 
      try: 
       scores.append(int(line.strip())) 
      except ValueError: 
       print "Exception during Type Casting.- Input %s"%line 

    return scores 


if __name__=="__main__": 
    scores = main() 
    showscores(scores) 

Выход:

Exception during Type Casting.- Input 

Exception during Type Casting.- Input 

Exception during Type Casting.- Input 

Exception during Type Casting.- Input 

Debug 4: 434 
average of scores is= 86.80 

Использование с высказывания и картой функции:

#- Read file content. 
with open(file_name, "rb") as fp: 
    content = fp.read() 

#- Get all numbers from the file content by RE and map. 
scores = map(int, re.findall("\d+", content)) 


return scores 
+0

Где используется «while loop»? Просто пытаюсь понять все. Благодарю. –

+0

@JohnFinger: хорошо, теперь проверьте. также ref- http://stackoverflow.com/questions/15599639/whats-perfect-counterpart-in-python-for-while-not-eof –

+0

Есть ли более простой способ изменить цикл for, который я редактировал в моем вопросе, чтобы цикл while в этом? Я ценю вашу помощь, но ответ слишком сложный для меня, чтобы понять. Еще раз спасибо. –

0

Это было завершено. Это то, что в конечном итоге работает:

def showscores(scores): 
    sum_scores = sum(scores) 
    average = float(sum_scores // len(scores)) 
    print ("The scores are: " + str(scores)) 
    print ("Average score: " + str(average)) 


def main(): 
    scores = [] 
    scores_file = open('scores.txt', 'r') 
    line_list = list(scores_file.readlines()) 
    scores_file.close() 
    i = 0 
    while i < len(line_list): 
     scores.append(int(line_list[i].strip())) 
     i += 1 

    showscores(scores) 

main() 
Смежные вопросы