2017-10-18 64 views
-2

所以我想在Python创建一个程序:反向列表在Python

A)提示用户输入一个数字一定的时间 B)然后在列表中,并打印保存这些数字他们以相反的顺序。

这是我的代码:

for numbers in range (1,4): 
    print("Please enter a number.") 
    numbers = input() 
    numbersList = list(reversed(str(numbers))) 
    print(numbersList) 

当我运行它,它只是打印<list_reverseiterator object at 0x105447da0>。甚至当我在代码中没有添加“反转”的情况下尝试它,而不是像我想要的那样打印所有以相反顺序输入的数字的列表时,它将吐出以列表格式输入的最新数字。所以如果我为一个数字输入'4',它就会打印:['4']。不知道为什么这样做。任何帮助,将不胜感激。谢谢。

+0

您正在使用您用作输入的最新号码重写列表。 –

回答

1

如果我理解正确的话,这是你在找什么:

numbers = [] 
for i in range (1,4): 
    print("Please enter a number.") 
    numbers.append(input()) 

numbersList = str(numbers) 
numbersList.reverse() 
print (numbersList) 

至于评论,irange命令生成的迭代器。从用户那里收集3个号码的一种方法是在这种情况下将它们追加到列表numbers中。

之后,您可以在循环之外处理您的列表。将列表完全创建后再次指向循环外部似乎更可行。我使用Python 2.7,因此解决方案与最初的解决方案有所不同,但结果如预期 - 首先使用map将所有数字转换为字符串,然后使用reverse反转列表。

+0

您可能希望在最后一行使用'print()'作为函数。 –

+0

'map(str,numbers)'做什么?我在代码中没有看到任何'str'变量 –

+0

@Akash KC它在OP的这一部分:'numbersList = list(反转(str(数字)))' - 这是'str',所以即使它似乎没有为我添加它的任何直接目的服务。其实它可以更简单,没有地图,编辑。 – atru

1

尝试这样:

numbersList = [] 
for numbers in range (1,4): 
    print("Please enter a number.") 
    numbersList.append(input()) 
numbersList.reverse() 
print(numbersList) 

首先,你必须定义numbersList。然后,在循环中追加值并将其打印出来。

您的问题是您每次运行for循环时都定义列表(在上例中为3次),因此它只有最后一个值。 (另外,你也打算在每次迭代中打印出来)。

此外,“兴趣点” - 您可以使用input("User prompt here: ")来避免使用print()之前的行。

+0

他们也想扭转名单。 –

+1

我的不好,已编辑。 –

0

您首先需要将数字实际存储在列表中。做这个循环并附加每个输入值。然后您可以拨打名单上的reversed

reversed是一个懒惰的函数。这意味着它不会放弃它的值,直到你迭代它,然后逐一返回它们。这不同于其所有值已经存在并存储在其中的列表。

所以当你做print(reversed(whatever))它调用__repr__函数为一个反转迭代器得到应该打印什么,这就是你在控制台中看到的。如果您想查看实际值,则需要将其转换为list或对其进行迭代并自行构建显示字符串。

这里有几种方法可以做你想做的。

msg = "Please enter a number: " 

# condensed version, uses list comprehension instead of loop 
print(list(reversed([input(msg) for _ in range(1, 4)]))) 

# expanded version 
nums = [] 
for _ in range(1, 4): 
    val = input(msg) 
    nums.append(val) 

print(list(reversed(nums))) 

注意,打印出从reversed我们必须把它包在list返回值。这是python 2中的一个python 3,它不是必需的。