将切片分配给字符串

时间:2017-08-23 01:02:19

标签: python string slice

我已经四处寻找这个问题的答案/解决方案了,因为看起来应该已经问过了。但我没有找到任何关于重新分配slice的内容。我正在为在线代码老师Treehouse做一个测验,他们给了我这个问题/作业:

  

我需要你为我创建一个新功能。   这个将被命名为 sillycase ,并且它将以单个字符串作为参数。    sillycase 应该返回相同的字符串,但前半部分应该是小写的,而后半部分应该是大写的。   例如,使用字符串“Treehouse”, sillycase 将返回“treeHOUSE”。   不要担心四舍五入,但要记住索引应该是   整数。您需要使用 int()函数或整数除法 //。

我已经解决了其他人的问题并且做到了这一点:

def sillycase(example):
    begining = example[:len(example) // 2]
    end = example[len(example) // 2:]
    begining.lower()
    end.upper()
    example = begining + end
    return example

我不确定为什么这是错误的,但当我以"Treehouse"为例运行它时,它会返回"Treehouse"。如果不清楚我的问题是如何让string小一半的前半部分,而后半部分是大写的。

3 个答案:

答案 0 :(得分:1)

字符串的.lower().upper()方法会返回一个新字符串,并且不会就地工作。以下内容可以直接添加由lowerupper返回的新字符串:

def sillycase(example):
    beginning = example[:len(example) // 2]
    end = example[len(example) // 2:]
    example = beginning.lower() + end.upper()
    return example

sillycase('treehouse')   # 'treeHOUSE'

答案 1 :(得分:1)

您需要将.lower().upper()分配给变量,例如:

begining = begining.lower()
end = end.upper()
example = begining + end

或在你的情况下:

def sillycase(example):
    begining = example[:len(example) // 2].lower()
    end = example[len(example) // 2:].upper()
    example = begining + end
    return example

答案 2 :(得分:0)

字符串是不可变的!当你这样做

def self.sort_temp(range)
    array = where(max_temperature: range).all.map {|condition| condition.date}
    trip_nums = array.map do |date|
      Trip.where(start_date: date.beginning_of_day...date.end_of_day).count
    end
    output = {}
    output[:max] = trip_nums.sort.last
    output[:min] = trip_nums.sort.reverse.last
    output[:avg] = trip_nums.inject(:+) / trip_nums.length unless trip_nums.length == 0
    output
end

begining.lower() end.upper() begining没有改变,它们只是简单地返回大小写的字符串。所以为了得到你期望做的结果

end