一、题目
Kevin and Stuart want to play the 'The Minion Game'.
Game Rules
- Both players are given the san string S.
- Both players have to make substrings using the letters of the string S.
- Stuart has to make words starting with consonants.
- Kevin has to make words starting with vowels.
- The game ends when both players have made all possible substrings.
Scoring
A player gets +1 point for each occurrence of the substring in the string S.
For Example:
String S = BANANA
Kevin's vowel beginning word = ANA
Here, ANA occurs twice in BANANA. Hence, Kevin will get 2 Points.
S = BANANA | |||
Stuart | Kevin | ||
Words | Score | Words | Score |
B | 1 | A | 3 |
N | 2 | AN | 2 |
BA | 1 | ANA | 2 |
NA | 2 | ANAN | 1 |
BAN | 1 | ANANA | 1 |
NAN | 1 | ||
BANA | 1 | ||
NANA | 1 | ||
BANAN | 1 | ||
BANANA | 1 |
Your task is to determine the winner of the game and their score.
Input Format
A single line of input containing the string S.
Note: The string S will contain only uppercase letters:[A - Z].
Sample Input
BANANA
Sample Output
Stuart 12
Note: Vowels are only defined as AEIOU.
二、代码
def minion_game(string): vowels = {'A', 'E', 'I', 'O', 'U'} stuart_score = 0 kevin_score = 0 for i, char in enumberate(string): if char in vowels: kevin_score += len(string) - i else: stuart_score += len(string) - i if stuart_score > kevin_score: print("Stuart", stuart_score) elif kevin_score > stuart_score: print("Kevin", kevin_score) else: print("Draw") if __name__ == '__main__': s = input() minion_game(s)
三、解答
for i, char in enumerate(string):
使用 enumerate() 函数遍历字符串 string。
enumerate() 会返回每个字符及其索引(从0开始)。
if char in vowels: kevin_score += len(string) - i else: stuart_score += len(string) - i
1、如果当前字符 char 是元音(在 vowels 集合中),则计算 kevin_score 。由于每个元音字符都可以作为以子字符串的其实字符,Kevin 获得的分数是剩余字符串长度 (len(string) - i)
2、如果当前字符不是元音(即辅音),则计算 stuart_score。 同样,由于每个辅音字符都可以作为以辅音开头的子字符串的起始字符,Stuart 获得的分数是剩余字符串长度。
if stuart_score > kevin_score: print("Stuart", stuart_score) elif kevin_score > stuart_score: print("Kevin", kevin_score) else: print("Draw")
在循环结束后,比较 stuart_score 和 kevin_score。 如果 Stuart 的得分更高,打印 "Stuart" 和得分;如果 Kevin 的得分更高,打印 "Kevin" 和得分;如果两者得分相同,打印 "Draw"。
四、enumerate()
enumerate() 函数在 Python 中是一个内置函数,它的作用是将一个可迭代对象(如列表、元组、字符串等)组合为一个索引序列,同时返回元素和它的索引。在工作中,enumerate() 可以带来以下好处:
1、方便迭代:在遍历列表或其他序列时,enumerate() 允许你同时获得元素的索引和值,这使得处理元素时可以更方便地引用其位置。
2、索引访问:当你需要在循环中使用元素的索引时(例如,作为字典的键或在另一个列表中访问元素),enumerate() 提供了一个简洁的方式来做到这一点。
3、代码可读性:使用 enumerate() 可以使代码更加清晰和易于理解,因为你不需要手动维护一个索引计数器。
4、性能:在某些情况下,使用 enumerate() 可能比手动管理索引更高效,尤其是在处理大型数据集时。
5、功能强大:enumerate() 还允许你指定起始索引,如果你想从非零索引开始计数,这非常有用。
示例:
for index, value in enumerate(['a', 'b', 'c']): print(index, value)
输出:
0 a
1 b
2 c
- 在这个示例中, enumerate() 同时提供了列表中每个元素的索引(index)和值(value),使得遍历和处理变得非常简单。
- 在工作中,enumerate() 特别使用于需要跟踪元素位置或需要根据元素位置执行不同操作的场景。例如,在处理文件中的数据行时,你可能需要知道当前处理的是第几行数据,这时使用 enumerate() 就非常方便。