2015-11-24 1 views
0

Это назначение:.Logic Ошибка в программе World Series

«В модуле файл WorldSeriesWinners.txt Этот файл содержит хронологический список Мировой серии команд-победителей с 1903 по 2009 . (Первая строка в файле имя команды, выиграл в 1903 году, а последняя строка название команды, которая выиграла в 2009).

Напишите программу, которая позволяет пользователю ввести имя команды, а затем отображает количество раз, когда команда выиграл World Series в период времени с 1903 по 2009

Программа требуется использовать список для чтения в данных и в цикле для подсчета раз выиграл.»

Программа должна выглядеть так:

Enter the name of a team: Chicago Cubs 
The Chicago Cubs won the world series 2 times between 1903 and 2009. 
=============================== RESTART ============================ 
Enter the name of a team: New York Yankees 
The New York Yankees won the world series 26 times between 1903 and 2009. 
=============================== RESTART ============================ 
Enter the name of a team: Lakeland Tigers 
The Lakeland Tigers never won the world series. 
=============================== RESTART ============================ 

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

Это мой код:

# Write a program that lets the user enter the name of a team 
# and then displays the number of times that team had won the World Series 
# in the time period from 1903 to 2009 

# Open the file 
def main(): 
    infile = open('WorldSeriesWinners.txt', 'r') # Open the file 

    winner = infile.readlines() # Read the contents of the file into the list 

    infile.close() # Always remember to close the file 

    team = input('Enter the name of a team: ') # Enter name of a baseball team 

    counter = 0 # If said team won a game, count how many times 
    for team in winner: 
      result = counter + 1 

    if result == 1: # Finally, print the results 
     print("The", team, "won the world series", result, "time between 1903 and 2009.") 
    elif result > 1: 
     print("The", team, "won the world series", result, "times between 1903 and 2009.") 
    else: 
     print("The", team, "never won the world series.") 

main() 

И это то, что происходит, когда я нажимаю F5:

>>> 
Enter the name of a team: Chicago Cubs 
The Philadelphia Phillies won the world series 1 time between 1903 and 2009. 
>>> 

Две вещи: Я не только не печатайте в Филадельфия Филлис, но граф неверно, потому что Филлис дважды выигрывала World Series (1980 и 2008), и поэтому название команды появляется дважды в текстовом файле (и да, я проверил, чтобы убедиться).

ответ

1

Похоже, вы использовали два разных имени переменных для одной и той же концепции: counter и result. Если вы придерживаетесь одного или другого имени переменной, ваша программа будет работать лучше.

Также неверна ваша логика цикла. Вы не должны повторно использовать имя переменной team (именно поэтому выбранный команда игнорируется), а во-вторых, вы должны реально сравнить переменную цикла с выбранной командой:

result = 0 
for test in winner: 
    if team == test: 
     result = result + 1 
3

Это происходит потому, что вы не считая команда вводит пользователь, вы просто зацикливаете на команды и считаете 1 для каждой команды. Кроме того, ваш counter всегда равен 0, и добавление 1 к нему всегда будет приводить к 1. Вам нужно увеличивать его каждый раз, когда команда выиграла, а это значит, что вам нужно следить за тем, что представляет собой текущее количество побед, а это значит, что вы должны изменить значение counter, чтобы на самом деле подсчитать количество побед команды. Что вам нужно:

for winning in winner: 
    if(team == winning): 
     counter += 1 

Это должно дать вам ответ. И вам больше не нужно result.


Ps. Вот настоящий совет, это задание для класса. Просьба о решении на SO ответит на ваше задание и заработает вам оценку, но вы будете учиться копировать-вставить в своей жизни и не решать проблему. Пожалуйста, сделайте все возможное, чтобы решить это самостоятельно.

+0

