while 循环不正确 运行
While loop is not running properly
我正在尝试 运行 在 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
这是打印您预期输出的代码。
你有一个缩进错误和太多的印刷品。
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)
这里至少还有三个问题
问题 1
for intervar in num:
count=count+1
此时 num
是一个字符串,您正在迭代该字符串中的字符,递增 count
。 for循环本质上等于
count += len(num)
你想计算所有输入还是只计算正确输入的数字?
问题2
的缩进
total=total+number
错了。它必须在 while 循环内。另外,添加到变量时使用 +=
。
问题3
is
运算符比较两个对象的对象标识。在这种情况下,比较为真,当且仅当 number
是 class int
if number is int:
continue
你想要的是:
if isinstance(number, int):
[...]
然而,这是多余的,因为在 number = int(num)
number
之后 always 一个 int
.
您要做的是修复总计数的增量
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 更改为 input 因为它并不总是一个数字......而且你对数字类型的检查不正确所以我也改变了它......你只想在它是一个数字时递增所以我把它放在 try... 还有你的计数我更改为不遍历所有输入的字符,而是每次输入某些内容时只计数 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
这样做的好处是减少了对 try/except 的需求,后者的开销相当大
这里是你的代码重新排列了一下:
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)
使用列表跟踪数字,在输入会话结束时执行计算。
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
我正在尝试 运行 在 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
这是打印您预期输出的代码。 你有一个缩进错误和太多的印刷品。
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)
这里至少还有三个问题
问题 1
for intervar in num:
count=count+1
此时 num
是一个字符串,您正在迭代该字符串中的字符,递增 count
。 for循环本质上等于
count += len(num)
你想计算所有输入还是只计算正确输入的数字?
问题2
的缩进total=total+number
错了。它必须在 while 循环内。另外,添加到变量时使用 +=
。
问题3
is
运算符比较两个对象的对象标识。在这种情况下,比较为真,当且仅当 number
是 class int
if number is int:
continue
你想要的是:
if isinstance(number, int):
[...]
然而,这是多余的,因为在 number = int(num)
number
之后 always 一个 int
.
您要做的是修复总计数的增量
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 更改为 input 因为它并不总是一个数字......而且你对数字类型的检查不正确所以我也改变了它......你只想在它是一个数字时递增所以我把它放在 try... 还有你的计数我更改为不遍历所有输入的字符,而是每次输入某些内容时只计数 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
这样做的好处是减少了对 try/except 的需求,后者的开销相当大
这里是你的代码重新排列了一下:
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)
使用列表跟踪数字,在输入会话结束时执行计算。
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