首页 > 编程问答 >关于如何压缩代码的改进和想法

关于如何压缩代码的改进和想法

时间:2024-07-23 08:38:47浏览次数:12  
标签:python

我和我的一个朋友正在研究如何用 Python 从头开始​​压缩 Pig Latin 翻译器。这是我的代码:

output = []
outputWord = ""
def translate(inp):
  global output
  words = inp.split()
  for i in range(len(words)):
    outputWord = ""
    curWord = words[i]
    if curWord[0] == "a" or curWord[0] == "o" or curWord[0] == "e" or curWord[0] == "u" or curWord[0] == "i":
      outputWord = curWord + "way"
    elif curWord[1] == "a" or curWord[1] == "o" or curWord[1] == "e" or curWord[1] == "u" or curWord[1] == "i":
      for count in range(len(curWord)-1):
        outputWord = outputWord + curWord[count+1]
      outputWord = outputWord + curWord[0] + "ay"
    else:
      for count in range(len(curWord)-2):
        outputWord = outputWord + curWord[count+2]
      outputWord = outputWord + curWord[0] + curWord[1] + "ay"
    output.append(outputWord)
translate(raw_input(""))
print(' '.join(output))

我们不考虑大写或标点符号。到目前为止,我已经写到了 21 行,而他仍在修复他的代码。

我看到人们将 if/elif/else 语句压缩到一行,但我不确定是否是这样。我会用这个。
有人对压缩有任何其他想法吗?
注意:请不要为我压缩我的代码。一切都是我们自己做的,但我们可以寻求帮助。如果您能找到一种方法,我可以压缩我的代码,将我引导到解释如何操作的地方,或者在不考虑我的具体情况的情况下向我解释它,只是类似的东西。
或者如果我有错误/改进,您可以尝试用同样的方式解释它。


你的代码写得很好,而且组织得很好,这比压缩代码更重要。但,由于你的目标是尽可能缩短代码,下面提供了一些建议:

  1. 使用成员资格测试以获得简洁性:

你可以使用 if curWord[0] in "aeiou": 代替单独列出所有元音。这将检查第一个字母是否包含在元音字符串中,这更简洁。

  1. 使用切片和字符串连接:

你可以使用 Python 的切片功能来代替循环追加字母。例如, curWord[1:] 将给你从第二个字母到字符串末尾的所有字母。

  1. translate() 函数的输出内联:

你可以直接在 print 语句中调用 translate() 函数,而不是将结果存储在 output 列表中,然后再连接并打印。

以下是你的代码的压缩版本,其中包含了解释:

def translate(inp):
  words = inp.split()
  return ' '.join(
    word + "way" if word[0] in "aeiou" else \
    word[1:] + word[0] + "ay" if word[1] in "aeiou" else \
    word[2:] + word[0:2] + "ay" 
    for word in words
  )

print(translate(raw_input(""))) 

说明:

  • 此代码使用列表推导在一个表达式中执行翻译,使其比循环方法更紧凑。
  • 它使用条件表达式( a if condition else b )来处理不同的元音位置,从而实现一行中实现 if/else 逻辑。
  • word[0] in "aeiou" 检查第一个字母是否是元音。
  • 切片如 word[1:] word[2:] word[0:2] 用于提取单词的不同部分,从而实现简洁的 Pig Latin 转换。

请记住,虽然此压缩版本更短,但它可能不像你的原始代码那样具有可读性。在软件开发中,可读性和可维护性通常比简洁性更重要。

标签:python
From: 78781143

相关文章

  • python 文件(txt)操作
    我有一个txt文件,其中包含一列(大约2000个)单词。每个单词只用一个新行分隔。我想将所有这些单词存储在一个数组中words.txt文件的示例:applebananaorange我尝试过的代码:importrandomwithopen('E:/Code/learn/Projects/word-guessing-game/words.txt','r')a......
  • matplotlib与Python不兼容问题
    “我使用的是Matplotlib版本3.7.2。Anaconda的Spyder中的Python版本是3.8.18。当我运行importmatplotlib.pyplotasplt行时,出现错误module'matplotlib'hasnoattribute'rcParams'。当我尝试将Matplotlib和matplotlib.base包从当前的3.7.2版本升级到3.8......
  • 使用 json 配置文件进行 Python 日志记录
    我玩弄了日志模块,发现了一些我不太清楚的事情。首先,因为这是一个大程序,我希望代码尽可能简单,因此我使用了json配置文件.{"version":1,"disable_existing_loggers":false,"formatters":{"simple":{"format":"%(asctime)s-%(name)s......
  • Python随机库:从帕累托分布进行模拟(使用形状和尺度参数)
    根据Python文档,random.paretovariate(alpha)模拟帕累托分布,其中alpha是形状参数。但帕累托分布同时采用形状和尺度参数。如何从指定这两个参数的分布中进行模拟?你说的对,帕累托分布是由形状和尺度参数定义的,而random.paretovariate(alpha)函数只接受形状参数......
  • 跳过 Python Spark Pyspark Databricks 未知字段异常中的不良记录
    我想知道是否有人知道如何跳过我们从json文件获取的记录这是错误[UNKNOWN_FIELD_EXCEPTION.NEW_FIELDS_IN_RECORD_WITH_FILE_PATH]在解析过程中遇到未知字段:这是失败的代码sent=spark.readStream.format('cloudFiles')\.option('cloudFiles.format','json')......
  • 使用 python 截断 Databricks 中的增量表
    对于Python和SQL,这里给出了Delta表删除操作,并且给出了使用SQL的截断这里但我找不到Python截断表的文档。如何在Databricks中对增量表执行此操作?HowtodoitfordeltatableinDatabricks?虽然Databricks中没有直接使用PythonAPI截断De......
  • 从Python中的列表列表中提取随机列表选择
    我有一个从图像生成的RGB值列表:color_list=[(192,155,120),(132,81,65),(226,226,199),(76,94,117),(140,157,178),(17,34,54),(217,213,139),(134,171,144),(98,123,95),(109,145,96),(181,109,92),(71,47,39),......
  • 这段代码是否保证Python对象被立即删除?
    我正在将Redis异步客户端与Celery一起使用,但在两者之间的集成方面遇到了一些问题。上下文是我需要删除redis.Redis实例(在构造函数中创建)以便关闭连接(该对象有一个close方法,但当asyncio事件循环关闭时我无法使用它,heal_client方法仅在这些情况下才会使用。我的代码如......
  • python selenium 行为错误:AttributeError:“Context”对象没有属性“driver”
    我正在使用pythonselenium与Behavior包一起工作。这是代码:@given('theuserisontheloginpage')defstep_given_user_on_login_page(context):PATH='C:/Users/PycharmProjects/ui_test/chromedriver-win32/chromedriver.exe'context.driver=......
  • python 脚本中的路点用于处理大数据集
    我编写了一个脚本,将一堆来自api的请求写入csv文件。该api中有数千个请求,并且在结束循环/退出程序之前永远不会结束。如何合并航路点,以便如果再次发生停顿,它会自动继续前进并最终打印所有请求?我尝试了一些不起作用的方法,但我不知道下一步该怎么做。以下是使用航路点......