【问题标题】:Printing user output with while loop/beginner Python使用 while 循环/初学者 Python 打印用户输出
【发布时间】:2021-02-26 09:20:46
【问题描述】:

希望有一个简单的答案。如何从 while 循环中获取用户输入并打印所有输入(在编写时不使用列表)?当用户的执行次数未知时,有没有办法输出此信息?我只是一个初学者,所以如果有一个简单的方法来做到这一点只需使用基础知识,请告诉我!

这是我想问的一个例子:

假设我正在向用户询问商品的名称和价格。他们可以选择输入更多项目或停止执行。然后输出将列出物品的名称、价格和购买的总金额。我想打印出他们输入的所有这些项目。

输出格式如下:

Item Name      Item Price
Soap           $ 3.98
Detergent      $ 6.99
Chips          $ 2.50
....
....
Your Total: $xx.xx

我知道如何做其他所有事情,只是在他们停止执行后显示所有给定的输入时遇到问题。只是需要这方面的一些指导。如果有什么我可以澄清的,请告诉我。提前致谢! 我正在使用 Python 3。

【问题讨论】:

  • "不使用列表" - 为什么?如果每个项目名称都是唯一的,则可以使用 dict。如果不能保证,以某种方式使用列表将是最简单的事情。
  • 如果您不能将其存储在列表中,那么我会将其存储在多行字符串中。否则我只会在每次输入后打印每一行。如果您编写一些代码供我们使用,将会很有帮助
  • 如果您需要存储用户输入并在完成后显示它们,列表是一种很自然的方法。你能解释一下为什么不能使用列表吗?
  • @ThierryLathuille 这是课堂作业的一部分。我在作业中使用了列表(它们确实更有意义),我的老师给了我一个 0,因为我们还没有在课堂上复习它们。他在课堂上给了我们一个像这个作业这样的例子,但没有重新格式化输出,这就是我问的原因。我希望我可以使用列表!
  • 如果你被禁止使用列表,还有其他方法可以做到。您可以将项目写入临时文件,您可以使用元组(技术上 不是列表),您可以将它们全部存储在一些巨大的字符串中,项目之间带有换行符。但是这些方法解决问题的方法很不自然,也比较复杂,所以不知道老师在这里试图说明什么。

标签: python while-loop output user-input


【解决方案1】:

所以我希望这符合您的要求。 我使用了嵌套字典,以防您想要每个项目的更多信息,但我的意思是您也可以根据需要使用元组。

prompts = ["Item name", "Item price"]
flag = True
items = {}
indx = 0

while flag:
    inp = input("Type 'new' to register a new item or 'exit' to exit ")
    if inp == "new":
        output = {}
        for p in prompts:
            inp = input(p)
            output[p] = inp
        indx += 1
        items[indx] = output
        
    if inp == "exit":
        flag = False

这个比较简单,不过要说明一下步骤; 键入 new 允许您开始输入新项目。 它询问提示列表中列出的提示。 (它还使用这些提示来命名输出字典中的值)

一旦所有数据都进入,它将被索引并添加到​​项目字典中。

然后循环再次开始。您可以添加新项目,或键入 exit 停止输入项目。

编辑: 此外,我决定使用标志而不是中断,以便您可以在需要更多停止条件时进行修改。

【讨论】:

    【解决方案2】:

    我不太了解,但我认为您可以使用:

    bill = ''
    total_price = 0
    while True:
        
        item = input('(If Done Write Exit) Item Name: ')
        if item == "exit":
            break
        price = input("price: ")
    
        bill = bill + "Item: "+item + '\nPrice: ' + price + '\n\n'
    
        total_price += int(price)
    print('\n'*4)
    print(bill+'\n\nTotal Price:',total_price)
    

    【讨论】:

    • NameError: name 'price' is not defined,以及这段未经测试的代码会引发的其他错误。
    • 对不起,我忘记了“”
    • 这会在bill.append(item, price)处报错,这个逻辑好像不对,你测试过你的代码吗?
    • 刚刚修复
    • 该问题明确指出“不使用列表” - cmets 中解释了原因。所以,对不起,但你的回答没有回答这个问题......
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多