-1

I am doing a project in university and I'm working on molecular mass calculator. This is the code I made.

element_mass = {'H': 1.00794, 'He': 4.002602, 'Li': 6.941, 'Be': 9.012182, 'B': 10.811, 'C': 12.0107, 'N': 14.0067,
              'O': 15.9994, 'F': 18.9984032, 'Ne': 20.1797, 'Na': 22.98976928, 'Mg': 24.305, 'Al': 26.9815386,
              'Si': 28.0855, 'P': 30.973762, 'S': 32.065, 'Cl': 35.453, 'Ar': 39.948, 'K': 39.0983, 'Ca': 40.078,
              'Sc': 44.955912, 'Ti': 47.867, 'V': 50.9415, 'Cr': 51.9961, 'Mn': 54.938045,
              'Fe': 55.845, 'Co': 58.933195, 'Ni': 58.6934, 'Cu': 63.546, 'Zn': 65.409, 'Ga': 69.723, 'Ge': 72.64,
              'As': 74.9216, 'Se': 78.96, 'Br': 79.904, 'Kr': 83.798, 'Rb': 85.4678, 'Sr': 87.62, 'Y': 88.90585,
              'Zr': 91.224, 'Nb': 92.90638, 'Mo': 95.94, 'Tc': 98.9063, 'Ru': 101.07, 'Rh': 102.9055, 'Pd': 106.42,
              'Ag': 107.8682, 'Cd': 112.411, 'In': 114.818, 'Sn': 118.71, 'Sb': 121.760, 'Te': 127.6,
              'I': 126.90447, 'Xe': 131.293, 'Cs': 132.9054519, 'Ba': 137.327, 'La': 138.90547, 'Ce': 140.116,
              'Pr': 140.90465, 'Nd': 144.242, 'Pm': 146.9151, 'Sm': 150.36, 'Eu': 151.964, 'Gd': 157.25,
              'Tb': 158.92535, 'Dy': 162.5, 'Ho': 164.93032, 'Er': 167.259, 'Tm': 168.93421, 'Yb': 173.04,
              'Lu': 174.967, 'Hf': 178.49, 'Ta': 180.9479, 'W': 183.84, 'Re': 186.207, 'Os': 190.23, 'Ir': 192.217,
              'Pt': 195.084, 'Au': 196.966569, 'Hg': 200.59, 'Tl': 204.3833, 'Pb': 207.2, 'Bi': 208.9804,
              'Po': 208.9824, 'At': 209.9871, 'Rn': 222.0176, 'Fr': 223.0197, 'Ra': 226.0254, 'Ac': 227.0278,
              'Th': 232.03806, 'Pa': 231.03588, 'U': 238.02891, 'Np': 237.0482, 'Pu': 244.0642, 'Am': 243.0614,
              'Cm': 247.0703, 'Bk': 247.0703, 'Cf': 251.0796, 'Es': 252.0829, 'Fm': 257.0951, 'Md': 258.0951,
              'No': 259.1009, 'Lr': 262, 'Rf': 267, 'Db': 268, 'Sg': 271, 'Bh': 270, 'Hs': 269, 'Mt': 278,
              'Ds': 281, 'Rg': 281, 'Cn': 285, 'Nh': 284, 'Fl': 289, 'Mc': 289, 'Lv': 292, 'Ts': 294, 'Og': 294,
              'ZERO': 0}

import re

formula=input("화학식을 입력해주세요:")
s=re.findall('([A-Z][a-z]?)([0-9]*)',formula)
for element,count in s:
    if count==' ':
        count==1
    totalmass=sum(int(count)*element_mass[element])


print('화학식량은',' ',total_mass,'입니다.')

'화학식을 입력해주세요' means 'Input chemical formula', and '화학식량은 total_mass입니다' means 'Molecular mass is total_mass'.

When I run the code, it keeps printing

Traceback (most recent call last):
  File "C:\Users\Lenovo\Desktop\코딩기말\연습.py", line 28, in <module>
    totalmass=sum(int(count)*element_mass[element])
ValueError: invalid literal for int() with base 10: ''

I don't know how to solve this problem.

xxx
  • 1
  • can you share an example input for `input("화학식을 입력해주세요:")`? – Ali Yılmaz Dec 08 '19 at 06:57
  • 1
    I believe the error is caused by `count` which you are trying to convert to an `int`. If I am not wrong, the error states that it can't parse the string as it is not a base 10 number, and then it shows the number you are trying to parse is `''`. Check whether `count` is actually a number (at all times). You could easily do a `print(element, count)` in the for loop to see where the issue is. – k88 Dec 08 '19 at 06:58
  • Does [this](https://stackoverflow.com/a/1841607/10239789) answer your question? [ValueError: invalid literal for int() with base 10: ''](https://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10) – TrebledJ Dec 08 '19 at 07:15
  • Here's some advice when trying to solve issues like these: copy-paste "_ValueError: invalid literal for int() with base 10: ''_" directly into Google/Bing/whatever search engine you use. Results pop up immediately. – TrebledJ Dec 08 '19 at 07:21
  • What's specifically happening here, however is something else. And a bit more for that matter. (1) Your code evades the `count == ' '` check. Try printing out `s`. Let's say you input `'H2O Ne'`. Then `s` gives `[('H', '2'), ('O', ''), ('Ne', '')]`. Note that if the count is not specified, then `count == ''`, an empty string. (2) Below your if-statement, you wrote `count==1`. You probably meant `count = 1`, assignment instead? – TrebledJ Dec 08 '19 at 07:24
  • I fixed some problem, but I still can't figure how to convert an empty string ' ' to 1. It works fine if I input things like C2H6, but if I input some formula like H2O or CH4, it still has an error. – xxx Dec 08 '19 at 09:56

1 Answers1

0

Did you notice the '' in the error message:

ValueError: invalid literal for int() with base 10: ''

>>> int('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

So it basically means that you trying to convert an empty string to int.

abhilb
  • 5,639
  • 2
  • 20
  • 26