没有足够的值来解压缩Python

时间:2018-03-16 11:58:36

标签: python python-3.x

我正在尝试允许用户在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时才有效。如何允许用户输入带整数且没有整数的命令?

4 个答案:

答案 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个元素:commandie

其他答案已经向您展示了如何解决修改代码的问题,但是当您添加更多命令时,它会非常笨拙。您可以使用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

我留下添加其他命令和一个有趣的练习给你。 :)