我正在编写一个代码,用户输入尽可能多的数字,直到他们输入Stop。每个输入都会添加到列表中。我希望输入为整数,因此输入可以正确排序,但是当'停止'输入将创建错误消息。但是,如果我输入字符串,则数字将被错误地排序。
以下是代码:
Num_List = list()
Numbers = input('Enter a number: ')
Num_List.append(Numbers)
Num_B = False
while Num_B == False:
Numbers = input('Enter a number: ')
Num_List.append(Numbers)
if Numbers == 'Stop':
Num_List.remove('Stop')
Num_List = [i for i in Num_List if i is not '']
Num_List.sort(reverse=False)
sorted(Num_List)
print(Num_List)
Num_B = True
答案 0 :(得分:1)
我怀疑您使用 python< 2.8 ,因此input()
表现不同并执行给定的内容而不是将其作为字符串返回(如eval(input())
)。给定int
时,没有问题,但是当给出“停止”时,python不知道如何处理它(除非你的代码有一个名为“Stop”的变量......)。
以下是对 python2 的代码的简单修改:
# little trick to use input with python2 or python3 !
# source: http://stackoverflow.com/a/7321970/956660
try: input = raw_input
except NameError: pass
# variables naming is prefered in snake_case
num_list = []
curr_num = '' # only use one variable for input
while curr_num.lower() != 'stop': # lower allows to be case insensitive
# raw_input prevent the "bug"
curr_num = input('Enter a number or "stop": ')
# conversion to int raise an error on invalid string, so we ignore errors
try: num_list.append(int(curr_num))
except ValueError: pass
# we print and sorted only when everything have been inputted
print('Numbers: %s' % num_list)
print('Sorted: %s' % sorted(num_list))
编辑: 重构代码为python 2& 3兼容。所以你可以在任何地方使用input()
;)
答案 1 :(得分:0)
这是我的方法:在无限循环中,获取用户的输入。如果' Quit' 则退出循环。否则,转换为整数并附加到数字列表。代码:
numbers = list()
while True:
token = input('Number: ')
if token == 'Quit':
break
numbers.append(int(token))
print('List is:', numbers)
根据原始海报忽略空字符串判断,我猜一些输入是空字符串,导致ValueError
。有了这个猜测,我修改了我的代码,以便记录那些未成功转换为数字的令牌。
numbers = list()
while True:
token = input('Number: ')
if token == 'Stop':
break
try:
numbers.append(int(token))
except ValueError:
print('Invalid token, ignore: {!r}'.format(token))
print('List is:', numbers)
我又修改了我的代码。这次,代码在Python 2和3解释器中运行良好。
from __future__ import print_function
# Level the difference between Python 2 and 3
try:
raw_input
except NameError:
raw_input = input
numbers = list()
while True:
try:
token = raw_input('Number: ')
numbers.append(int(token))
except ValueError:
if token == 'Stop':
break
print('Invalid token, ignore: {!r}'.format(token))
print('List is:', numbers)
来自Python 3的更新2的输出:
Number: 7
Number: 87
Number: 120
Number:
Invalid token, ignore: ''
Number: foo
Invalid token, ignore: 'foo'
Number: bar
Invalid token, ignore: 'bar'
Number: Stop
List is: [7, 87, 120]
Python 2运行的输出是相同的。
答案 2 :(得分:0)
你可以这样做:
Num_List = list()
Numbers = input('Enter a number:')
while Numbers != 'Stop':
Num_List.append(int(Numbers))
Numbers = input('Enter a number:')
Num_List = [i for i in Num_List if i is not '']
Num_List.sort(reverse=False)
sorted(Num_List)
print(Num_List)