我正在尝试在字符串中打印“最少”字符,如果字符比另一个字符更接近字母表的开头,则字符较小,并且它是第一个索引位置。 我应该只使用1个循环来确定字符的索引,并且不允许使用min,max,index,find,ord,chr或lists。 例如:
leastChar("yRrcDefxBqubSlyjYelskd")
应该产生:
The least char is 'B' and occurs at position 8.
目前我有:
def leastChar(inputString):
lowerString = inputString.lower()
print(lowerString)
indexLength = (len(lowerString) - 1)
print(indexLength)
index = 0
for i in range(indexLength):
if lowerString[i] < lowerString[i+1]:
index = i
print("The least char is '{0}' and occurs at position {1}".format(inputString[index], index))
返回:
leastChar("yRrcDefxBqubSlyjYelskd")
yrrcdefxbqubslyjyelskd
21
The least char is 'l' and occurs at position 18
我尝试了多种变体,但即使使用超过1个循环,我发现自己在各个位置都得到了错误的答案。 另外,如果重要的话,至少Char('blAh')将在第2位返回'A',就像它应该的那样。
我认为最接近看似正确的是,当我在初始for循环中放入另一个for循环时希望我可以增加该变量来比较'i',例如:
for i in range(indexLength):
for j in range(indexLength):
if lowerString[i] < lowerString[j]:
对此做些什么,但我无法使其发挥作用。 谢谢你的帮助。
答案 0 :(得分:1)
扩展@ melpomene的评论,算法技巧(或花哨的计算机科学家称之为启发式)是跟踪两者的最小位置和最小值你正在遍历字符串。
def leastChar(inputString):
# handle cases where inputString is `None` or empty
if not inputString:
print('Oh no, inputString is blank! Run away!')
return
lowerString = inputString.lower()
print(lowerString)
# use enumerate to keep track of the index as
# you are iterating over a list
min_value = lowerString[0]
min_pos = 1
for index, ch in enumerate(lowerString, 1):
# check to see if current char is closer to
# front of alphabet than our current minimum
if ch < min_value:
# if so, keep track of the current pos/value
# as the new minimum
min_pos = index
min_value = ch
# pythonic: min_pos, min_value = index, ch
print("The least char is '{0}' and occurs at position {1}".format(min_value, min_pos))
答案 1 :(得分:0)
有不同的方式:
1)您不允许使用min,max,index,find,ord,chr或list? 我会尝试使用rfind()或rindex()。 :^)
2)复制字符串并使用sort()查找副本中最小的字符。然后你应该使用search()在原始的InputString中返回这个char的位置。
3)创建一个字母串&#34; abcdef ....&#34;并构建一个复杂的while-if-try-except结构来获得结果,但每个人都会讨厌它。 :^)
答案 2 :(得分:-1)
如果我能正确理解你的问题,你可以在python中使用min
>>> min('yRrcDefxBqubSlyjYelskd')
'B'
然后您可以使用index
方法:
>>> 'yRrcDefxBqubSlyjYelskd'.index('B')
8
将返回字符串中char的第一次出现。您的代码中的问题是,在迭代时,您正在检查字符是否小于下一个字符,如果是,则保存索引,但不检查索引处的字符是否已经更小。