python - 最后一个字符不打印

标签 python string range

我正在尝试编写一个代码,该代码将返回字符串中具有连续字符的最长子字符串。

这是我的代码:

s = 'abcecdefgh'
n = 1
string_l = ''
string_s = str(s[0])

for char in range(0,(len(s)-1)):
    if s[n]>s[n-1] and n+1 < (len(s)):     
        string_s += str(s[n])
        n +=1
    else:

        #string_s += str(s[n+1])
        if len(string_s)> len(string_l):
            string_l = string_s
            string_s = str(s[n])
            n += 1
        else:
            n += 1



print(string_l)

它“有效”,只是最后一个字符不会打印,除非该值小于前一个字符。

就我而言,当 s = 'abcecdefgh' 时,输出为“cdefg”。 如果 s = 'abcecdefgh',则输出为 'cdefgh'。

我不明白为什么!

最佳答案

我没有检查您的代码来查看错误来自何处,因为它存在几个问题,而是创建了一个新的实现:

script.py:

#!/usr/bin/env python3

import sys


def substring_original(s):
    n = 1
    string_l = ''
    string_s = str(s[0])

    for char in range(0, (len(s) - 1)):
        if s[n] > s[n - 1] and n + 1 < (len(s)):
            string_s += str(s[n])
            n += 1
        else:
            #string_s += str(s[n+1])
            if len(string_s) > len(string_l):
                string_l = string_s
                string_s = str(s[n])
                n += 1
            else:
                n += 1
    return string_l


def substring(s):
    l = len(s)
    max_sub_len = 0
    max_sub_idx = -1
    for idx in range(l):
        cur_len = 0
        idx1 = idx + 1
        while idx1 < l and ord(s[idx1]) - ord(s[idx1 - 1]) == 1:
            idx1 += 1
        cur_sub_len = idx1 - idx
        if cur_sub_len > max_sub_len:
            max_sub_len = cur_sub_len
            max_sub_idx = idx
    return s[max_sub_idx:max_sub_idx + max_sub_len]


def main():
    for s in [
        "abcecdefgh",
        "abcecdefgg",
        "abcecdxefxgh",
        "ab",
        "cba",
        "a",
        "",
    ]:
        try:
            orig_substr = substring_original(s)
        except Exception as e:
            orig_substr = str(e)
        try:
            new_substr = substring(s)
        except Exception as e:
            new_substr = str(e)
        print(f"\nText: [{s}]\n    Original substring: [{orig_substr}]\n    New substring: [{new_substr}]")


if __name__ == "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main()
    print("\nDone.")

注释:

  • 代码(包括您的代码)按函数组织
  • 新的实现(子字符串):
    • 确实有用,但效率不是很高,因为相同的字符串操作(比较)会执行多次,因此还有改进的空间
    • 在某些情况下,一个字符串包含多个具有相同(最大)长度的子字符串。在本例中,返回第一个
  • 最后,尝试对几个字符串示例进行一些测试

输出:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q057025425]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" script.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32


Text: [abcecdefgh]
    Original substring: [cdefg]
    New substring: [cdefgh]

Text: [abcecdefgg]
    Original substring: [cdefg]
    New substring: [cdefg]

Text: [abcecdxefxgh]
    Original substring: [cdxfx]
    New substring: [abc]

Text: [ab]
    Original substring: [a]
    New substring: [ab]

Text: [cba]
    Original substring: [c]
    New substring: [c]

Text: [a]
    Original substring: []
    New substring: [a]

Text: []
    Original substring: [string index out of range]
    New substring: []

Done.

关于python - 最后一个字符不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025425/

相关文章:

python - 旋转 Pandas 数据框

Java:根据正则表达式的值更改 var 的值(字符串)

python - 以右对齐的精度打印 float

php - PHP 中的 2 列 Mysql 日期范围搜索

ios - 将 Int 范围数组快速转换为字符串数组

Python请求包脚本错误

PHP无法通过python连接mysql

python - 计算旋转数据框的列数并连接到 python 中的另一个数据框

c - 请告诉我我做错了什么,因为 Monthstr2num 返回的值是错误的

javascript - IE9 Alert() 现在阻止 range.select 显示所选文本