本文目錄一覽:
- 1、Python語言程序設計(六)
- 2、如何用python編寫一個程序,首先定義一個接收字符串參數的
- 3、python 怎麼讓程序接受ctrl + c終止信號
- 4、python題編寫一個程序,接收用戶的輸入並存入一個列表,再編寫一個函數,將用戶的輸入列表作為參數,
- 5、python的一個小程序怎麼寫?
- 6、用python編寫一個函數,接收一個列表參數,函數返回該列表中所有正數之和。最後在主主程序中測試該函數?
Python語言程序設計(六)
1.(幾何學:一個五邊形的面積)編寫一個程序,提示用戶輸入五邊形頂點到中心距離r,然後算出五邊形的面積,如下圖所示。
計算五邊形面積的公式是Area = 5×s×s/(4×tan(π/5)),這裡的s是邊長。邊長的計算公式是 s =2rsin(π/5),這裡的r是頂點到中心距離。
2.(幾何學:大圓距離)大圓距離是球面上兩點之間的距離。假設(x1,y1)和(x2,y2)是兩點的經度和緯度,兩點之間大圓距離可以利用以下公式計算:
d = radius * arccos(sin(x1) × sin(x2) × cos(x1) × cos(x2) × cos(y2-y1))
編寫一個程序,提示用戶輸入地球表面兩點經度和緯度的度數然後顯示它們的大圓距離。地球的平均半徑為6371.01km。注意:你需要使用math. radians函數將度數轉化為弧度數,因為Python三角函數使用的是弧度。公式中的經緯度是西經和北緯。用負數表示東經和南緯。
3.(幾何學:估算面積)從網站找到佐治亞州亞特蘭大、佛羅里達州奧蘭多、大草原佐治亞、北卡羅來納州夏洛特的GPS位置,然後計算出這四個城市所圍成的區域的大概面積。
4.(幾何學:五角形的面積)五角形的面積可以使用下面的公式計算(s是邊長)
Area = (5×s²)/ (4×tan(π/5))
編寫一個程序,提示用戶輸入五邊形的邊長,然後顯示面積。
5.(幾何學:一個正多邊形的面積)正多邊形是邊長相等的多邊形嗎,而且所有的角都相等。計算正多邊形面積的公式是:
Area = (n × s²)/(4×tan(π/n))
這裡的s是邊長。編寫一個程序,提示用戶輸入邊數以及正多邊形的邊長,然後顯示他們的面積。
6.(找出ASCII碼的字符)編寫一個程序,接收一個ASCII碼值(一個0~127之間的整數),然後顯示它對應的字符。例如:如果用戶輸入97,程序將顯示字符a。
7.(隨機字符)編寫一個程序,使用time.time()函數顯示一個大寫的隨機字符。
9.(金融應用程序:工資表)編寫一個程序,讀取下面的信息,然後打印一個工資報表。
僱員姓名(例如:史密斯)
一周工作時間(例如:10)
每小時酬報(例如:9.75)
聯邦預扣稅率(例如:20%)
州預扣稅率(例如:9%)
10.(Turtle顯示統一碼)編寫一個程序,顯示希臘字母。αβγδεζηθ
11.(反向數字)編寫一個程序,提示用戶輸入一個四位整數,然後顯示顛倒各位數字後的數。
如何用python編寫一個程序,首先定義一個接收字符串參數的
使用交互式解釋器。
(只需在命令提示符中鍵入“python”)可以幫助您嘗試使用這種代碼snipplet。例如: fruit = ‘banana’ len(fruit)6 len(fruit) – 15 while index = 0:… print “index at: ” + str(index)。
python 怎麼讓程序接受ctrl + c終止信號
花了一天時間用python為服務寫了個壓力測試。很簡單,多線程向服務器發請求。但寫完之後發現如果中途想停下來,按Ctrl+C達不到效果,自然想到要用信號處理函數捕捉信號,使線程都停下來,問題解決的方法請往下看:
複製代碼代碼如下:
#!/bin/env python
# -*- coding: utf-8 -*-
#filename: peartest.py
import threading, signal
is_exit = False
def doStress(i, cc):
global is_exit
idx = i
while not is_exit:
if (idx 10000000):
print “thread[%d]: idx=%d”%(i, idx)
idx = idx + cc
else:
break
print “thread[%d] complete.”%i
def handler(signum, frame):
global is_exit
is_exit = True
print “receive a signal %d, is_exit = %d”%(signum, is_exit)
if __name__ == “__main__”:
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
cc = 5
for i in range(cc):
t = threading.Thread(target=doStress, args=(i,cc))
t.start()
上面是一個模擬程序,並不真正向服務發送請求,而代之以在一千萬以內,每個線程每隔並發數個(cc個)打印一個整數。很明顯,當所有線程都完成自己的任務後,進程會正常退出。但如果我們中途想退出(試想一個壓力測試程序,在中途已經發現了問題,需要停止測試),該腫么辦?你當然可以用ps查找到進程號,然後kill -9殺掉,但這樣太繁瑣了,捕捉Ctrl+C是最自然的想法。上面示例程序中已經捕捉了這個信號,並修改全局變量is_exit,線程中會檢測這個變量,及時退出。
但事實上這個程序並不work,當你按下Ctrl+C時,程序照常運行,並無任何響應。網上搜了一些資料,明白是python的子線程如果不是daemon的話,主線程是不能響應任何中斷的。但設為daemon後主線程會隨之退出,接着整個進程很快就退出了,所以還需要在主線程中檢測各個子線程的狀態,直到所有子線程退出後自己才退出,因此上例29行之後的代碼可以修改為:
複製代碼代碼如下:
threads=[]
for i in range(cc):
t = threading.Thread(target=doStress, args=(i, cc))
t.setDaemon(True)
threads.append(t)
t.start()
for i in range(cc):
threads[i].join()
重新試一下,問題依然沒有解決,進程還是沒有響應Ctrl+C,這是因為join()函數同樣會waiting在一個鎖上,使主線程無法捕獲信號。因此繼續修改,調用線程的isAlive()函數判斷線程是否完成:
複製代碼代碼如下:
while 1:
alive = False
for i in range(cc):
alive = alive or threads[i].isAlive()
if not alive:
break
這樣修改後,程序完全按照預想運行了:可以順利的打印每個線程應該打印的所有數字,也可以中途用Ctrl+C終結整個進程。完整的代碼如下:
複製代碼代碼如下:
#!/bin/env python
# -*- coding: utf-8 -*-
#filename: peartest.py
import threading, signal
is_exit = False
def doStress(i, cc):
global is_exit
idx = i
while not is_exit:
if (idx 10000000):
print “thread[%d]: idx=%d”%(i, idx)
idx = idx + cc
else:
break
if is_exit:
print “receive a signal to exit, thread[%d] stop.”%i
else:
print “thread[%d] complete.”%i
def handler(signum, frame):
global is_exit
is_exit = True
print “receive a signal %d, is_exit = %d”%(signum, is_exit)
if __name__ == “__main__”:
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
cc = 5
threads = []
for i in range(cc):
t = threading.Thread(target=doStress, args=(i,cc))
t.setDaemon(True)
threads.append(t)
t.start()
while 1:
alive = False
for i in range(cc):
alive = alive or threads[i].isAlive()
if not alive:
break
其實,如果用python寫一個服務,也需要這樣,因為負責服務的那個線程是永遠在那裡接收請求的,不會退出,而如果你想用Ctrl+C殺死整個服務,跟上面的壓力測試程序是一個道理。總結一下,python多線程中要響應Ctrl+C的信號以殺死整個進程,需要:
1.把所有子線程設為Daemon;
2.使用isAlive()函數判斷所有子線程是否完成,而不是在主線程中用join()函數等待完成;
3.寫一個響應Ctrl+C信號的函數,修改全局變量,使得各子線程能夠檢測到,並正常退出。
python題編寫一個程序,接收用戶的輸入並存入一個列表,再編寫一個函數,將用戶的輸入列表作為參數,
L = []
while 1:
s = input(‘Please input your information:’)
if s == ‘ ‘:
break
else:
L.append(s)
def funcrepeat(L):
if list(set(L)) == L:
print(“你的輸入沒有重複值”)
else:
print(“你的輸入有重複值”)
print(L)
funcrepeat(L)
python的一個小程序怎麼寫?
num1 = int(input())
num2 = int(input())
sum_all = 0
for i in range(num1,num2+1):
if i % 3 == 0 or i % 5 == 0:
sum_all += i
print(sum_all)
用python編寫一個函數,接收一個列表參數,函數返回該列表中所有正數之和。最後在主主程序中測試該函數?
題主你好,
代碼及測試截圖如下:
希望可以幫到題主, 歡迎追問
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/227426.html