python 入门编程求解

马梦娇 2020-04-16 07:49:57
题目:编写程序实现如下功能:从键盘输入多个数,直到直接输入回车退出。这些数字存入在一个列表中,计算并输出该列表的长度,最大值,最小值,和值,平均值,标准差,中位数。
(要求考虑用户输入了非数字的情况,也要求考虑用户一个数字也没有输入直接回车,即输入了一个空列表的情况,要求对这些异常情况进行处理)



以上是我自己写的代码与运行结果,我的问题就是为什么我不输入数字返回结果不是我实现设定好的提示语句而是直接报错,大家帮我看看我的问题在哪里,以及需要怎么改进才能把这道题完整地运行出来。我目前的代码还不满足题目中要求的输入空列表等异常情况。
...全文
440 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
crifan 2020-04-21
  • 打赏
  • 举报
回复
简答:那主要是因为,你把input的字符串,直接用eval去执行,所以 字符串d 变成变量d,由于没定义,所以报错了。
直接贴出(我花了大量精力)帮你改写后的,相关部分的,代码:

inputValueList = []
summary = 0

while True:
inputStr = input('请输入数值:')
if not inputStr:
# 输入的是空字符串
break

try:
curInputValue = int(inputStr)
print("inputStr=%s -> curInputValue=%s" % (inputStr, curInputValue))
except ValueError as intErr:
print("Convert %s to int error: %s" % (inputStr, intErr))

# 如果是int整数就没必要再去检测是否是浮点数了
if curInputValue is not None:
try:
curInputValue = float(inputStr)
isFloat = True
print("inputStr=%s -> curInputValue=%s" % (inputStr, curInputValue))
except ValueError as floatErr:
print("Convert %s to float error: %s" % (inputStr, floatErr))

if curInputValue is not None:
summary += curInputValue
inputValueList.append(curInputValue)
print("summary=%s, inputValueList=%s" % (summary, inputValueList))
else:
print("您输入的不是数字,请重新输入!")


详解:
见专门为你的写的帖子:
【问答】python入门编程求解
和:
【已解决】Python中如何判断input输入的是整型或浮点数的数字

weixin_45903952 2020-04-17
  • 打赏
  • 举报
回复
eval 先于提示出错,还没运行到提示的语句
shaelyn爱学习 2020-04-17
  • 打赏
  • 举报
回复
亲可以试下用try .....except Exception 。可以把用户输入不合法的抛出就行
shaelyn爱学习 2020-04-17
  • 打赏
  • 举报
回复
亲你好,可以试下用try ,except Exception 抛出异常,把不要的类型抛出就行。
paullbm 2020-04-16
  • 打赏
  • 举报
回复
eval慎用!

import math

y = []
s = 0
k = 0
while 1:
    n = input('请输入数值:')
    if n == '':
        break
    try:
        num = float(n)
        k += 1
        y.append(num)
    except:
        print('您输入的不是数字,请重新输入!')

print(y)
print(f'列表的长度:{len(y)}')
print(f'列表中的最大值:{max(y)}')
print(f'列表中的最小值:{min(y)}')
print(f'列表的和:{sum(y)}')
print(f'列表的平均值:{sum(y) / k}')
h = 0
for i in y:
    h += pow(i - sum(y) / k, 2)
print(f'列表的标准差:{math.sqrt(h / (k - 1))}')
sorted(y)
index = int(k / 2)
if k % 2 == 0:
    print(f'中位数为:{y[index]}和{y[index+1]}')
else:
    print(f'中位数为:{y[index]}')
不太快乐水 2020-04-16
  • 打赏
  • 举报
回复
把第二个if 改成 elif 应该吧...

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