Благодарим вас за консультацию. На самом деле я плохо себя чувствую. Я все еще новичок в программировании, и, хотя я чувствую, что у меня довольно хорошее понимание терминов и понятий, воплощение его в жизнь иногда может полностью запугать мой разум. Я посмотрел предыдущие задания и смог приблизиться к этой конкретной проблеме, но помню, как форматировать эти циклы подсчета, по какой-то причине я полностью потерялся, хотя я * сделал это раньше. –

+1

Есть что-то, называемое [сухой пробег] (http://theteacher.info/websites/ocr_alevel/WebPages/F452_ProgTechn/DryRuns/DryRuns.html), практикуйте это усердно. И научитесь использовать отладчик и проверяйте переменные при запуске по очереди. – Kartik

+0

Спасибо, @ Картик. Кстати, я набрал контур счетчика, но он по-прежнему считается неточно. Но я отвечу на ваш совет и попытаюсь решить это самостоятельно. –

2

Я работал у других народов ответов на полный кусок кода

def main(): 
    infile = open('WorldSeriesWinners.txt', 'r') # Open the file 

    winners = infile.readlines() # Read the contents of the file into the list 

    infile.close() # Always remember to close the file 

    team = input('Enter the name of a team: ') # Enter name of a baseball team 

    counter = 0 # If said team won a game, count how many times 

    for winner in winners: 
     if team == winner: 
      counter = counter + 1 

    if counter == 1: # Finally, print the results 
     print("The", team, "won the world series", counter, "time between 1903 and 2009.") 
    elif counter > 1: 
     print("The", team, "won the world series", counter, "times between 1903 and 2009.") 
    else: 
     print("The", team, "never won the world series.") 

main() 

ошибки в исходной программе:

  • Граф был неправильно

Вы были инициализация counter с 0. Затем в цикле вы выполняете counter + 1, а затем присваиваете его result. Но каждая итерация цикла делала то же самое, поэтому счет был бы равен 1. Вам нужно было повторно использовать счетчик, чтобы он увеличивался на каждой итерации. (Изменение это не вызывает result больше не будет необходимости, так что остальная часть программы была соответствующим образом обновлена ​​с counter.)

Вы также должны сравнивать текст, введенный в переменную team к петлям переменной. В противном случае счетчиком было бы количество элементов в файле.

  • Название команды было неправильно

Вы повторно в переменную team для цикла.

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

+0

Спасибо, но он по-прежнему считается неправильным. –

0

Хорошо, я выяснил самую большую проблему, о которой никто в этой теме не указал: мне пришлось полоса и разделить линии! Когда я напечатал файл в оригинальной форме, это был всего один блок с кучей '\ n' между каждой командой. Это, почему он посчитал неправильно! Итак, когда я использовал разделив '\ n' и разделил строки между каждой из команд, мой код смог работать. Кроме того, я преобразовал входные данные в строчные буквы, чтобы вводить регистр без учета регистра.

И теперь, мое решение:

# Write a program that lets the user enter the name of a team 
# and then displays the number of times that team had won the World Series 
# in the time period from 1903 to 2009 

# Open the file 
def main(): 
    infile = open('WorldSeriesWinners.txt', 'r') # Open the file 

    for line in open('WorldSeriesWinners.txt'): 
     line = line.rstrip('\n')# But wait, strip the newlines first! 

    winners = infile.read().splitlines() # Read the contents of the file into the list 

    infile.close() # Always remember to close the file 

    team = input('Enter the name of a team: ') 

    counter = 0 # If said team won a game, count how many times 

    for winner in winners: # convert input to lowercase for case-insensitive input 
     if team.lower() == winner.lower(): 
      counter = counter + 1 

    if counter == 1: # Finally, print the results 
     print("The", team, "won the world series", counter, "time between 1903 and 2009.") 
    elif counter > 1: 
     print("The", team, "won the world series", counter, "times between 1903 and 2009.") 
    else: 
     print("The", team, "never won the world series.") 


main() 

Самый большой урок, который я узнал, был напечатать файл в Python, и посмотрите, есть ли какие-либо потенциальные проблемы с этим!