这是开始循环的正确方法吗?

时间:2017-12-30 01:16:54

标签: python

问题:“电影院根据个人年龄收取不同的票价。如果一个人未满3岁,则该机票是免费的;如果他们在3到12之间,门票是10美元;如果他们超过12岁,门票是15美元。写一个循环,在其中询问用户的年龄,然后告诉他们电影票的费用。“

我放置!='quit'的原因是为最终用户提供退出程序的选项。我不知道这是否有意义。这就是我到目前为止所做的:

prompt = 'What is your age? '
age = ' ' 
while age != 'quit':
    age = input(prompt)
    age = int(age)
    if age < 3:
            price = 0
    if age > 3:
            price = 10
    if age < 12:
            price = 15
print('The price of your ticket is ' + price)

我在最后一个print语句中遇到语法错误。

2 个答案:

答案 0 :(得分:1)

序言:通常,您应该编写代码应该完成的内容。此外,如果您在.py文件中为我(以及任何其他想要帮助的人)方便的代码编写代码会很有帮助。我无法将您的代码粘贴到python解释器中,因此我必须将其粘贴到文件中,但我必须删除所有这些&#34;&gt;&gt;&gt;&#34;和&#34; ...&#34;。

在这种情况下,我将推断您的要求是

  1. 获取用户的年龄并打印出来。
  2. 验证输入并继续询问年龄,直到输入有效。
  3. 你遇到的问题是戒烟的条件会导致问题:

    ~/Desktop $ python3 stack_overflow.py
    What is your age? 32
    Age : 32
    What is your age? quit
    Age : quit
    Traceback (most recent call last):
      File "stack_overflow.py", line 6, in <module>
        age = int(age)
    ValueError: invalid literal for int() with base 10: 'quit'
    

    因此,让我们得到我们想要的逻辑,然后我们将在python中看到如何做到这一点。

    <get a valid input>
    <decide the ticket price based on said valid input>
    

    需要注意的一点是,在python中,由于输入有效,如果它可以转换为int,我们可以尝试将其转换为int,如果转换成功,则调用输入有效。

    通过阅读错误消息,我们可以看到写作&#39;退出&#39;导致ValueError,我们可以推断出这个:

    prompt = 'What is your age? '
    age = ' '
    input_valid = False
    while !input_valid:
        age = input(prompt)
        try:
            age = int(age)
        except ValueError:
            input_valid = False
            continue
        if age > 0:
            break
    
    if age < 3:
            price = 0
    if age > 3:
            price = 10
    if age < 12:
            price = 15
    
    print('The price of your ticket is ' + str(price))
    

    现在,在这一点上,我认为你会满足你的要求。然而,lemme会给你更多的知识:

    如果您阅读以下代码该怎么办:

    age = get_age()
    price = ticket_price(age)
    print("The price of your ticked is " + str(age))
    

    这让我想起了我在YouTube上的演讲中看到的一些我觉得非常好的东西:使用您希望存在的函数编写代码然后实现这些函数。

    def get_age():
        while True:
            age = input('What is your age : ')
            try:
                age = int(age)
            except ValueError:
                continue
            if age > 0:
                return age
    
    def ticket_price(age):
        if age < 3:
            # Under 3 years old don't pay
            return 0
        if age < 12:
            # between 3 and 12, price is 10$
            return 10
        # 12 and above pay 15
        return 15
    
    age = get_age()
    price = ticket_price(age)
    
    print('The price of your ticket is ' + str(price))
    

    另外,另一个提示:每当我有类似

    的东西时
    while True:
         ...
         if <something>:
              break
    

    将while循环放在函数中并用break语句替换break是个好主意。

    鉴于我没有您的要求,我无法确定我是否解决了您的问题。话虽如此,主要的内容应该是

    1. 将输入的获取和从年龄到的转换分开 价。
    2. 将代码放入函数中,即使对于玩具示例也是值得的 像这样,因为它是实际编码的惯例。
    3. 用伪代码写出程序的逻辑也很有帮助。

答案 1 :(得分:0)

您需要更改设置循环的方式。如果用户输入“退出”作为年龄,则不应终止。对于变量年龄,这对于其余逻辑没有意义。您可以改为使用for循环并为多个用户打印价格,而不是使用while循环

for user in range(5):
    age = int(input('What is your age?'))
    if age < 3: price = 0
    if 3 <= age <= 12: price = 10
    if age > 12: price = 15
    print('The price of your ticket is: $' + str(price))