首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将整数转换为一元表示法

将整数转换为一元表示法
EN

Code Review用户
提问于 2019-09-19 02:35:17
回答 2查看 693关注 0票数 9

我写了一个python脚本,它的数字是1-9 (0是":“),不像真正的1^k形式的一元语言,我用它们的小数位来表示n的值。整数121总体上是1_11_1,n个“整数”中的每一个k位数都是计数表示法,计数的数量是给定n个“整数”中所有数字的总和,例如121 = 4,1_11_1 = 4。

它叫多减一次。如果可以在多时间内将实例A(9,33,4)转换为实例B(1111_1111 1,111-111,1111),那么它的NP-完全

转换规则就是在while循环中按顺序输入每个整数。另外,当你的整数是负数时,你不会给输入一个"-“符号。如果是负数,它将要求输入。

代码语言:javascript
复制
Input 

(9,33,4) "9, and then 33 and then 4. One at a time for each input."

Output

'111_1111 1' = 9

    111     
33>>
    111     

    11 11    =4

算法的

约简

代码语言:javascript
复制
# This algorithm is very simple and inconsequential.
# It converts integers into a unary like language 
# in poly time. All tallies are represented vertically.

print('If your integer is a negative, the script will ask.')
print("DO NOT GIVE -X integers for input!!!")
print('Script will output multiple - symbols for a negative integer transformation')

while 0 == 0:
  ask = input('Enter an integer from a subset-sum instance sequentially.')
  askStr = str(ask)
  res = list(map(int, str(askStr)))
  x = (res)
  asktwo = input('Is your integer a negative integer? y or n: ')
  if asktwo == str("y"):
     twinkle = str('-')
  else:
     twinkle = str(" ")  
  for n in x:
      if n == 0: 
       tallyone = ":"
       print(twinkle, tallyone)
      if n == 1:
       print(twinkle, "1")
      if n == 2:
       print(twinkle, "11")
      if n == 3:
       print(twinkle, "111")
      if n == 4:
       print(twinkle, "11 11")
      if n == 5:
       print(twinkle, "111 11")
      if n == 6:
       print(twinkle, "111 111")
      if n == 7:
       print(twinkle, "111_111 1")
      if n == 8:
       print(twinkle, "1111 1111")
      if n == 9:
       print(twinkle, "1111_1111 1")

问题

从什么角度看,这段代码是不是很草率?我是不是以一种丑陋的方式使用way循环和变量名称?我在打印报表中的数字很难读懂吗?我的代码中最丑陋的部分是什么,我将如何改进它们?

密码有效。但是,我对python还不太了解,所以您在我的代码中看到了哪些错误?

EN

回答 2

Code Review用户

回答已采纳

发布于 2019-09-19 09:24:27

这是一项非常有趣的任务。干得好。以下是一些批评。

打印(‘如果你的整数是负的,脚本会问’)。打印(“不要为输入提供-X整数!”)打印(“脚本将输出用于负整数转换的多个符号”)

  • 不要同时使用双引号("")和单引号('')字符串。选一个。我个人更喜欢""

而0 == 0: ask =input(‘从子集和实例中依次输入一个整数’)。

  • 使用4个空格(而不是2个)缩进被认为是一个最佳实践。
  • 另外,将实际转换功能转移到新函数会更好。
  • 另外,最好使用while True而不是while 0 == 0来表示一个没完没了的循环。
    • 原因:这是更易读的。

askStr = str(ask) res = list(map(int,str(AskStr)

  • 您要将ask转换两次为字符串。这是多余的。
  • 因为input()返回一个字符串,所以根本不需要转换它。
  • 使用python约定作为名称也是一个更好的方法。例:ask_strvalue

X= (res)

  • 这里不需要括号。
  • 也不需要分配给x,您可以直接使用res

如果两个== str("y "):twinkle = str('-'),否则: twinkle = str(“”)

  • 您不需要再次将字符串文字转换为字符串。
  • 您可以直接使用"y"作为字符串。
  • twinkle不是一个好名字。使用类似于sign的东西。
票数 7
EN

Code Review用户

发布于 2019-09-19 07:07:47

Pythonic.Python的禅宗。Python.

成语

这些短语将出现在python代码中。基本上他们指的是可读性。

其他程序员必须能够阅读您编写的代码。这里有一些事情可以做,以提高你的知识。

  • 在控制台中,可以将help()与其他方法结合使用,以获取docstring和有关python工作方式的信息。
  • type()将显示当前正在使用的数据类型。
  • input()返回一个字符串。
  • int(str, base)返回带有给定值(2 <= base <= 36)基的整数。
  • enumerate(tuple)允许索引,是快速的(因为它不需要创建一个新的列表)。
  • while 0==0:很丑。while True:是无限美丽的。
代码语言:javascript
复制
print('user instructions')

response = input('Pick an integer value less than infinity:\n')
mapped_response = map(int, response)
response_length = len(response) - 1   # eewww!
result = ''

for index, value in enumerate(mapped_response):
  result = f"{result}\
             {':' if not value else ''.join('1' for _ in range(value))}\
             {'_' if index < response_length else ''}"

print(result)

输入

543210

输出

11111_1111_111_11_1_:

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/229287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档