Python 3 - 仅数字输入

0 投票
2 回答
3203 浏览
提问于 2025-04-18 03:50

我在完成一个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()

Vince

2 个回答

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

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

0

做了一些改动:

  • 增加了一个 get_int() 函数,它会不断提示你输入,直到你输入一个整数为止。

  • 用这个函数简化了你的 get_values() 函数。

  • 增加了一个 how_many 参数。这个设计遵循了“不要重复自己”的原则——如果你想改变项目的数量,只需要在一个地方修改即可。

  • 把“欢迎使用程序”的信息从 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()

撰写回答