我正在尝试在python中运行while循环。我可以让它的大部分功能正常但部分代码没有正常工作,我一直在尝试不同的方法来解决它,但我不能让它完全按照我的意愿去做。
我正在尝试编写一个程序,该程序重复读取数字直到用户输入“完成”。输入“完成”后,打印出数字的总数,计数和平均值。如果用户输入的数字不是数字,请使用try和except检测错误并打印错误消息并跳到下一个数字
这是我的代码:
total=0
number=None
count=0
while True:
num=raw_input('Enter a number: ')
print 'Enter a number',num
for intervar in num:
count=count+1
if num=='done':
break
else:
try:
number=int(num)
if number is int:
continue
except:
print 'bad data'
total=total+number
print 'Enter a number:',number
print 'Total is',total
print 'Count is',count
当我输入3,4,5时此代码的输出为:
Enter a number 3
Enter a number 4
Enter a number 5
Enter a number nine
bad data
Enter a number done
Enter a number: 5
Total is 5
Count is 12
代码应该是
Enter a number 3
Enter a number 4
Enter a number 5
Enter a number bad data
Enter a number done
Total is 12
Count is 3
答案 0 :(得分:3)
你至少还有三个问题,在这里
问题1
for intervar in num:
count=count+1
此时num
是一个字符串,您正在迭代该字符串中的字符,递增count
。 for循环基本上等于
count += len(num)
您想要计算所有输入还是仅计算正确输入的数字?
问题2
的缩进
total=total+number
错了。它必须在while循环中。此外,在添加到变量时使用+=
。
问题3
is
运算符比较两个对象的对象标识。在这种情况下,比较结果为真,iff number
是类 int
if number is int:
continue
你想要的是:
if isinstance(number, int):
[...]
但是,这是多余的,因为在number = int(num)
number
之后总是 int
。
答案 1 :(得分:3)
以下是您重新安排的代码:
total=0
count=0
while True:
num=raw_input('Enter a whole number: ')
try:
# just try to convert it
number=int(num)
# success -> accumulate
total += number
count += 1
except ValueError:
# if it isn't an integer, maybe they're done
if num.lower() == 'done':
break
else:
print 'bad data'
print 'Total is',total
print 'Count is',count
这是另一种选择
# keep all the numbers in a list for use later
numbers = list()
while True:
num=raw_input('Enter a whole number: ')
try:
# just try to convert it
numbers.append(int(num))
except ValueError:
# if it isn't an integer, maybe they're done
if num.lower() == 'done':
break
else:
print 'bad data'
print 'Total is', sum(numbers)
print 'Count is', len(numbers)
答案 2 :(得分:2)
使用列表跟踪数字,在输入会话结束时执行计算。
numbers = []
while True:
input = raw_input('Enter a whole number: ')
try:
numbers.append(int(input))
except ValueError:
if input is not None and input.lower() == 'done':
break
else:
print 'Invalid input.'
length = len(numbers)
total = sum(numbers)
average = total/count
print 'Total is', total
print 'Count is', length
print 'Average is', average
答案 3 :(得分:1)
您要做的是确定总计数的增量
total=0
number=None
count=0
while True:
input = raw_input('Enter a whole number: ')
try:
number=int(input)
total += number
except:
if input.lower() == 'done':
break
else:
print 'bad data'
continue
count += 1
print 'Total is',total
print 'Count is',count
print 'Average is', total/count
注意我将变量名称从num更改为输入,因为它并不总是一个数字...也检查数字的类型是不正确所以我也改变了...你只想增加它的数字所以我把它放在试试中...也是你的计数我改为不循环所有输入的字符,而是每次输入时只计数1
更好的方法是编写一个数字检查函数
total=0
number=None
count=0
def check_int(str):
if str[0] in ('-', '+'):
return str[1:].isdigit()
return str.isdigit()
while True:
input = raw_input('Enter a whole number: ')
if check_int(input):
total += int(input)
count += 1
elif input.lower() == 'done':
break
else:
print 'bad data'
continue
print 'Total is',total
print 'Count is',count
print 'Average is', total/count
这样做的好处使得需要尝试/除了具有相当大的开销
答案 4 :(得分:-1)
这是打印预期输出的代码。 你有一个缩进错误和太多的打印。
total = 0
number = None
count = 0
while True:
num = raw_input('Enter a number: ')
if num == 'done':
break
else:
try:
number = int(num)
if number is int:
continue
except:
print 'bad data'
count += 1
total += number
print 'Total is',total
average = float(total)/float(count)
print 'average for %s is %s'%(count, average)