首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁能告诉我为什么我的程序可以在Python2.7而不是3.3中运行?

谁能告诉我为什么我的程序可以在Python2.7而不是3.3中运行?
EN

Stack Overflow用户
提问于 2013-11-03 04:22:49
回答 2查看 115关注 0票数 0

我有这两个函数:

代码语言:javascript
复制
def MatchRNA(RNA, start1, end1, start2, end2):
    Subsequence1 = RNA[start1:end1+1]
    if start1 > end1:
        Subsequence1 = RNA[start1:end1-1:-1]
    Subsequence2 = RNA[start2:end2+1]
    if start2 > end2:
        Subsequence2 = RNA[start2:end2-1:-1]
    return Subsequence1, Subsequence2


def main():
    RNA_1_list = ['A','U','G','U','G','G','G','U','C','C','A','C','G','A','C','U','C','G','U','C','G','U','C','U','A','C','U','A','G','A']
    RNA_2_list = ['C','U','G','A','C','G','A','C','U','A','U','A','A','G','G','G','U','C','A','A','G','C']
    RNA_Values = {'A': 1, 'U': 2, 'C': 3, 'G': 4}
    RNA1 = []
    RNA2 = []
    for i in RNA_1_list:
        if i in RNA_Values:
            RNA1.append(RNA_Values[i])
    for i in RNA_2_list:
        if i in RNA_Values:
            RNA2.append(RNA_Values[i])
    RNA = list(input("Which strand of RNA (RNA1 or RNA2) are you sequencing? "))       
    Start1, End1, Start2, End2 = eval(input("What are the start and end values (Start1, End1, Start2, End2) for the subsequences of the strand? "))
    Sub1, Sub2 = MatchRNA(RNA, Start1, End1, Start2, End2)
    print(Sub1)
    print(Sub2)

因此,当我运行主函数,并输入(例如):RNA1,然后是3、14、17、28,它应该打印两个列表:[2,4,4,4,2,3,3,1,3,4,1,3][4,2,3,4,2,3,2,1,3,2,1,4]。当我测试这段代码时,我无意中使用了Python2.7,它工作得很好(没有那个eval ),但是当我在3.3中运行它(并把eval放回去)时,它打印了两个列表,'1‘和[]。有没有人知道为什么它在3.3中不能工作,或者我如何让它在3.3中工作?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-11-03 04:24:58

在Python3中,input()返回一个字符串,而在Python2中,它等同于eval(raw_input)

对于RNA1作为输入:

Python3:

代码语言:javascript
复制
>>> RNA1 = []
>>> list(input("Which strand of RNA (RNA1 or RNA2) are you sequencing? "))
Which strand of RNA (RNA1 or RNA2) are you sequencing? RNA1
['R', 'N', 'A', '1']

Python2:

代码语言:javascript
复制
>>> list(eval(input("Which strand of RNA (RNA1 or RNA2) are you sequencing? ")))
Which strand of RNA (RNA1 or RNA2) are you sequencing? RNA1
[]
票数 3
EN

Stack Overflow用户

发布于 2013-11-03 04:43:54

很接近,但问题的主要来源在这里:

代码语言:javascript
复制
 RNA = list(input("Which strand of RNA (RNA1 or RNA2) are you sequencing? "))

那里的list()调用在任何情况下都是无用的。

在Python2中,当您输入RNA1时,input()将计算该符号并返回绑定到RNA1的列表。

在Python3中,input()返回字符串"RNA1",无意义的;-) list()将其转换为

代码语言:javascript
复制
['R', 'N', 'A', '1']

更改代码以在两个版本下运行的一种方法是:首先在顶部添加以下内容:

代码语言:javascript
复制
try:
    raw_input
except:  # Python 3
    raw_input = input

然后更改输入行:

代码语言:javascript
复制
RNA = eval(raw_input("Which strand of RNA (RNA1 or RNA2) are you sequencing? "))
Start1, End1, Start2, End2 = eval(raw_input("What are the start and end values (Start1, End1, Start2, End2) for the subsequences of the strand? "))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19746471

复制
相关文章

相似问题

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