Python 3 - 仅数字输入

时间:2014-04-23 00:33:51

标签: python boolean logic

我无法完成Python任务。我使用的是Python 3.0 因此程序要求用户输入一组20个数字,将它们存储到一个列表中,并对其进行计算以输出最大数字,最小数,总和和平均数。

现在,一切正常,除了一件事!如果用户输入非数字,我希望程序再次询问输入。 我很难做到这一点,我想到了一个布尔变量,我不确定。

非常感谢你的帮助。 这是我的代码:

import time

#Defining the main function
def main():
    numbers = get_values()
    get_analysis(numbers)

#Defining the function that will store the values    
def get_values():
    print('Welcome to the Number Analysis Program!')
    print('Please Enter A Series Of 20 Random Numbers')
    values =[]    
    for i in range(20):
        value =(int(input("Enter A Random Number " + str(i + 1) + ": ")))
        values.append(value)
        #Here we store the data into a list called "values"


    return values

#Defining the function which will output the numbers. 
def get_analysis (numbers):

    print(".................................")
    print("The Lowest Number Is:",  min(numbers))
    time.sleep(1)
    print("The Highest Number Is:", max(numbers))
    time.sleep(1)
    print("The Sum The Numbers Is:", sum(numbers))
    time.sleep(1)
    print("The Average The Numbers Is:", sum(numbers)/len(numbers))
    print(".................................")

main()

文斯

2 个答案:

答案 0 :(得分:0)

我在Python 3上运行它并得到了这个

$ python3 so.py
Welcome to the Number Analysis Program!
Please Enter A Series Of 20 Random Numbers
Enter A Random Number 1: 3
Enter A Random Number 2: 4
Enter A Random Number 3: 2
Enter A Random Number 4: 6
Enter A Random Number 5: 4
Enter A Random Number 6: 3
Enter A Random Number 7: 5
Enter A Random Number 8: 6
Enter A Random Number 9: 8
Enter A Random Number 10: 9
Enter A Random Number 11: 7
Enter A Random Number 12: 6
Enter A Random Number 13: 5
Enter A Random Number 14: 4
Enter A Random Number 15: 3
Enter A Random Number 16: 2
Enter A Random Number 17: 4
Enter A Random Number 18: 6
Enter A Random Number 19: 7
Enter A Random Number 20: 1
.................................
The Lowest Number Is: 1
The Highest Number Is: 9
The Sum The Numbers Is: 95
The Average The Numbers Is: 4.75
.................................

这很好用。现在做一个像这样的功能

import re
def isInteger(x):
    seeker = re.compile("-?[0-9]+")
    return bool(seeker.search(x))

您可以使用带标题的循环

while not isInnteger(x):
    ##get number

重复直到实际输入一个数字。

答案 1 :(得分:0)

一些变化:

  • 添加了一个get_int()函数,该函数会反复提示,直到输入一个整数

  • 用它来简化您的get_values()功能

  • 添加了how_many参数。跟随“不要重复自己”#34;原则 - 如果您想更改项目数量,可以在一个地方进行

  • 欢迎来到"欢迎来到该计划"从get_values发送到main的消息

  • 不要把每一个字或者查克诺里斯带给你的资本化

  • 我将get_analysis()重命名为show_analysis(),因为它会打印结果而不是返回结果;准确的功能名称很重要!

  • 我将分析简化为数据驱动的循环;这更像是一种品味而不是其他任何东西,但我认为它更清晰,更容易理解,特别是随着测试数量的增加,也有助于不要重复自己

和最终结果:

import time

def get_int(prompt):
    while True:
        try:
            return int(input(prompt))
        except ValueError:
            # couldn't parse as int
            pass

def get_values(how_many):
    return [get_int("Enter #{}: ".format(i)) for i in range(1, how_many+1)]

def average(lst):
    return sum(lst) / len(lst)

def show_analysis(numbers):
    tests = [
        ("The lowest value is", min),
        ("The highest value is", max),
        ("The sum is", sum),
        ("The average is", average)
    ]
    print(".................................")
    for label,fn in tests:
        print("{} {}".format(label, fn(numbers)))
        time.sleep(.5)
    print(".................................")

def main():
    how_many = 20
    print("Welcome to the Number Analysis program!")
    print("Please enter {} integers".format(how_many))
    numbers = get_values(how_many)
    show_analysis(numbers)

main()