Python 3.x 执行此代码的最佳方法是什么?
Python 3.x What's the best way to do this code?
我正在编写一个代码,用户可以在其中输入任意数量的数字,直到他们输入 Stop。每个输入都会添加到列表中。我希望输入是整数,这样输入就可以正确排序,但是当输入 '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
这是我的方法:在无限循环中,获取用户的输入。如果是'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)
更新 2:
我又修改了我的代码。这一次,代码 运行 在 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)
更新 3
来自 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 运行 的输出相同。
我怀疑您正在使用 python <2.8,因此 input()
的行为有所不同并执行给定的内容而不是将其作为字符串返回(例如eval(input())
)。当给定一个 int
时,没有问题发生,但是当给定一个 "Stop" 时,python 不知道如何处理它(除非你的代码有一个名为 "Stop" .. .).
这是对 python2:
代码的简单修改
# little trick to use input with python2 or python3 !
# source:
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()
;)
你可以这样做:
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)
我正在编写一个代码,用户可以在其中输入任意数量的数字,直到他们输入 Stop。每个输入都会添加到列表中。我希望输入是整数,这样输入就可以正确排序,但是当输入 '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
这是我的方法:在无限循环中,获取用户的输入。如果是'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)
更新 2:
我又修改了我的代码。这一次,代码 运行 在 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)
更新 3
来自 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 运行 的输出相同。
我怀疑您正在使用 python <2.8,因此 input()
的行为有所不同并执行给定的内容而不是将其作为字符串返回(例如eval(input())
)。当给定一个 int
时,没有问题发生,但是当给定一个 "Stop" 时,python 不知道如何处理它(除非你的代码有一个名为 "Stop" .. .).
这是对 python2:
代码的简单修改# little trick to use input with python2 or python3 !
# source:
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()
;)
你可以这样做:
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)