我正在尝试允许用户在Python中操作列表。
number_of_commands = int(input())
x = 0
my_list = []
while x <= number_of_commands:
command, i, e = input().split(' ')
command = str(command)
i = int(i)
e = int(e)
x = x + 1
if command == 'insert':
my_list.insert(i, e)
elif command == 'print':
print(my_list)
elif command == 'remove':
my_list.remove(e)
elif command == 'append':
my_list.append(e)
elif command == 'sort':
my_list.sort()
elif command == 'pop':
my_list.pop()
elif command == 'reverse':
my_list.reverse()
else:
print("goodbye")
当用户输入需要两个整数的命令(例如insert
)时,该程序可以正常工作,但是当用户输入类似print
的内容时,我会收到错误“没有足够的值来解压缩”。它仅在您输入为0 0时才有效。如何允许用户输入带整数且没有整数的命令?
答案 0 :(得分:3)
您可以使用
command, *values = input().split(' ')
值是一个列表。例如,&#39;插入&#39;部分变成:
if command == 'insert':
my_list.insert(int(values[0]), int(values[1]))
答案 1 :(得分:1)
def my_function(command='print', i=0, e=0):
# your function code here
user_input = input().split(' ')
if len(user_input) > 3:
print('usage : function i e')
else:
my_function(*user_input)
在列表之前使用*
将列表转换为函数的参数。
使用函数是获取默认值的好方法,以防它们未定义。
答案 2 :(得分:0)
以下是拆箱的地方:
command, i, e = input().split(' ')
进入&#34;打印&#34;只是不允许此行正确执行,因为没有提供i和e的值。
所以只需读取输入,然后拆分它并检查用户提供的参数数量:
input_str = input()
input_str_split = input_str.split(' ')
if len(input_str_split) == 3:
command, i, e = input_str_split
i = int(i)
e = int(e)
else:
command = input_str_split
答案 3 :(得分:0)
发生此错误,因为您总是希望命令有3个输入:
command, i, e = input().split(' ')
当你只使用print时会发生这种情况:
>>> "print".split(' ')
['print']
因此input.split()
的输出是一个只包含一个元素的列表。但是:
command, i, e = input().split(' ')
需要3个元素:command
,i
和e
。
其他答案已经向您展示了如何解决修改代码的问题,但是当您添加更多命令时,它会非常笨拙。您可以使用Python的本机REPL并创建自己的提示。 (Original post where I read about the cmd module)
from cmd import Cmd
class MyPrompt(Cmd):
my_list = []
def do_insert(self, *args):
"""Inserts element in List"""
self.my_list.append(*args)
def do_print(self, *args):
print(self.my_list)
def do_quit(self, args):
"""Quits the program."""
raise SystemExit
if __name__ == '__main__':
prompt = MyPrompt()
prompt.prompt = '> '
prompt.cmdloop('Starting prompt...')
示例:
$ python main.py
Starting prompt...
> insert 2
> insert 3
> insert 4
> print
['2', '3', '4']
>
cmd还允许您记录代码,因为我没有为print
创建文档字符串,这是在终端中输入help
后显示的内容:
> help
Documented commands (type help <topic>):
========================================
help insert quit
Undocumented commands:
======================
print
我留下添加其他命令和一个有趣的练习给你。 :)