Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python不接受某些数字输入

Python不接受某些数字输入
EN

Stack Overflow用户
提问于 2014-07-07 20:19:05
回答 3查看 154关注 0票数 3

使用这段代码,我所要做的就是在奇数之间插入一个破折号,在偶数之间插入一个星号。它并不是对每个输入都能正常工作。它适用于,例如46879,但返回None ( 468799 ),或不插入*介于4和6之间( 4546793 )。它为什么要这么做?谢谢

代码语言:javascript
运行
AI代码解释
复制
def DashInsertII(num): 

 num_str = str(num)

 flag_even=False
 flag_odd=False

 new_str = ''
 for i in num_str:
  n = int(i)
  if n % 2 == 0:
   flag_even = True
  else:
   flag_even = False
  if n % 2 != 0:
   flag_odd = True
  else:
   flag_odd = False
  new_str = new_str + i
  ind = num_str.index(i)

  if ind < len(num_str) - 1:
   m = int(num_str[ind+1])
   if flag_even:
    if m % 2 == 0:
      new_str = new_str + '*'
   else:                 
    if m % 2 != 0:
      new_str = new_str + '-'                     
 else:
  return new_str  
 print DashInsertII(raw_input()) 
EN

回答 3

Stack Overflow用户

发布于 2014-07-07 20:27:02

你的函数定义是我在一段时间内见过的最过度构建的函数之一;下面的函数应该做你想做的事情,消除复杂性。

代码语言:javascript
运行
AI代码解释
复制
def DashInsertII(num):
  num_str = str(num)

  new_str = ''
  for i in num_str:
    n = int(i)
    if n % 2 == 0:
      new_str += i + '*'
    else:
      new_str += i + '-'
  return new_str
print DashInsertII(raw_input()) 

编辑:我只是重新读了一下问题,发现我误解了你想要的东西,那就是在两个奇数之间插入一个-,在两个偶数之间插入一个*。为此,我能想到的最好的解决方案是使用正则表达式。

第二次编辑:根据alvits的要求,我在这里包含了对正则表达式的解释。

代码语言:javascript
运行
AI代码解释
复制
import re

def DashInsertII(num):
  num_str = str(num)

  # r'([02468])([02468])' performs capturing matches on two even numbers
  #    that are next to each other
  # r'\1*\2' is a string consisting of the first match ([02468]) followed
  #    by an asterisk ('*') and the second match ([02468])
  # example input: 48 [A representation of what happens inside re.sub()]
  #    r'([02468])([02468])' <- 48 = r'( \1 : 4 )( \2 : 8 )'
  #    r'\1*\2' <- {\1 : 4, \2 : 8} = r'4*8'
  num_str = re.sub(r'([02468])([02468])',r'\1*\2',num_str)
  # This statement is much like the previous, but it matches on odd pairs
  #    of numbers
  num_str = re.sub(r'([13579])([13579])',r'\1-\2',num_str)

  return num_str

print DashInsertII(raw_input())

如果这仍然不是你真正想要的,请对此发表评论,让我知道。

票数 5
EN

Stack Overflow用户

发布于 2016-04-29 04:54:48

RevanProdigalKnight的答案几乎是正确的,但当3个或更多的偶数/奇数放在一起时就会失败。

使用正则表达式的正确方法是使用正向先行(使用?=)。

代码语言:javascript
运行
AI代码解释
复制
def insert_right_way(num):
    #your code here
    num_str = str(num)
    num_str = re.sub(r'([13579])(?=[13579])', r'\1-', num_str)
    num_str = re.sub(r'([02468])(?=[02468])', r'\1*', num_str)
    return num_str

def DashInsertII(num):
    num_str = str(num)
    num_str = re.sub(r'([02468])([02468])',r'\1*\2',num_str)
    num_str = re.sub(r'([13579])([13579])',r'\1-\2',num_str)

    return num_str


print insert_right_way(234467776667888)

print DashInsertII(234467776667888)

这将输出:

代码语言:javascript
运行
AI代码解释
复制
234*4*67-7-76*6*678*8*8 ( what is desired)
234*467-776*6678*88   ( not what we wanted)
票数 1
EN

Stack Overflow用户

发布于 2014-07-07 20:39:28

如果我理解您的问题-对于11223344,您需要1-12*23-34*4

代码语言:javascript
运行
AI代码解释
复制
def DashInsertII(num): 

    prev_even = ( int(num[0])%2 == 0 )

    result = num[0]

    for i in num[1:]:

        curr_even = (int(i)%2 == 0)

        if prev_even and curr_even:
            result += '*'                
        elif not prev_even and not curr_even:
            result += '-'

        result += i

        prev_even = curr_even

    return result

print DashInsertII(raw_input())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24619098

