首先,我想将用户输入保存到一个名为“ name”的变量中。然后,我想按原样打印名称的最后一个单词,但是对于该名称的所有其他单词,我只想打印大写字母中的世界的第一个字母。 假设名称=“堆栈溢出” 我要制作为S.O. Flow。
首先,我将name变量拆分为多个部分。我用名称的最后一部分创建了一个变量调用lname。再一次,我创建了一个名为fname的变量,除了最后一个单词外,其他所有单词都如此。 我试过for循环从fname打印所有首字母。但是,我无法将它们分配给变量,因此我可以将它们与最后一部分连接起来以形成全名。
class Vehicle{
constructor(...args){
let arr = Array.from(args)
this.wheelTotal = arr[0]
this.energySource = arr[1]
this.manufacturer = arr[2]
this.isOn = false
}
getSpec(key){
if(this.hasOwnProperty(key)){
return this[key]
}
}
}
class Tesla extends Vehicle{
constructor(...args){
let arr2 = Array.from(...args)
super(...args);
this.milesPerCharge = arr2[0]
this.model = arr2[1]
this.chargePercentage = arr2[2]
}
minutesToFullCharge(){
return 100 - this.chargePercentage
}
}
describe('Tesla', () => {
let teslaCar;
beforeEach(() => {
teslaCar = new Tesla([300, 'Model S', 50, 100, [[4, 'electric', 'Tesla']]]);
});
it('should have properties specific to a Tesla such as MPC (miles per charge) and Model', () => {
expect(teslaCar.milesPerCharge).toBe(300);
expect(teslaCar.model).toBe('Model S');
expect(teslaCar.chargePercentage).toBe(50); // 50% charged
expect(teslaCar.minutesToCharge).toBe(100); // 100 minutes for a full charge
});
it('should have all properties of a Vehicle instance', () => {
expect(teslaCar.wheelTotal).toBe(4);
expect(teslaCar.energySource).toBe('electric');
expect(teslaCar.manufacturer).toBe('Tesla');
expect(teslaCar.getSpec('wheelTotal')).toBe(4);
});
答案 0 :(得分:2)
此答案利用高级元组解包(Python3)和f字符串(Python3.6)
name = "Stack Over Flow"
*first_words, last_word = name.split(" ")
first_letters = ' '.join([f"{w[0].upper()}." for w in first_words])
res = f"{first_letters} {last_word}"
print(res)
答案 1 :(得分:1)
name = "Stack Over Flow"
words = name.split(" ")
first_words = words[:-1]
last_word = words[-1]
first_letters = [x[0] + "." for x in first_words]
res = "{} {}".format(" ".join(first_letters), last_word)
print(res)
将产生S. O. Flow
答案 2 :(得分:1)
Yoi可以使用List Comprehension:
name = "Stack Over Flow"
'.'.join([x[0] if i < 2 else x for i, x in enumerate(name.split())])
输出:
S.O.Flow
参考文献:
答案 3 :(得分:1)
也许有更多的python方式可以做到这一点,但是对于最小的代码更改,您要做的就是添加到字符串并在循环后将其打印出来。因此,无需打印make smoke
,而是将其添加到需要在循环之前实例化的字符串中。然后,您可以在最后打印整个字符串之前为其添加姓氏。即
z[0]
我将改为执行以下操作:
name=input()
name=name.split(' ')
lname = name[-1]
fname= name[:-1]
result = ""
for z in fname:
result = result + z[0] + ". "
result = result + lname
print(result)
给定name=input()
name=name.split(' ')
print('. '.join([n[0] if i != len(name) - 1 else n for i, n in enumerate(name)]))
会返回Stack Over Flow
这不会为您大写字母,因此如果提供S. O. Flow
,它将返回stack over flow
。
要分解我提供的代码,s. o. flow
将使用字符串列表,并使用字符串'. '.join(<list>)
将它们连接在一起。这意味着联接内的代码正在提供'. '
。
联接内的代码称为列表理解。它实际上是一个扁平化的for循环,它将for循环的每个结果附加到列表中。 Section 5.1.3 of the python tutorial covers list comprehensions.
除非该字符串的索引(i)等于列表的最后一个索引,否则列表理解将采用名称的首字母。这意味着输入['s', 'o', 'flow']
的len()为3。最后一个索引为2(从0开始,从0开始计数=>'Stack',1 =='Over',2 =='Flow') 。一旦索引== 2,它将使用全名而不是第一个字母。
Enumerate为您提供列表中的索引和列表元素,这就是为什么我的Stack Over Flow
循环为for
而不是for i, n
的原因。
不对诸如for n
之类的值进行硬编码的优点是用于其他输入。如果一个人没有中间名怎么办?例如。 == 2
应该是John Doe
。硬编码值为2时,结果将改为J. Doe
。或者,如果输入的是玛丽·苏·伊丽莎白·史密斯(Mary Sue Elizabeth Smith),该怎么办?她的结果应该是M. S. E. Smith,但如果您的解决方案中的名称数量是硬编码的,则不会导致该输出。