我找到了一个YouTube video,其中包含一个程序,用于查找列表中第二小的数字。我正在尝试修改此代码,以便与用户输入一起使用。这是视频中的代码:
numbers = [ 6, 6, 6, 4, 3, 4, 5 ]
print(f"Number: {numbers}")
first = 10000
second = 10000
for number in numbers:
if number < first:
second = first
first = number
elif number > first and number < second:
second = number
print(f"First: {first}")
print(f"Second: {second}")
这是我到目前为止的内容,但输出始终为99,我不知道该如何解决。 (我使用python 2.7)
list = str(raw_input())
first = 99
second = 99
for number in list:
if number < first:
second = first
first = number
elif first < number < second:
second = number
print "The second smallest number is : %d" % second
我知道有关此主题的问题已经存在,但是它们都可以与函数一起使用,我还不知道如何使用它们。
答案 0 :(得分:3)
str()
和raw_input()
返回字符串,而不是列表。如果要获取用户键入的单词的列表,则需要使用split()
。然后,您需要使用int()
将它们转换为整数。
此外,您不应使用list
作为变量名,因为它是内置函数的名称。
number_list = map(int, raw_input().split())
for number in number_list:
...
答案 1 :(得分:0)
问题在于raw_input()
返回的是字符串,而不是列表。因此,您需要将字符串分成多个部分(每个部分都是数字之一),以便从输入中获取列表。
假设您输入的内容采用以下格式(即用逗号分隔的数字):
input = '1,2,3,4,5,6'
您可以使用逗号分隔该字符串以获取如下列表:
input_list_strings = input.split(',')
#input_list_strings = ['1', '2', '3', '4', '5', '6']
然后您需要将字符列表转换为整数
input_list = [int(string) for string in input_list_strings]
#input_list = [1, 2, 3, 4, 5, 6]
您可以使用以下命令在一行中完成所有操作:
input_list = [int(string) for string in input.split(',')]
那么您应该能够正常继续算法。
括号中的内容称为列表理解,通常认为使用列表理解比使用map
更具Python风格,因为它更具可读性。您可以阅读关于它们的here。