Python 2.7 / loop / break 正在改变我的结局
Python 2.7 / loop / break is changing my outcome
smallest = None
largest = None
while True :
number = raw_input('Enter a number from -10 to 9: ')
if largest < number :
largest = number
if smallest is None :
smallest = number
elif number < smallest :
smallest = number
if number == 'done': break
print 'Largest number is: ',largest
print 'Smallest number is ',smallest
我不知道为什么我的 "smallest" 没问题,而 "largest" 结果总是 完成 。我认为 "break" 以某种方式影响了它。你能指出我的错误吗?
如果您遇到 done
,您的循环应该立即 break
。但是在您的代码中,您已将中断放在最后。所以在此之前,正在执行之前的逻辑。和 done
作为一个字符串可以进行比较。
>>> None < 'done'
True
>>>
所以你的 largest
设置为 done
因为 largest < None
在这种情况下。
快速修复
我们现在将中断移到了顶部,所以这应该可以解决问题:
smallest = None
largest = None
while True :
number = raw_input('Enter a number from -10 to 9: ')
if number == 'done':
break
if largest < number :
largest = number
if smallest is None :
smallest = number
elif number < smallest :
smallest = number
print 'Largest number is: ',largest
print 'Smallest number is ',smallest
处理号码
raw_input
returns string
。但是我们想比较数字。所以我们应该将输入转换为 int
。
try:
num = int(number)
except ValueError:
print('Please enter a valid integer')
continue # skip the input and continue with the loop
问题是您首先更新 smallest
和 largest
,即使用户输入 done
。因此,首先,您应该检查输入是否为 'done'
并在更新任何数字之前立即中止。
也就是说,您的代码还有多个其他问题:
if largest < number
– 如果数字小于先前存储的数字,则更新 largest
,使其具有与 smallest
相同的逻辑。当然,这样你最终不会得到最大的数字。
raw_input()
returns 字符串,不是数字。因此,如果用户键入 5
,那么 raw_input()
returns 就是字符串 '5'
。因此,您所做的每一次比较都是一次字符串比较(例如 '2' < '5'
)。因为字符串比较是基于字符代码的,所以这对 single-digit 数字也有效,但你真的应该首先将字符串转换为正确的数字。
- 你提到了
-10
到 9
的允许范围,但你从未真正强制执行。
像这样的东西会起作用:
smallest = None
largest = None
while True:
number = raw_input('Enter a number from -10 to 9: ')
if number == 'done':
break
# convert into a number
try:
num = int(number)
except ValueError:
print('That was not a valid number')
continue # restart the loop
# validate the number range
if num < -10 or num > 9:
print('The number is out of the allowed range')
continue
if largest is None or num > largest:
largest = num
if smallest is None or num < smallest:
smallest = num
print 'Largest number is:', largest
print 'Smallest number is:', smallest
smallest = None
largest = None
while True :
number = raw_input('Enter a number from -10 to 9: ')
if largest < number :
largest = number
if smallest is None :
smallest = number
elif number < smallest :
smallest = number
if number == 'done': break
print 'Largest number is: ',largest
print 'Smallest number is ',smallest
我不知道为什么我的 "smallest" 没问题,而 "largest" 结果总是 完成 。我认为 "break" 以某种方式影响了它。你能指出我的错误吗?
如果您遇到 done
,您的循环应该立即 break
。但是在您的代码中,您已将中断放在最后。所以在此之前,正在执行之前的逻辑。和 done
作为一个字符串可以进行比较。
>>> None < 'done'
True
>>>
所以你的 largest
设置为 done
因为 largest < None
在这种情况下。
快速修复
我们现在将中断移到了顶部,所以这应该可以解决问题:
smallest = None
largest = None
while True :
number = raw_input('Enter a number from -10 to 9: ')
if number == 'done':
break
if largest < number :
largest = number
if smallest is None :
smallest = number
elif number < smallest :
smallest = number
print 'Largest number is: ',largest
print 'Smallest number is ',smallest
处理号码
raw_input
returns string
。但是我们想比较数字。所以我们应该将输入转换为 int
。
try:
num = int(number)
except ValueError:
print('Please enter a valid integer')
continue # skip the input and continue with the loop
问题是您首先更新 smallest
和 largest
,即使用户输入 done
。因此,首先,您应该检查输入是否为 'done'
并在更新任何数字之前立即中止。
也就是说,您的代码还有多个其他问题:
if largest < number
– 如果数字小于先前存储的数字,则更新largest
,使其具有与smallest
相同的逻辑。当然,这样你最终不会得到最大的数字。raw_input()
returns 字符串,不是数字。因此,如果用户键入5
,那么raw_input()
returns 就是字符串'5'
。因此,您所做的每一次比较都是一次字符串比较(例如'2' < '5'
)。因为字符串比较是基于字符代码的,所以这对 single-digit 数字也有效,但你真的应该首先将字符串转换为正确的数字。- 你提到了
-10
到9
的允许范围,但你从未真正强制执行。
像这样的东西会起作用:
smallest = None
largest = None
while True:
number = raw_input('Enter a number from -10 to 9: ')
if number == 'done':
break
# convert into a number
try:
num = int(number)
except ValueError:
print('That was not a valid number')
continue # restart the loop
# validate the number range
if num < -10 or num > 9:
print('The number is out of the allowed range')
continue
if largest is None or num > largest:
largest = num
if smallest is None or num < smallest:
smallest = num
print 'Largest number is:', largest
print 'Smallest number is:', smallest