如何使用argv获取字符串的如下输入?

2024-05-16 14:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过这个,它似乎可以很好地处理整数,但无法处理字符串。我查了一下文件找不到。你知道吗

from sys import argv
a, b, c = input(argv)
print(a,b,c)

输出:

['C:\\Users\\mani\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py', '-f', 'C:\\Users\\mani\\AppData\\Roaming\\jupyter\\runtime\\kernel-24b5eda5-a584-417e-a9f5-1c58531db5ae.json']mn nn nj

-
ValueError                                Traceback (most recent call last)
<ipython-input-23-181e7bc5c5de> in <module>
      1 from sys import argv
----> 2 a, b, c = input(argv)
      3 print(a,b,c)

ValueError: too many values to unpack (expected 3)

Tags: 文件字符串fromimportinputlibsyssite
2条回答

不清楚你想用sys.argv做什么。它是由shell和Python解释器创建的字符串列表。通常它是读取的,就像任何列表一样,但也可以修改。你知道吗

In [16]: import sys                                                                       
In [17]: sys.argv                                                                         
Out[17]: 
['/usr/local/bin/ipython3',
 ' pylab',
 'qt',
 ' nosep',
 ' term-title',
 ' InteractiveShellApp.pylab_import_all=False']
In [18]: input(sys.argv)                                                                  
['/usr/local/bin/ipython3', ' pylab', 'qt', ' nosep', ' term-title', ' InteractiveShellApp.pylab_import_all=False']1 2 3
Out[18]: '1 2 3'

当用作input的参数时,它只是作为提示字符串。这样做有什么意义?我们从input得到的是一个字符串(至少在Py3中,Py2是不同的)。你知道吗

a,b,c = ...

像这样拆箱是不可饶恕的。如果在RHS上给定了错误的项数,则会引发错误。你知道吗

In [19]: a,b,c = input('3 items: ').split()   # split input string on space                                            
3 items: a b c
In [20]: a,b,c = input('3 items: ').split()                                               
3 items: d e
                                     -
ValueError                                Traceback (most recent call last)
<ipython-input-20-7dacf1e93e8c> in <module>
  > 1 a,b,c = input('3 items: ').split()

ValueError: not enough values to unpack (expected 3, got 2)
In [21]: a,b,c = input('3 items: ').split()                                               
3 items: 1 2 3 4
                                     -
...
ValueError: too many values to unpack (expected 3)

所以我看到了三个问题:

  • 什么是sys.argv以及如何使用它的问题
  • inputdo的论点是什么
  • 开箱包装的使用

===

我想你对input做什么以及解包是如何工作的感到困惑:

In [67]: a,b,c = input('3 numbers: ')                                                     
3 numbers: 123
In [68]: a                                                                                
Out[68]: '1'
In [69]: b                                                                                
Out[69]: '2'
In [70]: c                                                                                
Out[70]: '3'
In [71]: a,b,c = input('3 numbers: ')                                                     
3 numbers: 1 2 3
...
ValueError: too many values to unpack (expected 3)

In [74]: a,b,c = input('3 numbers: ')                                                     
3 numbers: 1234
...
ValueError: too many values to unpack (expected 3)

使用input相当于:

In [72]: a,b,c='123' 

字符串中的3个字符在3个变量中分开。如果提供的字符串较长(或较短),则与解包所需的3个变量不匹配。你知道吗


或者复制您键入“mn nn nj”的示例:

In [75]: input(['a','list','of','strings'])                                               
['a', 'list', 'of', 'strings']mn nn nj                        
Out[75]: 'mn nn nj'

In [76]: a,b,c=_        # trying to unpack that string to 3 variables                                                                  
...
ValueError: too many values to unpack (expected 3)

In [77]: a,b,c=_.split()    # split on white space                                                                  
In [78]: a,b,c                                                                            
Out[78]: ('mn', 'nn', 'nj')
from sys import argv 
a, b, c = input(argv) 
print(a,b,c)

有点错误,您不需要使用inputargv解压到变量中。你知道吗

from sys import argv 
a, b, c = argv[:3]
print(a,b,c)

如果只需要将argv中的前3个元素解压成abc,就足够了。你知道吗

查看python introduction并阅读有关切片的内容(神奇的[:3])。你知道吗

相关问题 更多 >