Python 3 - 仅数字输入
我在完成一个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()