+ 2

Can someone pls tell me what is wrong with my code. It a solution for the no numeral

a = input("") numerals = { "1" : "one", "2" : "two", "3" : "three", "4" : "four", "5" : "five", "6" : "six", "7": "seven", "8" : "eight", "9" : "nine" } output = "" for i in a: if i.isdigit(): output += a.replace(i,numerals[i]) print(output)

7th May 2020, 10:32 PM
Papa Kwasi Ansah Asare
Papa Kwasi Ansah Asare - avatar
14 Antworten
+ 4
A couple of things: Firstly, you don't add a character to 'output' if it isn't a number - only if it is. Secondly, you don't appear to change "0" to "zero" which the task (possibly) asks you to do.
7th May 2020, 10:50 PM
Russ
Russ - avatar
+ 3
Lord Nader Only you can see your solutions to Code Coach challenges, no one else.
7th May 2020, 11:08 PM
Russ
Russ - avatar
+ 3
Lord Nader you can't look at other people's solutions. You can only see your own once you get in there. Probably because that would be cheating. G B that's not a valid solution to the challenge. Only numbers less than or equal to ten should be converted, which is part of their issue. Kwasi Ansah you need to first break the input into a list of words and not go over each individual character. Then you can check if each word isdigit and less than 11. Then do your conversion, but yes, as Russ stated, you need to add 0 "zero" and maybe 10 "ten" to your dictionary.
7th May 2020, 11:15 PM
ChaoticDawg
ChaoticDawg - avatar
+ 2
if i.isdigit(): output += numerals[i] else: output += i
7th May 2020, 11:09 PM
Russ
Russ - avatar
+ 2
Try this code: msg=input() num={"1":"one","2":"two","3":"three","4":"four","5":"five","6":"six","7":"seven","8":"eight","9":"nine","10":"ten"} for i in msg.split(): if(num.get(i,0)): print(num[i],end=" ") else: print(i,end=" ")
9th May 2020, 1:33 PM
Jenson Y
+ 1
when input is "123" you will replace "1" by "one" in first iteration. but "23" is still there, so you append "one23" to output... next will be "1two3", then "12three"... better way is, to only use one digit of input per iteration.. Try this: output="" for idx, val in enumerate(a): if val.isdigit(): output += a[idx].replace(val,num[val]) print(output)
7th May 2020, 10:50 PM
G B
G B - avatar
+ 1
Russ: Sometimes easy is better :D
7th May 2020, 11:12 PM
G B
G B - avatar
+ 1
Kwasi Ansah first try using split() on your input so that 'a' is now a list of string (words) instead of just an input string. Then make sure you make the changes to your dictionary so that it covers all values 0-10. Then make a change to your loop (there are a few ways you could go here, but I'm going to try and keep it simple) so that you can get both the value and the index of the element in the list 'a'. See the enumerate() method. You can then check if the element in the list is a number and if its value is in the given range. If so use the index of the current element to change the element in the list 'a' using your dictionary. Once you have completed looping the elements you can join() the list back to a string and output it.
7th May 2020, 11:29 PM
ChaoticDawg
ChaoticDawg - avatar
+ 1
Well, Russ suggestion is very clear and simple... You don't have to take pain splitting input and then iterating, which can be done without splitting.... As you have in your example....
8th May 2020, 4:49 PM
DeWill
DeWill - avatar
0
Go check my solution for it it will help you understand it
7th May 2020, 11:00 PM
Lord Nader
Lord Nader - avatar
0
G B i dont get the meaning of the idx
7th May 2020, 11:12 PM
Papa Kwasi Ansah Asare
Papa Kwasi Ansah Asare - avatar
0
Idx is the index.. it will count up by each iteration... But forget my answer.. sometimes I think too weird... Russ has a very nice solution;)
7th May 2020, 11:15 PM
G B
G B - avatar
0
Pls can u show me an example
7th May 2020, 11:19 PM
Papa Kwasi Ansah Asare
Papa Kwasi Ansah Asare - avatar
0
Add 0 to the dictionary (I don't learn Python so I think it's not called dictionary)
8th May 2020, 4:20 AM
Epsilon ︻╦̵̵͇̿̿̿̿╤──
Epsilon ︻╦̵̵͇̿̿̿̿╤── - avatar