在Python中切片的问题

Issue with Slicing in Python

我刚接触过python,目前正在做一个涉及切片的练习。这个练习包括以任何方式切割绳子"披萨"。输入切片的开始和结束位置,程序将显示结果。这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    #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("
Start:"
))

    if start:

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

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

问题是,当我输入"0"的起始值时,无法输入结束值-"Start:"将再次出现。我认为这可能与"start=none"语句有关。另一个问题是输入负的起始值和结束值不起作用,也不会返回切片。不知道为什么。

谢谢你的帮助。


问题

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

1
2
3
4
5
6
>>> if 0:
...     print('0 == True')
... else:
...     print('0 == False')
...
0 == False

另一个问题

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

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

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

负指数相同:

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


如果您想了解更多关于Python切片的信息,请查看以下内容:

python切片表示法


由于空字符串和0的值都为false,所以错误很可能是由start !=""引起的,这是正确的。也许你可以像这样使用isinstance内置的Python:

1
2
if isinstance(start,int):
    #do something

但是,如果输入的数字超出-5到5的范围,则接受任何可能导致问题的整数。相反,您可以使用range来设置可接受的值:

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