复制
相关文章
vb.net ExcelHelper类(三)
Public Sub InsertRows(rowIndex As Integer, count As Integer)
办公魔盒
2019/07/22
1K0
vb.net ExcelHelper类(一)
''' 暂时不提供操作Excel对象样式方法,样式可以在Excel模板中设置好
办公魔盒
2019/07/22
1.3K0
vb.net ExcelHelper类(二)
''' <param name="sheetIndex">工作表索引</param>
办公魔盒
2019/07/22
1.2K0
Lambda序列化支持debugger
代码仓库:https://gitee.com/VampireAchao/stream-query
阿超
2022/08/20
3230
Lambda序列化支持debugger
VB.NET 对ini配置文件操作类
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。但在某些情况,还是要直接编辑ini才方便,一般只有很熟悉windows才能去直接编辑。
办公魔盒
2019/07/22
1.5K0
VB.NET 对ini配置文件操作类
Dubbo 支持哪些序列化协议?
dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?
李红
2019/05/29
1.6K0
C#序列化反序列化帮助类
//转载:http://hi.baidu.com/fxh19860822/blog/item/df35230b3ded441495ca6bd5.html 在C#中常见的序列化的方法主要也有三个:BinaryFormatter、SoapFormatter、XML序列化 /// <summary> /// 提供序列化和反序列化对象的相关静态方法。 /// </summary> public class SerializerHelper { ///
跟着阿笨一起玩NET
2018/09/18
1.6K0
Dubbo支持的通信、序列化协议
默认就是走dubbo协议的,单一长连接,NIO异步通信,基于hessian作为序列化协议。
JavaEdge
2022/11/30
4480
Dubbo支持的通信、序列化协议
python 类支持with调用
为了让一个对象兼容 with 语句,你需要实现 __enter__() 和 __exit__() 方法。 例如,考虑如下的一个类,它能为我们创建一个网络连接:
用户5760343
2019/12/13
9620
dubbo 支持哪些通信协议?支持哪些序列化协议?
序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序列化是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
IT技术小咖
2019/06/26
1.5K0
dubbo 支持哪些通信协议?支持哪些序列化协议?
模型类序列化器ModelSerializer
如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。
小闫同学啊
2019/07/18
6280
java序列化反序列化工具类SerializeUtils.java
Redis不支持直接将Java对象存储到数据库中,所以需要将java对象进行序列化得到字节数组,然后将字节数组存入到redis中,需要数据的时候就从redis数据库中取出字节数组,再经过反序列化将自己数组转换成对象使用(jdk序列化性能比谷歌公司的Protobuf序列化性能要差一些,而且序列化后的字节长度要也会长一些,所以推荐使用Protobuf.
IT工作者
2022/05/06
6580
JSON类库Jackson优雅序列化Java枚举类
在Java开发中我们为了避免过多的魔法值,使用枚举类来封装一些静态的状态代码。但是在将这些枚举的意思正确而全面的返回给前端却并不是那么顺利,我们通常会使用Jackson类库序列化对象为JSON,今天就来讲一个关于使用Jackson序列化枚举的通用性技巧。
码农小胖哥
2020/06/28
5.4K0
[PHP]实体类基类和序列化__sleep问题
1.构造函数传参 2.__get和__set实现,当调用不存在的属性的时候,可以取值和赋值到data属性数组 3.__sleep实现,当序列化对象的时候,只序列化data属性数组和类内初始化定义的字段 4.__isset实现,可以判断属性是否存在,通过判断data属性数组 5.toArray方法实现,返回data属性数组 6.记录了构造初始化后,动态添加的属性字段
唯一Chat
2019/09/10
5150
StreamingPro 支持类SQL DSL
受spark sql在喜马拉雅的使用之xql 这篇文章影响,我发现类似下面这种语法是极好的:
用户2936994
2018/08/27
5030
VB.NET 对SQLite轻型数据库操作的SQLiteHelp类
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起MysqlPostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
办公魔盒
2019/07/22
3.4K0
VB.NET 对SQLite轻型数据库操作的SQLiteHelp类
制作最清晰缩略图的完整类(VB.NET版)
Public Class ClassUpPic    Private vPicFile As Sys
Java架构师必看
2021/03/22
4850
浅谈VB.NET[通俗易懂]
前一段时间好多同学都分享了如何高效看视频的学习方法,第一条就是在看视频之前,对视频中所讲的内容有一个大致的了解。看VB.NET 视频,首先我们就要了解一下VB.NET是什么,它是用来干什么的。
全栈程序员站长
2022/08/09
2K0
浅谈VB.NET[通俗易懂]
Kafka 中使用 Avro 序列化框架(一):使用传统的 avro API 自定义序列化类和反序列化类
关于 avro 的 maven 工程的搭建以及 avro 的入门知识,可以参考: Apache Avro 入门
CoderJed
2018/09/13
2.6K0
Kafka 中使用 Avro 序列化框架(一):使用传统的 avro API 自定义序列化类和反序列化类
Dubbo 支持的几个主流序列化框架评测
今天要聊的技术是序列化,这不是我第一次写序列化相关的文章了,今天动笔之前,我还特地去博客翻了下我博客早期的一篇序列化文章(如下图),竟然都过去 4 年了。
kirito-moe
2021/09/08
1.8K0
Dubbo 支持的几个主流序列化框架评测

相似问题

vb.net序列化类

23

通过序列化支持的Singleton类

11

VB.Net创建要序列化的类

10

将VB.Net Xml反序列化为类

31

VB.net -序列化具有事件的类

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文