求助:Python中ADN转ARN的数组填充函数失效问题修复
修复ADN转ARN的数组填充及转换功能
问题分析
你的remplir函数无法正确填充数组,核心原因是:你把用户输入的碱基值存在了临时变量a里,但没有将a赋值回数组T的对应索引位置。除此之外还有几个细节问题需要修正:
- ADN的碱基是
A、T、C、G,你误写成了ARN的碱基U,需要修正输入校验的列表 - 使用numpy数组时,初始化为
[0]*n会创建整数类型数组,直接赋值字符串会报错,需要指定字符串类型 - 主程序中没有调用转换函数
conv就直接打印ARN数组,导致输出的是初始的0值
修复后的代码
from numpy import array def saisie(): # 输入数组长度并做范围校验 n = int(input("请输入数组长度:")) while not (5 <= n <= 30): n = int(input("长度需在5-30之间,请重新输入:")) return n def remplir(T, n): # 填充ADN碱基数组 for i in range(n): a = input("请输入ADN碱基(A/T/C/G):") while a not in ["A", "T", "C", "G"]: a = input("输入错误,请输入正确的ADN碱基(A/T/C/G):") # 将输入值赋值回数组对应位置 T[i] = a return T def affiche(T, n): # 打印数组内容 for i in range(n): print(T[i], end="/") print() # 换行,避免后续内容跟在同一行 return T def conv(T, Tarn, n): # ADN转ARN:A→U,T→A,C→G,G→C for i in range(n): base = T[i] if base == "A": Tarn[i] = "U" elif base == "T": Tarn[i] = "A" elif base == "C": Tarn[i] = "G" elif base == "G": Tarn[i] = "C" return Tarn # 主程序 n = saisie() # 初始化字符串类型的numpy数组 T = array([""] * n, dtype=str) Tarn = array([""] * n, dtype=str) # 填充ADN数组 remplir(T, n) # 转换为ARN数组 conv(T, Tarn, n) # 打印ARN结果 affiche(Tarn, n)
关键修复点
- 填充函数修正:在
remplir中添加T[i] = a,将用户输入的碱基值存入数组对应位置 - 碱基校验修正:把输入校验的列表从
["A","U","G","C"]改为["A", "T", "C", "G"],符合ADN的碱基类型 - 数组类型修正:初始化numpy数组时指定
dtype=str,确保可以存储字符串类型的碱基 - 主程序流程修正:按顺序调用
remplir填充ADN→conv转换为ARN→affiche打印结果,保证逻辑完整
内容的提问来源于stack exchange,提问作者amine belajdel
相关产品推荐
相关产品推荐

