【问题标题】:How to parse multiple inputs into a dictionary?如何将多个输入解析为字典?
【发布时间】:2019-02-24 16:16:14
【问题描述】:

接下来是我一整天都被难倒的家庭作业和我的代码。我可能试图以错误的方式解决这个问题。你们能告诉我我做错了什么吗?

(1) 提示用户输入数据标题。输出标题。 (1分)

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) 提示用户输入数据点。数据点必须采用以下格式:字符串、整数。将逗号之前的信息存储为字符串变量,将逗号之后的信息存储为整数。用户输入完数据点后将输入 -1。输出数据点。将数据点的字符串组件存储在字符串列表中。将数据点的整数分量存储在整数列表中。 (4分)

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

Jane Austen, 6

Data string: Jane Austen

Data integer: 6

(4) 对数据点条目进行错误检查。如果出现以下任何错误,则输出相应的错误消息并再次提示输入有效数据点。 • 如果条目没有逗号 • 输出:错误:字符串中没有逗号。 (1 分) • 如果条目有多个逗号 • 输出:错误:输入中的逗号过多。 (1 分) • 如果逗号后的条目不是整数 • 输出:错误:逗号后面没有整数。 (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 的正确率。所以任务的前三个部分是有效的,但之后的一切都不完整。我需要帮助修复我的循环,以便我可以读取连续的输入并检查每个输入的错误。一旦这些工作正常,我应该能够自己找出表格和直方图。

【问题讨论】:

    标签: python python-3.x loops while-loop


    【解决方案1】:

    如果输入有效,您的程序将只收集用户的单个响应。你有这个初始的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 是“永远执行此循环”的简写。通过根据datapoint 的值添加break,您可以无限期地收集数据,但仍会根据条件(用户输入'-1')停止。

    【讨论】:

    • 太棒了,非常感谢!我知道它必须是这样的小东西。我想通过练习我会发现/不让这些错误更容易。
    • 你绝对会的;事情就是这样:)
    猜你喜欢
    • 2020-01-07
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多