【问题标题】:Python : AttributeError: 'str' object has no attribute '1s' [duplicate]Python:AttributeError:'str'对象没有属性'1s'[重复]
【发布时间】:2018-02-24 23:58:04
【问题描述】:

我正在尝试打印输入的中间名的第一个字母,并打印它,而不是整个中间名

first_name = str(input("Please enter your first name: "))
middle_name = str(input("Please enter your middle name: "))
last_name = str(input("Please enter your last name: "))

first_name = first_name.capitalize()
first_name = middle_name.capitalize()
last_name = last_name.capitalize()

name_format = "{first} {middle.1s} {last}"
print(name_format.format(first=first_name, middle=middle_name, last=last_name)) 

每当我在 Cmd 中运行脚本时,它都会声明

AttributeError: 'str' object has no attribute '1s'. 

【问题讨论】:

  • {middle.1s} – 那应该怎么做?
  • 打印输入的中间名的第一个字母,然后打印出来,而不是整个中间名,我相信无论如何,对编码很陌生。
  • 请链接到您认为正确语法的文档。 Python 索引元素从 0 开始,无论如何
  • 你遇到了什么问题?

标签: python python-3.x


【解决方案1】:

您需要对字符串middle 进行切片。 1s 不是 Python 理解的命令,但 [0] 是。见string slicing

你的工作代码:

first_name = str(input("Please enter your first name: "))
middle_name = str(input("Please enter your middle name: "))
last_name = str(input("Please enter your last name: "))

first_name = first_name.capitalize()
middle_name = middle_name.upper()
last_name = last_name.capitalize()

name_format = "{first} {middle[0]} {last}"
print(name_format.format(first=first_name, middle=middle_name, last=last_name)) 

修改:

name_format = "{first} {middle[0]} {last}"

切片字符串用途广泛。例如:

>>>a='Pythom'
>>>a[0]
P
>>>a[0:]
ythom
>>>a[0:2]
pyt
>>>a[:3]
Pyth
>>>a[-1] 
m
>>>a[-1] = 'n'
>>>a
Python

你在这里做同样的事情。你输入你的名字和切片。请注意,字符串切片的第一个字符从 0 开始,而不是 1。

【讨论】:

    【解决方案2】:

    格式字符串中的.1solder printf-style formatting 的语法。在那里,它会看起来像这样:

    >>> '%s %.1s %s' % ('Guido', 'van', 'Rossum')
    'Guido v Rossum'
    

    使用您正在使用的format string syntax,这看起来有点不同。格式说明符要在冒号后指定,如下所示:

    >>> '{} {:.1s} {}'.format('Guido', 'van', 'Rossum')
    'Guido v Rossum'
    

    或者使用命名组:

    >>> '{first} {middle:.1s} {last}'.format(first='Guido', middle='van', last='Rossum')
    'Guido v Rossum'
    

    这是使用 precision 来限制字符串长度,如documented(强调我的):

    precision 是一个十进制数,表示对于格式为 'f''F' 的浮点值,小数点后应显示多少位,或者在小数点前后显示多少位用'g''G' 格式化的浮点值。 对于非数字类型,该字段表示最大字段大小 - 换句话说,从字段内容中将使用多少个字符。 精度 不允许用于整数值.

    (是的,我知道“van”不是中间名……)

    【讨论】:

    • 知道了。好吧,我还是找到了副本
    猜你喜欢
    • 2016-06-26
    • 2016-11-08
    • 2021-01-15
    • 1970-01-01
    • 2021-09-23
    • 2021-11-01
    • 2014-04-26
    • 2020-03-09
    相关资源
    最近更新 更多