为什么使用.format切片列表时为什么会出现意外字符串?

问题描述 投票:1回答:1

我正在尝试制作石头,纸,剪刀的游戏。但是,当我尝试使用切片在输入函数内部格式化字符串时,得到以下信息:Choose Rock, Sciss or Scissors:

我正在使用以下脚本:

options = ['rock', 'paper', 'scissors']

def rock_paper_scissors():
    x = ''
    for option in options:
        if x == '':
            x += option.title()
    else:
        x += ', ' + option.title()

    player = input('Choose {} or {}:'.format(x[0:11], x[-8:]))
python-3.x slice
1个回答
0
投票

这不是切片错误,这是字符串构造。您应该再缩进else:块。供参考,请在输入命令前尝试print()-x

发生了什么

Python for循环可以具有else:子句。除非循环以breakreturn终止,否则将执行这些命令。因此,您的循环仅在x仍为空字符串时才在第一次迭代中执行某些操作,然后else子句将使用仍从循环的最后一次迭代绑定的option来修改您的字符串。

编辑

也许我有点习惯于代码审查,但是我建议以不同的方式进行构造,更像这样:

player_move = input(f"Choose {', '.join(options[:-1])} or {options[-1]}")

不过请注意,这仅适用于选项的3+长度。要获得较少选择的合适的琴弦,则需要更多...优雅的结构。

© www.soinside.com 2019 - 2024. All rights reserved.