简体   繁体   English

输入语句问题

[英]Issue with Input statement

I am a newbie to Python and learning lists. 我是Python和学习列表的新手。 Here is the program I have written for sorting numbers: 这是我编写的用于对数字进行排序的程序:

def sorting(final_input):
          final_output= []
          count = 0
          length = len(final_input)
          while count < length:
                    final_output.append(min(final_input))
                    final_input.remove(min(final_input))
                    count += 1
                    if count ==  (length): 
                              break
          return(final_output)
final_input = [5,6,57,531,9,1]
print(final_input)
print(sorting(final_input))

The above program works fine and gives the following output: 上面的程序工作正常,并给出以下输出:

[5, 6, 57, 531, 9, 1]
[1, 5, 6, 9, 57, 531]

But when I give input with input command (as follows): 但是当我使用输入命令进行输入时(如下所示):

def sorting(final_input):
          final_output= []
          count = 0
          length = len(final_input)
          while count < length:
                    final_output.append(min(final_input))
                    final_input.remove(min(final_input))
                    count += 1
                    if count ==  (length): 
                              break
          return(final_output)

final_input = []
while True:
          user_input = input("Enter number or quit: ")
          if user_input == "quit":
                    break
          final_input.append(user_input)
print(final_input)
print(sorting(final_input))

The above program gives the following incorrect output. 上面的程序给出以下错误输出。 It is not clear to me what needs to be updated with ''input'' statement. 对我来说,尚不清楚需要使用“输入”语句更新的内容。 Any help would be appreciated. 任何帮助,将不胜感激。

Enter number or quit: 5
Enter number or quit: 6
Enter number or quit: 57
Enter number or quit: 531
Enter number or quit: 9
Enter number or quit: 1
Enter number or quit: quit
['5', '6', '57', '531', '9', '1']
['1', '5', '531', '57', '6', '9']

As answered by kvmahesh, the return type of input() is always str . 正如kvmahesh回答的那样, input()的返回类型始终为str You need to convert it to int if you want numbers. 如果需要数字,则需要将其转换为int

while True:
    user_input = input("Enter number or quit: ")
    if user_input == "quit":
        break

    try:
        final_input.append(int(user_input))
    except ValueError:
        print("Invalid input!")

A try...except block is good to check if user gives some invalid input (eg asdfg ). 使用try...except块可以很好地检查用户是否输入了无效的输入(例如asdfg )。

Also, if you just want to sort the list, you can use sorted() : 另外,如果只想对列表进行排序,则可以使用sorted()

final_input = sorted(final_input)

The stdin values are always of type string . stdin值始终为string类型。 so convert using int while appending at line final_input.append(int(user_input)) : 因此在附加到final_input.append(int(user_input))使用int进行转换:

def sorting(final_input):
      final_output= []
      count = 0
      length = len(final_input)
      while count < length:
                final_output.append(min(final_input))
                final_input.remove(min(final_input))
                count += 1
                if count ==  (length): 
                          break
      return(final_output)

final_input = []
while True:
         user_input = input("Enter number or quit: ")
         if user_input == "quit":
                   break
         final_input.append(int(user_input))
print(final_input)
print(sorting(final_input))

Output: 输出:

Enter number or quit: 3
Enter number or quit: 5
Enter number or quit: 1
Enter number or quit: 2
Enter number or quit: 100
Enter number or quit: quit
[3, 5, 1, 2, 100]
[1, 2, 3, 5, 100]

The input with this statement 该语句的输入

user_input = input("Enter number or quit: ") user_input = input(“输入数字或退出:”)

Will be take data in form of string data type .so your input is taken a string . 将采用字符串数据类型的形式的数据。因此您的输入采用字符串。 So sorting is NOT working 所以排序不起作用

So make it int during appending 因此在附加过程中将其设为int

final_input.append(int(user_input)) final_input.append(INT(USER_INPUT))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM