【问题标题】:Defining the type of variable! PYTHON定义变量的类型! PYTHON
【发布时间】:2020-02-02 15:55:55
【问题描述】:

我正在做一个小型控制台程序。您输入数据,然后程序将其放入 .txt 文件中。 数据是: 国家 出生年份 出生月份 出生日期 真正的名字 昵称

我决定为每个变量做一个定义,所以如果用户在“国家”中输入一个整数,它会给他一个警告,反之亦然。 代码如下:

countryU = input('Страна проживания ')
yearU = input('Год рождения ')
monthU = input('Месяц рождения (его порядковый номер) ')
dayU = input('День рождения ')
nameU = input('Имя ')
nicknameU = input('Никнейм ')
aaaaa = 5
from random import *
u = randint(1,1000000000000)
uinfoname = str(u) + '.txt'

if type(countryU) == str:
    if type(yearU) == int:
        if type(monthU) == int:
            if type(dayU) == int:
                if type(nameU) == str:
                    if type(nicknameU) == str:
                        if countryU == '':
                            print('Вы ввели не все данные! Перезапустите программу и введите все.')
                            input('Press any key to exit...')
                        else:
                            if yearU == '':
                                print('Вы ввели не все данные! Перезапустите программу и введите все.')
                                input('Press any key to exit...')
                            else:
                                if monthU == '':
                                    print('Вы ввели не все данные! Перезапустите программу и введите все.')
                                    input('Press any key to exit...')
                                else:
                                    if dayU == '':
                                        print('Вы ввели не все данные! Перезапустите программу и введите все.')
                                        input('Press any key to exit...')
                                    else:
                                        if nameU == '':
                                            print('Вы ввели не все данные! Перезапустите программу и введите все.')
                                            input('Press any key to exit...')
                                        else:
                                            if nicknameU == '':
                                                print('Вы ввели не все данные! Перезапустите программу и введите все.')
                                                input('Press any key to exit...')
                                            else:
                                                if (len(str(nicknameU)) < aaaaa):
                                                    print('Твой никнейм недостаточно длинный! (минимум 5 символов) Перезагрузите программу и введите все правильно.')
                                                    input('Press any key to exit...')
                                                else:
                                                    print('Вы -', nameU, 'из страны', countryU, '')
                                                    print('Ваша дата рождения: месяц', monthU, 'число', dayU, 'год', yearU, '')
                                                    print('Ваш никнейм на сайте -', nicknameU, '.')
                                                    print('Приятного времяпрепровождения!')
                                                    output = open(uinfoname, 'x')
                                                    print(countryU, file=output)
                                                    print(yearU, file=output)
                                                    print(monthU, file=output)
                                                    print(dayU, file=output)
                                                    print(nameU, file=output)
                                                    print(nicknameU, file=output)
                                                    output.close()
                                                    input('Press any key to exit...')
                    else:
                        print('Никнейм не должен содержать специальные символы или цифры!')
                        input('Press any key to exit...')
                else:
                    print('Имя не должно содержать специальные символы или цифры!')
                    input('Press any key to exit...')
            else:
                print('День вашего рождения является числом!')
                input('Press any key to exit...')
        else:
            print('Месяц вашего рождения является числом!')
            input('Press any key to exit...')
    else:
        print('Год вашего рождения является числом!') #pay attention to this string, this is the problem
        input('Press any key to exit...')
else:
    print('Название вашей страны не может содержать специальные символы или цифры! (Если название вашей страны все-таки их содержит, напишите название без них.')
    input('Press any key to exit...')

别介意,我是俄罗斯人,我使用俄语。那么问题来了: 当我运行程序并正确输入所有内容(整数到整数,字符串到字符串)时,它说: Год вашего рождения является числом! (问题字符串) 这意味着“你的出生年份应该是一个数字!” 即使我输入了错误的国家(整数),它也是一样的。 所以无论我输入什么,它都会给我那个字符串。 我也使用了 isinstance,但这里的情况要糟糕得多。 请帮帮我!

【问题讨论】:

  • 顺便说一句,其他一切正常。当我删除整数/字符串的测试时,它也可以正常工作。
  • type(countryU) 将始终为str,因为input 始终返回str。
  • 如果有标准库函数可以告诉您字符串是否完全由数字或字母组成。 (提示:有。)
  • 顺便说一句,阅读此代码需要全景监视器...开玩笑,嵌套的if/else 语句太多。
  • 尝试使用elif 语句而不是嵌套的else if,以使代码更具可读性。

标签: python python-3.x string int


【解决方案1】:

input() 方法总是返回一个字符串。如果您希望对应的变量为整数,则应使用int() 方法将字符串转换为整数。

所以:

year = int(input("Please enter a year"))

对于其他类型的变量也是如此,但对于浮点数等使用 float() 方法。

【讨论】:

    【解决方案2】:

    您所有的输入都是字符串,您可以将整数处理为int(str_var)

    【讨论】:

      【解决方案3】:

      您的大部分代码都在迎合一种永远不会发生的情况,即input 的返回值不是 str 值。此外,如果您只是在使用input('Press any key to exit...') 时立即退出,则无需缩进以下代码。考虑到这一点,您的代码会立即简化为

      from random import *
      
      countryU = input('Страна проживания ')
      yearU = input('Год рождения ')
      monthU = input('Месяц рождения (его порядковый номер) ')
      dayU = input('День рождения ')
      nameU = input('Имя ')
      nicknameU = input('Никнейм ')
      aaaaa = 5
      u = randint(1,1000000000000)
      
      uinfoname = str(u) + '.txt'
      
      
      if countryU == '':
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      if yearU == '':
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      if monthU == '':
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      if dayU == '':
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      if nameU == '':
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      if nicknameU == '':
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      if (len(str(nicknameU)) < aaaaa):
          print('...')
          input('Press any key to exit...')
          sys.exit()
      
      print('Вы -', nameU, 'из страны', countryU, '')
      print('Ваша дата рождения: месяц', monthU, 'число', dayU, 'год', yearU, '')
      print('Ваш никнейм на сайте -', nicknameU, '.')
      print('Приятного времяпрепровождения!')
      output = open(uinfoname, 'x')
      print(countryU, file=output)
      print(yearU, file=output)
      print(monthU, file=output)
      print(dayU, file=output)
      print(nameU, file=output)
      print(nicknameU, file=output)
      output.close()
      input('Press any key to exit...')
      

      【讨论】:

        【解决方案4】:
        userinput = input ("Enter your Age")
        try:
           value = int(userinput)
           print("Input is an integer number. Number = ", valuee)
        except ValueError:
          try:
            value = float(userinput)
            print("Input is a float  number. Number = ", value)
          except ValueError:
              print("No.. input is not a number. It's a string")
        

        【讨论】:

          【解决方案5】:

          要删除您拥有的 IF 语句的数量,您可以在前几行询问变量时简单地询问输入是整数还是字符串,例如:

          countryU = str(input('Страна проживания '))
          yearU = int(input('Год рождения '))
          

          这样您就不需要检查输入是整数还是字符串,因为它就像整数或字符串一样。如果输入年份的字符,python 将返回一个错误。要解决此问题,您可以输入:

          if countryU != int():
          print('Год вашего рождения является числом!') # remember to indent/tab this line!!
          

          '!=' 表示不等于,所以如果国家不是整数输出“Год вашего рождения является числом!”。

          我希望这会有所帮助,这意味着您不需要检查它是否是 str/int,因为 python 会为您完成,您只需要检查它是否不是 srt/int。

          【讨论】:

            【解决方案6】:

            input([prompt]) 总是返回一个字符串类型。

            如果提示参数存在,则将其写入标准输出,不带尾随换行符。然后该函数从输入中读取一行,将其转换为字符串(去除尾随的换行符),然后返回。

            如果你想做类型检查,你可以使用isinstance(object, classinfo),如果对象参数是classinfo参数的一个实例,则返回True,遇到无效值时抛出异常。

            一个例子:

            def checkType(s):
                if not isinstance(s, str):
                    # This is (a simple form of) how you raise your own custom exception:
                    raise Exception('It must be a string')
                else: 
                    pass
            
            print(checkType('abc'))
            print(checkType(1))
            print("This line will never run!")
            

            【讨论】:

              【解决方案7】:

              你应该记住 input() 总是给你一个字符串。 试试这个:

              try:
                  mathproblem = int(input('23516 * 84818^81'))
              except ValueError:
                  print('Dude you should type a number...')
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-03-13
                • 1970-01-01
                • 2022-10-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多