Как разобрать несколько входов в словарь? - PullRequest
0 голосов
/ 24 февраля 2019

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

(1) Запросить у пользователя заголовок для данных.Выведите заголовок.(1 pt)

Ex:
Enter a title for the data:

Number of Novels Authored

You entered: Number of Novels Authored

(2) Запрашивает у пользователя заголовки двух столбцов таблицы.Выведите заголовки столбцов.(1 балл)

Ex:
Enter the column 1 header:

Author name

You entered: Author name

Enter the column 2 header:

Number of novels

You entered: Number of novels

(3) Запрашивать у пользователя данные.Точки данных должны быть в следующем формате: строка, int.Сохраните информацию до запятой в строковую переменную, а информацию после запятой в целое число.Пользователь введет -1, когда они закончат вводить точки данных.Выведите данные точек.Сохраните строковые компоненты точек данных в списке строк.Сохраните целочисленные компоненты точек данных в списке целых чисел.(4 балла)

Ex:
Enter a data point (-1 to stop input):

Jane Austen, 6

Data string: Jane Austen

Data integer: 6

(4) Выполните проверку ошибок для записей точек данных.Если возникает какая-либо из следующих ошибок, выведите соответствующее сообщение об ошибке и снова запросите правильную точку данных.• Если в записи нет запятой • Вывод: Ошибка: в строке нет запятой.(1 pt) • Если запись содержит более одной запятой • Вывод: ошибка: слишком много запятых при вводе.(1 pt) • Если запись после запятой не является целым числом • Вывод: ошибка: запятая не сопровождается целым числом.(2 балла)

Ex:
Enter a data point (-1 to stop input):

Ernest Hemingway 9

Error: No comma in string.

Enter a data point (-1 to stop input):

Ernest, Hemingway, 9

Error: Too many commas in input.

Enter a data point (-1 to stop input):

Ernest Hemingway, nine

Error: Comma not followed by an integer.

Enter a data point (-1 to stop input):

Ernest Hemingway, 9

Data string: Ernest Hemingway

Data integer: 9

(4) Вывести информацию в отформатированную таблицу.Заголовок выровнен по правому краю с минимальным значением ширины поля 33. Минимальное значение ширины поля столбца 1 равно 20. Минимальное значение ширины поля столбца 2 составляет 23. (3 точки)

Ex:
        Number of Novels Authored
Author name         |       Number of novels
--------------------------------------------
Jane Austen         |                      6
Charles Dickens     |                     20
Ernest Hemingway    |                      9
Jack Kerouac        |                     22
F. Scott Fitzgerald |                      8
Mary Shelley        |                      7
Charlotte Bronte    |                      5
Mark Twain          |                     11
Agatha Christie     |                     73
Ian Flemming        |                     14
J.K. Rowling        |                     14
Stephen King        |                     54
Oscar Wilde         |                      1

(5) Вывести информацию в виде отформатированной гистограммы.Каждое имя выровнено по правому краю с минимальным значением ширины поля 20. (4 балла)

Ex:
         Jane Austen ******
     Charles Dickens ********************
    Ernest Hemingway *********
        Jack Kerouac **********************
 F. Scott Fitzgerald ********
        Mary Shelley *******
    Charlotte Bronte *****
          Mark Twain ***********
     Agatha Christie *************************************************************************
        Ian Flemming **************
        J.K. Rowling **************
        Stephen King ******************************************************
         Oscar Wilde *

Моя попытка заключается в следующем: закомментированные разделы - это то, что я пробовал или пытался.

title = input("Enter a title for the data:\n")

print('You entered:',title)

col1 = input("\nEnter the column 1 header:\n")

print('You entered:',col1)

col2 = input("\nEnter the column 2 header:\n")

print('You entered:',col2)

datapoint = input("\nEnter a data point (-1 to stop input):\n")


while datapoint != '-1':
    if datapoint == '-1':
        break
    my_dict = {}
    if ',' not in datapoint:
        #hasComma = False
        print('Error: No comma in string.\n')
        datapoint = input("Enter a data point (-1 to stop input):\n")
    else:
        #hasComma = True
        split = datapoint.split(',')
        first = split[0].strip()
        second = split[1].strip()

        my_dict[first] = second

    #while hasComma == False:
     #   print('Error: No comma in string.\n')
     #   datapoint = input("Enter a data point (-1 to stop input):\n")

    #while hasComma == True:
    #    split = datapoint.split(',')
    #    first = split[0].strip()
    #    second = split[1].strip()

    #    my_dict[first] = second
    print("Data string:",first)
    print("Data integer:",second)
    break
#print("Data string:",first)
#print("Data integer:",second)

Я понимаю, что мой код очень небрежный, я новичок в этом.Как сейчас, я получаю правильно 6/17.Итак, первые три части задания работают, но все после этого неполное.Мне нужна помощь в исправлении моих циклов, чтобы я мог читать последовательные входы и проверять ошибки на каждом входе.Как только они сработают, я смогу самостоятельно составить таблицу и гистограмму.

1 Ответ

0 голосов
/ 24 февраля 2019

При правильном вводе ваша программа будет собирать только один ответ от пользователя.У вас есть этот начальный input() вызов вне цикла:

datapoint = input("\nEnter a data point (-1 to stop input):\n")

Но тогда, если это допустимый вход, ваш цикл завершается, и вы не собираете никаких дополнительных входных данных.Вместо этого переместите этот вызов в ваш цикл:

while True:
    datapoint = input("\nEnter a data point (-1 to stop input):\n")
    if datapoint == '-1':
        break

Таким образом, для каждой итерации цикла пользователю будет предложено ввести данные.Когда пользователь вводит «-1», он выходит из виду и программа завершается.

while True - сокращение от «сделать этот цикл навсегда».Добавляя break в зависимости от значения datapoint, вы можете собирать данные бесконечно, но по-прежнему останавливаться на основе условия (пользователь вводит «-1»).

...