現在就來寫一個簡單的 用戶輸入 的程式,這是一個互動模式,需要使用者自已輸入

#!/usr/bin/env python3
# -*- coding:utf-8 -*- username = input("username:")
password = input("password:") print(username, password) ---------------執行結果--------------- username:ironman
password:tonystark
ironman tonystark

這個就是一個很簡單的互動輸入的小程式,透過 input() 就可以做出來的小功能

接下來再深入一點點,寫個顯示用戶的個人資訊

#!/usr/bin/env python3
# -*- coding:utf-8 -*- name = input("username:")
age = input("age:")
job = input("job:")
salary = input("salary:") # 開始做字符串格式化 info = '''
---------- info of ''' + name + ''' ----------
Name: ''' + name + '''
Age: ''' + age + '''
Job: ''' + job + '''
Salary: ''' + salary + '''
''' print(info) ---------------執行結果--------------- username:TonyStark
age:38
job:ironman
salary:99999999999 ---------- info of TonyStark ----------
Name: TonyStark
Age: 38
Job: ironman
Salary: 99999999999

上面的代碼就是一種字符串格式化的一種寫法,雖然寫起來有點醜,但還是可以使用的,可是有沒有漂亮一點點的寫法?

答案是有的,接下來就來依據之前的代碼來做修正

name = input("username:")
age = input("age:")
job = input("job:")
salary = input("salary:") # 開始做字符串格式化 info1 = '''
---------- info1 of %s' ----------
Name: %s
Age: %s
Job: %s
Salary: %s
''' %(name, name, age, job, salary) print(info1) ---------------執行結果--------------- username:Bruce
age:35
job:Hulk
salary:0 ---------- info1 of Bruce' ----------
Name: Bruce
Age: 35
Job: Hulk
Salary: 0

上面程式碼裡的 Name, AGE, JOB Salary 都是字符串跟 name, name, age, job, salary是沒有關係的

name, name, age, job, salary 所對應到的則都是 %s,這就是字符串格式化。

接下來再深入一點點,再修改上面的程式

name = input("username:")
age = input("age:")
job = input("job:")
salary = input("salary:") # 開始做字符串格式化 info2 = '''
---------- info2 of %s ----------
Name: %s
Age: %d (這次修改成 %d, 來觀察一下有什麼差別?)
Job: %s
Salary: %s
''' %(name, name, age, job, salary) print(info2) ---------------執行結果--------------- username:Bruce
age:35
job:Hulk
salary:0
Traceback (most recent call last):
File "error/path/python/project/test.py", line 24, in <module>
''' %(name, name, age, job, salary)
TypeError: %d format: a number is required, not str

這次輸入後,發現錯誤了 TypeError: %d format: a number is required, not str

