2015-06-06 69 views
-1

所以我试图改变一个随机变量为一个函数的字符串,任何想法,为什么这是行不通的?如何在python中将变量更改为字符串?

def letter(x): 
    if x == 1: 
      x = "A" 
    elif x == 2: 
      x = "C" 
    elif x == 3: 
      x = "G" 
    elif x == 4: 
      x = "T" 
    else: 
      print "Error" 
randint18= random.randrange(1,5) 
letter(randint18) 
print randint18 ` 
+0

往回走你的Python控制台慢,深呼吸,然后阅读[这篇文章](http://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/)right现在。 –

回答

2

您必须从函数返回值并将其赋值给变量。

def letter(x): 
    ... 
    return x 


randint18 = random.randrange(1, 5) 
result = letter(randint18) 
print result 
+0

谢谢!对不起,如果这是一个愚蠢的问题。 –

0

你忘了,包括你的函数返回

def letter(x): 
    if x == 1: 
      x = "A" 
    elif x == 2: 
      x = "C" 
    elif x == 3: 
      x = "G" 
    elif x == 4: 
      x = "T" 
    else: 
      print "Error" 
    return x 
randint18 = random.randrange(1,5) 
returned_result = letter(randint18) 
print returned_result 
1

你不能改变的地方,你必须返回它并捕获返回值的变量。

import random 

def letter(x): 
    if x == 1: 
      x = "A" 
    elif x == 2: 
      x = "C" 
    elif x == 3: 
      x = "G" 
    elif x == 4: 
      x = "T" 
    else: 
     print "Error" 
    return x # return it here 

randint18= random.randrange(1,5) 
randint18 = letter(randint18) # capture the returned value here 
print randint18 

有一种更简单的方法来实现你想要的,使用字典来映射值。

import random 

def letter(x): 
    mapd = {1:'A', 2:'C', 3:'G', 4:'T'} 
    return mapd.get(x, None) 

randint18= random.randrange(1,5) 
randint18 = letter(randint18) 
print randint18 
0

添加功能

return x 

value_you_want =信(randint18)的返回值##加return语句。输出将被保存为value_you_want

请注意,函数内部定义的变量对函数来说是局部的,并且不能在函数的作用域之外访问。你期待着函数之外的x值是不可能的。只是为了检查运行你的函数,并尝试访问变量x中的值。它会给出错误。

Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    print x 
NameError: name 'x' is not defined 
1

我不是一个正确的答案,它已被提供,但一个改善你的代码的建议。我会在评论中这样做,但代码格式不够好。

为什么不使用字典的映射,而不是一系列的if?你仍然可以把它放在一个功能,如果你喜欢:

letter = {1:'A', 2:'C', 3:'G', 4:'T'} 
randint18 = random.randrange(1,5) 
mapping = letter.get(randint18, 'Error') 
print mapping 

你要知道,列表会更有效,如果映射开始形式为零:

letter = ['A', 'C', 'G', 'T'] 
randint18 = random.randrange(0,4) 
try: # in case your random index were allowed to go past 3 
mapping = letter[randint18] 
except IndexError: 
mapping = 'Error' 
print mapping 
相关问题