2013-03-24 2 views
0

안녕하세요 여러분 숫자를 주어진 사전의 단어로 변환하는 코드를 생성하려고합니다. 하지만 전혀 인쇄하지 않는 것 같습니다. 오류 또는 아무것도. 나는 문제를 찾기 위해 많은 것을 시도했지만 여전히 아무것도 찾지 못했습니다.Python : 숫자를 단어로 변환

6을 입력하면 프로그램이 아무 것도 발동하지 않습니다.

[six]을 출력해야합니다.

나는 그것이 간격 문제라고 생각했지만 나는 그럴 것이라고 생각하지 않는다. 여기

내가

import string 


value = input("Enter a number 1 - 9 separted by commas: ") 

def user_input(value): 
    numbers = {} 
    user_list = value.split(',') 
    numbers = [(x.strip()) for x in user_list] 
    return numbers 
    print(numbers) 

user_input(value) 

numbers = user_input() 

unit_number = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 
      5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'} 

def convert_n_to_w(numbers): 
    i = len(str(numbers)) 

    if i == 0: 
     return 

    if i == 1: 
     return unit_number[numbers] 

    print(unit_number[numbers]) 

convert_n_to_w (수)

사람이 내가 잘못하고 무슨 짓을했는지 나에게 보여 주시겠습니까이 무엇입니까?

업데이트 !!!!!!!

나는 convert_n_to_w(numbers) 나는 내가 그것을 정의라고 생각하면 나에게

NameError: name 'numbers' is not defined

line 38, in <module> convert_n_to_w(numbers)

말을 덧붙였다.

답변

2

코드에 몇 가지 문제가 있습니다. 코드를 수정하고 싶습니다. 아래 코드는 잘 작동하지만 pythonic이 아닙니다. 억에 값 개까지

value = input("Enter a number 1 - 9 separted by commas: ") 

def user_input(value): 
    if isinstance(value, tuple): 
     return list(value) 
    else: 
     user_list = value.split(',') 
     numbers = [(x.strip()) for x in user_list] 
     return numbers 


unit_number = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 
      5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'} 

def convert_n_to_w(numbers): 
    for n in numbers: 
     print(unit_number[int(n)]) 

numbers = user_input(value) 

convert_n_to_w(numbers) 
+0

괜찮습니다. 고마워요 –

+0

와우! 고맙습니다. !!! 나는 그것이 잘못된 길로 가고, 문제가 정말로 나의 첫 번째 기능에서 시작되었다는 것을 알았다. –

3

인쇄문 print(unit_number[numbers])convert_n_to_w 기능입니다. 언제든지이 함수를 호출하지 않으므로 print 문이 실행되지 않습니다.

함수를 호출하거나 함수에서 print 문을 꺼냅니다.

+0

은 유감이 다시 걷어 바뀐' 이름 오류'나는 이미 그 이유를 모른다. 'convert_n_to_w (numbers) NameError : 'numbers'가 정의되지 않았습니다. ' –

+0

대단히 감사합니다! –

1

returnuser_input 숫자를 인쇄하기 전에. 해당 함수의 print 문에 절대로 도달하지 않습니다.

업데이트 :

그리고 @Joni가 나타내는대로 기능 convert_n_to_w 전혀 호출되지 않습니다

.

아무런 의미가 없으므로 print 문구가 실행됩니다.

+0

입력 해 주셔서 감사합니다! –

1
#Dictionaries for reference 
ones = {"1":"One","2":"Two","3":"Three","4":"Four","5":"Five","6":"Six", "7":"Seven","8":"Eight","9":"Nine"} 
afterones = {"10":"Ten","11":"Eleven","12":"Twelve","13":"Thirteen","14":"Fourteen","15":"Fifteen","16":"Sixteen", "17":"Seventeen","18":"Eighteen","19":"Nineteen"} 
tens = {"2":"Twenty","3":"Thirty","4":"Fourty","5":"Fifty","6":"Sixty", "7":"Seventy","8":"Eighty","9":"Ninety"} 
grand={0:" Billion, ",1:" Million, ",2:" Thousand, ",3:""} 

#Function converting number to words of 3 digit 
def num_to_wrds(val): 
    if val != "000": 
     ans = "" 
     if val[0] in ones: 
      x = val 
      ans = ans + ones[val[0]] + " Hundered and " 
     if val[1:] in afterones: 
      ans = ans + afterones[val[1:]] + " " 
     elif val[1] in tens: 
      ans = ans + tens[val[1]] + " " 
     if val[2] in ones: 
      ans = ans + ones[val[2]] 
     return ans 


num = input("Enter the number: ") 

# Paddiing with zeros 
pad = 12-len(str(num)) 
numinwrds = "0"*pad + str(num) 

final ="" 
numlis = [numinwrds[0:3],numinwrds[3:6],numinwrds[6:9],numinwrds[9:12]] 

for key,grp in enumerate(numlis): 

    if grp!="000": 
     final = final + num_to_wrds(grp) + grand[key] 

print final 

이 인쇄 당신이 완벽 참고 작동 그랜드 사전에 더 추가 할 수 있습니다 위해 감소에 가장 높은 값을 넣어 확인을

관련 문제