這句話告訴我們輸入的一定要是數字,而不是字符串,(咦~奇怪,怎麼輸入的不是數字嗎?怎麼會是字串…?

好吧,我們來打印一下數據類型,確認到底是不是數字,在 age 下面新增一行代碼,

print(type(age)) # 顯示變量的數據類型

name = input("username:")
age = input("age:")
print(type(age)) # 顯示變量的數據類型
job = input("job:")
salary = input("salary:") # 開始做字符串格式化 info2 = '''
---------- info2 of %s ----------
Name: %s
Age: %d
Job: %s
Salary: %s
''' %(name, name, age, job, salary) print(info2) ---------------執行結果--------------- username:Bruce
age:35
<class 'str'> → (真的是字符串,不是數字)
job:Hulk
salary:0
Traceback (most recent call last):
File "error/path/python/project/test.py", line 24, in <module>
''' %(name, name, age, job, salary)
TypeError: %d format: a number is required, not str

好啦,確認上面的數字的確是 str 也就是 字符串 了,那我們要怎麼修正咧?

我們只好強制把 age 轉換成數字,那要如何修正?

請在 age 等號的右邊改寫成 int(input("age:"))

name = input("username:")
age = int(input("age:")) # 在input前,加入int()強制轉換
print(type(age)) # 顯示變量的數據類型
job = input("job:")
salary = int(input("salary:")) # 開始做字符串格式化 info3 = '''
---------- info3 of %s ----------
Name: %s
Age: %d
Job: %s
Salary: %i
''' %(name, name, age, job, salary) print(info3) ---------------執行結果--------------- username:Bruce
age:35
<class 'int'>
job:Hulk
salary:0 ---------- info3 of Bruce ----------
Name: Bruce
Age: 35
Job: Hulk
Salary: 0

知識點:

  • % 是指執行字符串格式化
  • %s 是指字符串在執行格式化之前透過 str() 來轉換,簡單說就是『字符串』
  • %d 是指數字,也是整數,這個跟 %i 都是一樣的功能
  • %f 是指浮點數,有小數點的數字。

在 Python2.7 版中,raw_input 等於 Python3 版中的 input,

然而在 Python2.7版中,也有一個叫 input, 你輸入什麼格式,它就接受什麼格式,

嗯,好像有點難懂,沒關係,來做個小實驗吧

下面這張圖有直接打印出 print(name, type(name)) 直接驗証,上圖解釋是否正確

好,接下來再繼續介紹常見的字符串格式化

name = input("username:")
age = int(input("age:"))
job = input("job:")
salary = int(input("salary:")) # 開始做字符串格式化 info4 = '''
---------- info4 of {_name} ----------
Name: {_name}
Age: {_age}
Job: {_job}
Salary: {_salary}
'''.format(_name=name,
_age=age,
_job=job,
_salary=salary) print(info4) ---------------執行結果--------------- username:Potts
age:28
job:ceo
salary:99999 ---------- info4 of Potts ----------
Name: Potts
Age: 28
Job: ceo
Salary: 99999

官方建議可以用這一個寫法 ↑↑

name = input("username:")
age = int(input("age:"))
job = input("job:")
salary = int(input("salary:")) # 開始做字符串格式化 info5 = '''
---------- info4 of {0} ----------
Name: {0}
Age: {1}
Job: {2}
Salary: {3}
'''.format(name,age,job,salary) print(info5) ---------------執行結果--------------- username:Potts
age:28
job:CEO
salary:99999 ---------- info4 of Potts ----------
Name: Potts
Age: 28
Job: CEO
Salary: 99999

知識點:

  • 千萬不要使用 ---------- info of ''' + name + ''' ---------- 做字符串格式化,會大量占據內存的空間,導致效能很差
  • 官方建議可以使用 ---------- info4 of {_name} ---------- 做字符串格式化

參考資料:

python_strings

Python 基礎 - 用戶交互程序的更多相关文章

  1. Python 基礎 - if else流程判斷

    hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...

  2. Python 基礎 - for流程判斷

    今天介紹另一個循環判斷式 for循環,首先,先寫一個很簡單的 for循環的代碼 #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in range ...

  3. Python 基礎 - 字符編碼

    Python 解釋器在加載 .py 文件中的代碼時,會對內容進行編碼 (默認 ascill) ASCII (American Standard Code for Information Interch ...

  4. Python 基礎 - pyc 是什麼

    Python2.7 版中,只要執行 .py 的檔案後,即會馬上產生一個 .pyc 的檔案,而在 Python3 版中,執行 .py 的檔案後,即會產生一個叫 __pycache__ 的目錄,裡面也會有 ...

  5. Python 基礎 - 文件操作_v2

    嗯,那如何要把游標的位置給打印來? #!/usr/bin/env python3 # -*- coding:utf-8 -*- f = open('test', 'r') print(f.tell() ...

  6. Python 基礎 - 字典的操作使用

    接下來介紹字典,這在未來工作上,會是很常使用的,就來好好了解一下唄- 字典是一個 key(鍵)-value(值) 的數據類型,可以儲存很多訊息 #!/usr/bin/env python3 # -*- ...

  7. Python 基礎 - 淺copy補充說明

    在 import copy 這個模塊裡 基於第一個列表來做淺copy,實際上第二個列表裡的元素,是第一個列表的 引用. 接下來介紹 淺copy有三種方式可以使用 #!/usr/bin/env pyth ...

  8. Python 基礎 - 數據類型

    標準數據類型 Python3 中有六個標準的數據類型 1 Number(數字) 2 String(字符串) 3 List (列表) 4 Tuple (元組) 5 Sets (集合) 6 Diction ...

  9. Python 基礎 - 認識模塊

    什麼是模塊?簡單說就是別人寫好了一堆功能,封裝在一起. 模塊有分二種,一個是之前有提到的 標準庫,就是不需要透過額外的安裝就有的模塊 ,另一個叫 第三方庫,需要另外安裝才能使用的模塊 #!/usr/b ...

随机推荐

  1. [问题2015S03] 复旦高等代数 II(14级)每周一题(第四教学周)

    [问题2015S03]  设 \(g(x)=x^n+a_1x^{n-1}+\cdots+a_{n-1}x+a_n\) 是数域 \(\mathbb{K}\) 上的多项式, \(V\) 是 \(\math ...

  2. 【Unity3D游戏开发】NGUI之多分辨率下完美分布式协同开发 (五)

    NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 ...

  3. consul笔记-集群加入的问题

    加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 ...

  4. iOS开发数据库篇—SQLite的应用

    iOS开发数据库篇—SQLite的应用 一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二 ...

  5. 发布网站详细步骤(.Net)

    (i)打开需要发布的网站 右键需要发布的项目 点击下拉框新建配置文件,输入配置文件名称,点击确定,下一步 发布方法选文件系统,目标位置:项目的根目录 配置选Release 点击发布 (ii) 打开ii ...

  6. sublime text3 快捷方式汇总

    sublime text. 用过的都给赞, 哈哈-- 下面是快捷方式汇总啦: 选择类: Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次 ...

  7. Less入门到上手——前端开发利器<二>深入了解

    接着昨天的继续... ... 4.嵌套: HTML部分 <table> <tr> <th colspan="3">测试列表标题</th&g ...

  8. 20160824_CentOS6.4x64_关闭IPv6

    1.参考网址: http://blog.csdn.net/suplxj/article/details/7773423 2.我的操作: #cat <<EOF>>/etc/mod ...

  9. stm32cube--串口

    1.printf函数重定向 ①以stm32f103rct6的usart1为例,打开cube,配置好RCC和USART1,生成mdk程序. ②打开工程,在main.c中 /* USER CODE BEG ...

  10. python核心编程第六章练习6-10

    6-10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转,比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出.[答案]代码如下: #!/usr/bin/env py ...