【问题标题】:Issue with Slicing in PythonPython中的切片问题
【发布时间】:2013-08-25 16:50:50
【问题描述】:

我是 python 新手,目前正在做一个涉及切片的练习。该练习涉及以任何方式切割字符串“Pizza”。您输入切片的开始和结束位置,程序会显示结果。这是我的代码:

    #Pizza Slicer

print(
"""
  Slicing 'Cheat Sheet'

 0   1   2   3   4   5
 +---+---+---+---+---+ 
 | p | i | z | z | a | 
 +---+---+---+---+---+ 
-5  -4  -3  -2  -1

"""
)

word="pizza"

print("Enter the beginning and ending index for your slice of 'pizza'.")
print("Press the enter key at 'Begin' to exit.")

start=None      #initialise  
while start !="":  
    start=int(input("\nStart: "))

    if start:

        finish=int(input("Finish: "))

        print("word[",start,":",finish,"] is", word[start:finish])

问题是,当我输入起始值“0”时,我无法输入结束值 - “开始:”再次出现。我认为这可能与“开始 = 无”声明有关。另一个问题是输入负的起始值和结束值不起作用并且不会返回切片。不知道为什么。

感谢您的帮助。

【问题讨论】:

  • 是的,如果你摆脱了if start 位(暂时)它应该可以正常工作。您可以尝试类似:if start in [0,1,2,3,45]:,它将检查 start 是否出现在列表中。
  • 最好将文档字符串中的索引值向右移动 2 个字符,因为它们属于字母,而不是它们之间的边界。这可能有助于习惯于“从索引(包括)到索引(排除)”进行切片。

标签: python python-3.x slice


【解决方案1】:

问题

如果0 用作谓词,则将其视为False。

>>> if 0:
...     print('0 == True')
... else:
...     print('0 == False')
...
0 == False

其他问题

>>> word = "pizza"
>>> word[1:3]
'iz'
>>> word[-4:3]
'iz'

如果第一个索引大于(或等于)第二个索引,则产生空字符串:

>>> word[4:3]
''
>>> word[3:3]
''

负索引也一样:

>>> word[-1:3]
''

【讨论】:

    【解决方案2】:

    您是正确的,错误很可能是由于start != "" 造成的,因为空字符串和 0 都评估为 false。也许你可以像这样使用isinstance 内置的python:

    if isinstance(start,int):
        #do something
    

    但是,如果有人输入了 -5 到 5 范围之外的数字,这将接受任何可能导致问题的整数。相反,您可以使用 range 设置可接受的值:

    if start in range(-5,6):
       #do something
    

    【讨论】:

      【解决方案3】:

      如果您想了解有关 python 切片的更多信息,请查看:

      The python slice notation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-13
        • 1970-01-01
        • 2021-05-03
        • 2020-03-04
        • 1970-01-01
        相关资源
        最近更新 更多